Xerces
Xerces — это библиотека для синтаксического анализа XML-документов, разработанная на языке Java. Xerces является одной из наиболее известных и широко используемых реализаций парсеров XML, поддерживающих стандарты Document Object Model (DOM), Simple API for XML (SAX) и Streaming API for XML (StAX). Библиотека распространяется под лицензией Apache 2.0 и входит в состав экосистемы Apache Software Foundation.
История
Разработка Xerces началась в конце 1990-х годов в рамках проекта компании IBM. Первоначально библиотека называлась XML4J (XML for Java) и была одной из первых коммерческих реализаций XML-парсера для Java. В 1999 году исходный код XML4J был передан в некоммерческую организацию Apache Software Foundation, где проект получил название Xerces. Первая публичная версия Xerces 1.0 была выпущена в 2000 году.
В 2002 году вышла версия Xerces2, которая была полностью переработана. В ней была использована архитектура на основе модулей (Xerces Native Interface, XNI), что позволило расширять функциональность парсера и подключать различные обработчики. Xerces2 стал эталонной реализацией для спецификаций DOM Level 3, SAX 2.0 и JAXP (Java API for XML Processing).
В 2005 году проект был объединён с другим парсером — Crimson (ранее входившим в состав Sun JDK). После этого Xerces стал единственным стандартным XML-парсером в составе Java SE, вплоть до версии Java 11, где он был заменён на более современные реализации.
Архитектура и компоненты
Xerces состоит из нескольких ключевых модулей, каждый из которых отвечает за определённый способ обработки XML:
DOM-парсер (Document Object Model)
DOM-парсер загружает весь XML-документ в оперативную память и строит его древовидное представление. Это позволяет произвольно обращаться к любому элементу, атрибуту или текстовому узлу документа. Основные классы: DOMParser и DocumentBuilder. DOM-парсер удобен для небольших и средних документов, но требует значительных ресурсов при работе с большими файлами.
SAX-парсер (Simple API for XML)
SAX-парсер работает в потоковом режиме, читая документ последовательно и вызывая обработчики событий (например, начало элемента, конец элемента, текстовое содержимое). Этот подход требует меньше памяти, так как документ не хранится целиком. Основные классы: SAXParser и XMLReader. SAX-парсер подходит для обработки больших XML-файлов, но не позволяет возвращаться к ранее прочитанным данным без повторного чтения.
StAX-парсер (Streaming API for XML)
StAX-парсер, в отличие от SAX, использует модель «pull» (вытягивание): приложение само запрашивает следующее событие из потока, а не получает его от парсера. Это даёт более гибкий контроль над процессом разбора. StAX поддерживается в Xerces начиная с версии 2.9.0.
Схемы и валидация
Xerces поддерживает валидацию XML-документов по DTD (Document Type Definition) и XML Schema (XSD). Валидация может быть включена или отключена программно. Парсер также поддерживает RELAX NG (упрощённый язык описания схем) и Schematron (язык правил для проверки XML).
Основные возможности
- Поддержка кодировок: автоматическое определение кодировки XML-документа (UTF-8, UTF-16, ISO-8859-1 и др.).
- Обработка пространств имён: полная поддержка XML Namespaces.
- Обработка ошибок: гибкая система обработки ошибок парсинга с возможностью задания собственных обработчиков.
- Расширяемость: через интерфейс XNI можно подключать собственные модули для обработки сущностей, комментариев, инструкций обработки.
- Интернационализация: поддержка Unicode и локализованных сообщений об ошибках.
Применение
Xerces широко используется в корпоративных приложениях, веб-сервисах, системах обмена данными и инструментах разработки. Библиотека входит в состав многих серверов приложений (Apache Tomcat, JBoss, WebSphere) и сред разработки (Eclipse, NetBeans). Xerces также является частью стандартной библиотеки Java SE (до версии 11).
Примеры использования:
- Обработка конфигурационных файлов в формате XML.
- Разбор SOAP-сообщений в веб-сервисах.
- Валидация XML-документов по заданным схемам.
- Преобразование XML с помощью XSLT (через интеграцию с Apache Xalan).
- Сериализация и десериализация объектов в XML.
Критика и ограничения
Несмотря на широкое распространение, Xerces имеет ряд недостатков:
- Производительность: при работе с очень большими документами (сотни мегабайт) DOM-парсер может вызывать переполнение памяти.
- Сложность конфигурации: настройка валидации и обработчиков ошибок требует глубокого понимания спецификаций XML.
- Устаревание: с выходом Java 11 Xerces был заменён на более лёгкие и быстрые парсеры (например,
com.sun.org.apache.xerces.internalостаётся, но не рекомендуется для новых проектов). Современные альтернативы — Woodstox, Aalto, или встроенный парсер Java (JAXP RI).
Интересные факты
- Название «Xerces» происходит от названия подсемейства бабочек (лат. Xerces), что является отсылкой к проекту Xerox PARC, где были разработаны первые концепции XML.
- Xerces стал первой библиотекой, реализовавшей полную поддержку XML Schema 1.1.
- Исходный код Xerces послужил основой для создания парсера в Microsoft .NET Framework (System.Xml).
Источники
- Apache Xerces2 — официальная документация проекта (Apache Software Foundation)
- Спецификация DOM Level 3 (W3C)
- Спецификация SAX 2.0 (David Megginson)
- Java API for XML Processing (JAXP) — документация Oracle
- «XML in a Nutshell» — Elliotte Rusty Harold, W. Scott Means (O'Reilly Media)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →