Apache Xerces2
Apache Xerces2 — это семейство библиотек для синтаксического разбора (парсинга), валидации и обработки XML-документов, написанных на языке Java. Xerces2 является второй основной версией проекта Xerces, разрабатываемого в рамках инкубатора Apache Software Foundation, и предоставляет реализацию стандартных API для работы с XML, включая DOM (Document Object Model), SAX (Simple API for XML) и StAX (Streaming API for XML). Библиотека широко используется в корпоративных Java-приложениях, веб-серверах и инструментах разработки для чтения, проверки и преобразования XML-данных.
История
Проект Xerces начался как часть технологии XML от компании IBM. В 1999 году исходный код был передан в Apache Software Foundation, где он стал одним из первых проектов в области обработки XML. Первая версия, Xerces-J 1.x, была выпущена в 2000 году и поддерживала только DOM и SAX. В 2001 году вышла вторая версия — Xerces2, которая была полностью переработана для соответствия новым спецификациям W3C (World Wide Web Consortium) и Java Community Process.
Основные вехи развития:
- 2001 год: Релиз Xerces2 2.0.0. Введена поддержка XML Schema 1.0.
- 2003 год: Версия 2.6.0. Добавлена поддержка XInclude (XML Inclusions) и улучшена производительность.
- 2005 год: Версия 2.7.0. Реализована поддержка DOM Level 3 и SAX 2.0.2.
- 2007 год: Версия 2.9.0. Введена поддержка StAX (JSR 173) и XML Schema 1.1 (частично).
- 2010 год: Последний стабильный релиз Xerces2 2.11.0. Дальнейшее развитие проекта было приостановлено, так как основные функции были включены в стандартную библиотеку Java (пакет
javax.xml.parsers).
Несмотря на прекращение активной разработки, Xerces2 остаётся популярным выбором для проектов, требующих высокой степени совместимости со старыми версиями Java или специфических функций, не реализованных в стандартном JDK.
Архитектура и компоненты
Xerces2 состоит из нескольких модулей, каждый из которых отвечает за определённый аспект обработки XML:
Парсеры
- SAX-парсер: Реализует событийно-ориентированный интерфейс SAX 2.0.2. Позволяет обрабатывать XML-документы последовательно, не загружая их целиком в память, что эффективно для больших файлов.
- DOM-парсер: Реализует интерфейс DOM Level 3. Строит в памяти древовидное представление документа, позволяя произвольный доступ к узлам.
- StAX-парсер: Реализует потоковый API (JSR 173). Поддерживает как курсорный (XMLStreamReader), так и событийный (XMLEventReader) подходы.
Валидаторы
- Валидация DTD: Поддержка Document Type Definition (DTD) — устаревшего, но всё ещё распространённого способа определения структуры XML.
- Валидация XML Schema: Полная поддержка XML Schema 1.0 (W3C Recommendation) и частичная поддержка XML Schema 1.1 (включая
assertиalternative). - Валидация RELAX NG: Поддержка схем RELAX NG (Compact и XML синтаксис) через модуль
xercesImpl.
Сериализаторы
- XMLSerializer: Преобразует DOM-дерево обратно в XML-текст. Поддерживает настройки кодировки, отступов и обработки пробелов.
- HTMLSerializer: Экспорт в HTML (с учётом особенностей HTML-тегов, таких как
brилиimg).
Утилиты
- XInclude: Обработка включений (
<xi:include>) для композиции документов из нескольких файлов. - XPointer: Поддержка указателей на фрагменты XML-документов (частично).
Применение
Xerces2 используется в широком спектре Java-приложений:
- Веб-серверы: Apache Tomcat, Jetty и JBoss используют Xerces2 для обработки конфигурационных XML-файлов (например,
web.xml,server.xml). - Инструменты сборки: Apache Ant, Maven и Gradle (через плагины) применяют Xerces2 для парсинга XML-конфигураций (например,
pom.xml). - Библиотеки и фреймворки: Spring Framework, Hibernate и JAXB (Java Architecture for XML Binding) могут использовать Xerces2 в качестве провайдера парсера.
- Системы электронного документооборота: Обработка XML-документов, соответствующих стандартам, таким как UBL (Universal Business Language) или OASIS.
- Научные и промышленные системы: Обработка больших XML-файлов (например, в биоинформатике или геоинформатике) благодаря эффективной SAX-реализации.
Критика и ограничения
Несмотря на широкое распространение, Xerces2 имеет ряд недостатков, отмеченных сообществом разработчиков:
- Производительность: В некоторых тестах Xerces2 уступает более новым парсерам, таким как Woodstox или Aalto, особенно при потоковой обработке (StAX).
- Потребление памяти: DOM-реализация Xerces2 может быть ресурсоёмкой при работе с очень большими документами, так как строит полное дерево в памяти.
- Устаревание: Последний релиз вышел в 2010 году, и проект не обновляется для поддержки новых версий Java (например, модульной системы Java 9+). Однако он остаётся совместимым с Java 8 и более ранними версиями.
- Сложность конфигурации: Для настройки валидации и обработки ошибок требуется глубокое понимание API и свойств (properties) парсера.
Конкуренты
На рынке Java-парсеров Xerces2 конкурирует с несколькими проектами:
- Woodstox: Легковесный StAX-парсер с высокой производительностью, часто используемый в качестве замены Xerces2 для потоковой обработки.
- Aalto: Ещё один высокопроизводительный StAX-парсер, разработанный автором Woodstox.
- Xerces3: Третья версия проекта (Xerces3), которая была начата, но не завершена. Она должна была объединить лучшие черты Xerces2 и Woodstox, но разработка была остановлена.
- Встроенный парсер JDK: Начиная с Java 6, в стандартную библиотеку Java включён парсер (на основе Xerces2), который является предпочтительным для большинства приложений, так как не требует дополнительных зависимостей.
Интересные факты
- Название «Xerces» происходит от имени древнеперсидского царя Ксеркса I (Xerxes I), что является игрой слов с «parser» (парсер).
- Xerces2 был одним из первых проектов, реализовавших поддержку XML Schema 1.0, что способствовало его популярности в начале 2000-х годов.
- В 2015 году проект был переведён в «спящий» режим (dormant) в инкубаторе Apache, но исходный код остаётся доступным в репозитории Apache SVN.
Источники
- Apache Xerces2 — официальная документация (Apache Software Foundation)
- «XML Parsing in Java: Xerces2 vs. Woodstox» — сравнительный анализ, журнал JavaWorld (2008)
- «Java XML and JAXP: A Practical Guide» — книга Эллиота Русти Гарольда (2003)
- Спецификации W3C: DOM Level 3, SAX 2.0.2, XML Schema 1.0
- Репозиторий Apache Xerces2 на GitHub (зеркало)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →