Изучаем Java EE 7 - [187]

Шрифт
Интервал

В табл. 12.3 приведены некоторые спецификации для технологий XML.


Таблица 12.3. Спецификации W3C для XML
СпецификацияВерсияURL
Extensible Markup Language (XML)1.1http://www.w3.org/TR/xml11/
XML Schema1.0http://www.w3.org/TR/xmlschema-1
Extensible Stylesheet (XSLT)1.0http://www.w3.org/TR/xslt
XML Path (XPath)1.0http://www.w3.org/TR/xpath
Document Object Model (DOM)level 3http://www.w3.org/TR/DOM-Level-3-Core/
Simple API for XML (SAX)2.0.2http://sax.sourceforge.net/

Спецификации XML в Java

Экосистема XML была создана W3C. Однако поскольку она работает рука об руку с Java, есть несколько связанных с XML спецификаций, которые были созданы в рамках JCP. Примеров множество — от обработки XML до связывания документов с объектами Java.

JAXP (Java Architecture for XML Processing — архитектура Java для обработки XML) — это низкоуровневая спецификация (JSR 206), которая дает возможность очень гибко обрабатывать XML, а также позволяет использовать SAX, DOM или XSLT. Этот API также применяется JAXB и StAX.

Спецификация JAXB обеспечивает набор API-интерфейсов и аннотаций для представления XML-документов как артефактов Java, что позволяет работать с соответствующими объектами Java. JAXB (JSR 222) обрабатывает демаршалинг документов XML в объекты и наоборот. Даже если JAXB можно использовать для работы с XML, он тесно интегрирован с JAX-WS (смотрите главу 14).

StAX (Streaming API for XML — потоковый API для XML) версии 1.0 (JSR 173) представляет собой API для чтения и записи XML-документов. Основным направлением его деятельности является использование преимуществ древоподобных API (анализаторов DOM) и API, основанных на событиях (анализаторов SAX). Первые позволяют получить произвольный, неограниченный доступ к документу, в то время как вторые занимают меньше памяти и предъявляют меньше требований к процессору.

В табл. 12.4 перечислены все спецификации Java, связанные с XML.


Таблица 12.4. Спецификации, связанные с XML
СпецификацияВерсияJSRURL
JAXP1.3206http://jcp.org/en/jsr/detail?id=206
JAXB2.2222http://jcp.org/en/jsr/detail?id=222
StAX1.0173http://jcp.org/en/jsr/detail?id=173

Примеры реализаций

Основная цель примеров реализаций (Reference Implementation, RI) — это поддержка разработки спецификаций и их проверка. StAX RI является примером реализации для спецификации JSR-173, которая основана на стандартном анализаторе потоковой модели. StAX был включен в JDK, начиная с версии 1.6, и может быть загружен отдельно для JDK версий 1.4 и 1.5. RI для спецификации JAXP интегрирован в Java SE, как и Metro, который является примером реализации JAXB. Metro — это высококачественная реализация JAXB, которая используется в некоторых продуктах компании Oracle.

Архитектура Java для обработки XML

Архитектура Java для обработки XML (Java Architecture for XML Processing, JAXP) представляет собой API, который обеспечивает общий, независимый от реализации интерфейс для создания и использования SAX, DOM и XSLT API в Java.

До появления JAXP существовали разные несовместимые версии анализаторов и преобразователей XML от различных поставщиков. JAXP предоставил уровень абстракции поверх этих реализаций конкретных производителей API для анализа и преобразования XML-ресурсов.

Обратите внимание, что JAXP не использует другой механизм анализа и преобразования XML-документов. Вместо этого приложения могут применять его для доступа к базовым XML API. Приложения могут заменить реализацию одного поставщика другой.

Используя JAXP, можно анализировать XML-документы с помощью SAX или DOM или преобразовать их в новый формат с помощью XSLT. Архитектура JAXP API изображена на рис. 12.1.


Рис. 12.1. Архитектура JAXР


JAXP состоит из четырех пакетов, перечисленных в табл. 12.5. В них вы найдете интерфейсы и классы, предназначенные для анализа и преобразования XML-данных.


Таблица 12.5. Пакеты JAXP
ПакетОписание
javax.xml.parsersОбщий интерфейс для анализаторов DOM и SAX
org.w3c.domОбщий API для работы с DOM в Java
org.xml.saxОпределяет интерфейсы, использованные для анализаторов SAX
javax.xml.transformAPI XLST для преобразования XML в другие типы документов

Конфигурирование JAXP

Ввиду гибкости JAXP его можно настроить на использование любой реализации обработки. Однако вы всегда можете применить стандартные значения в качестве примера реализации (JAXP использует Xerces как стандартный синтаксический анализатор XML и Xalan — как процессор XSLT для преобразования XML-документов).

Представьте себе сценарий, в котором имеется более одной совместимой с JAXP реализации в пути к вашим классам. В этом случае вы должны указать JAXP, какой API следует использовать. В зависимости от того, работает ваше приложение в автономном режиме клиента или режиме сервера приложений, вы можете предоставить своему приложению анализатор или преобразователь XML с помощью файла свойств. Например, поместив файл jaxp.properties (стандартный файл, следующий формату java.util.Properties) в подкаталоге lib каталога JRE указывает реализации JAXP использовать заданные фабрики. Ниже представлено содержимое файла jaxp.properties, который определяет, какой строитель DOM, анализатор SAX и преобразователь XSLT будет применяться:


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.