Открыть сервис

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).

Примеры использования:

Критика и ограничения

Несмотря на широкое распространение, 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 →