Validation and Schema caching JAXP API

Многие приложения стремятся провести проверку корректности XML-документов по определенной схеме, например схеме, определенной в W3C XML Schema Recommendation. Для этого процессор проверки корректности должен проанализировать схему документа, представить эту схему в памяти и, затем, использовать эту схему в памяти для проверки корректности XML-документа. Следовательно, такая проверка корректности может привести к значительной потере производительности, если процессор будет производить синтаксический анализ и строить схему в памяти перед обработкой каждого XML-документа. Обычно приложение использует ограниченный набор схем, и поэтому было бы желательно, чтобы процессор строил представление конкретной схемы в памяти только один раз и использовал его для проверки документов.

До настоящего времени приложения должны были обеспечивать свой собственный механизм кэширования схем. Например, анализатор Apache Xerces-J определяет собственный API кэширования грамматики (см. раздел «Ресурсы»). Теперь JAXP 1.3 определяет стандартный API (пакет javax.xml.validation), дающий приложениям возможность повторно использовать схемы и, таким образом, повысить общую производительность.

Рассмотрим API проверки корректности. Для извлечения внутреннего представления схемы или схем прежде всего необходимо получить экземпляр конструктора схемы (javax.xml.validation.SchemaFactory), который указывает конкретный язык схемы, поддерживаемый данным конструктором. Совместимые с JAXP реализации должны поддерживать W3C XML Schema. Поддержка других языков, например RELAX NG, является не обязательной. Вы можете настроить конструктор при помощи функций и свойств аналогично настройке синтаксического анализатора XML и, в завершение, вы можете указать конструктору построить представление данной схемы (или схем) в памяти. Это внутренне представление схемы определено в виде класса Schema, являющегося неизменяемым и, следовательно, безопасным с точки зрения поддержки многопоточности (thread-safe). API не предоставляет средств для разрешения запросов о структуре или свойствах схемы.

Вы можете использовать класс Schema несколькими способами:

Для начала мы рассмотрим, как улучшить производительность синтаксического анализа путем повторного использования внутреннего представления определенной схемы в памяти. Ради простоты в приведенном в листинге 1 примере используется XML-документ (po.xml), содержащий заказ на поставку и схему заказа (po.xsd). И документ, и схема определены с использованием W3C XML Schema Primer Recommendation (см. раздел «Ресурсы»).

Постройте конструктор схемы и используйте его для создания внутреннего представления в памяти схемы заказа на поставку. Затем получите экземпляр DOM-конструктора и назначьте конструктору схему заказа. Создайте DOM-анализатор при помощи DOM-конструктора. Новый синтаксический анализатор будет способен производить проверку корректности XML-документов только в соответствии со схемой заказа на поставку.

Добавить комментарий