Модуль java.xml
API JAXP
JAXP включает набор API, построенных на нескольких XML-технологиях и стандартах, которые необходимы для обработки XML. Они включают API для:- Парсинга: основанный на
JAXP Parsing API,Document Object Model (DOM)иSimple API for XML Parsing (SAX), а такжеStreaming API for XML (StAX); - Сериализации: StAX и
Extensible Stylesheet Language Transformations (XSLT); - Валидации:
JAXP Validation API, основанный на языке определения схем XML; - Трансформации:
JAXP Transformation APIили XSLT (расширяемый язык стилей преобразований); - Запроса и обхода XML-документов:
XML XPath Language API (XPath); - Разрешения внешних ресурсов:
XML Catalog API;
Фабрики и процессоры
Фабрики являются точками входа каждого API, предоставляя методы, позволяющие приложениям программно задавать свойства JAXP перед созданием процессоров. Раздел Настройка содержит более подробную информацию об этом. Фабрики также поддерживают механизм поиска JAXP, в котором приложения могут быть развернуты с реализациями третьих сторон вместо реализаций JDK.Процессоры являются агрегатами парсеров (или читателей), сериализаторов (или писателей), валидаторов и трансформаторов, которые контролируют и выполняют обработку в соответствующих областях. Они определены в соответствующих пакетах. Например, в пакете parsers находятся DocumentBuilder и SAXParser, представляющие процессоры DOM и SAX.
Процессоры настраиваются и создаются с помощью соответствующих фабрик. Например, DocumentBuilder и SAXParser создаются с помощью DocumentBuilderFactory и SAXParserFactory соответственно.
Настройка
При первом вызове фабрики JAXP выполняется процесс настройки для определения используемой реализации и ее последующего поведения. Во время настройки фабрика проверяет такие источники конфигурации, как свойства JAXP, системные свойства и файл конфигурации JAXP, и устанавливает значения, следуя порядку приоритета свойств. Терминология и процесс определены ниже.Свойства JAXP
Свойства JAXP — это параметры конфигурации, которые применяются к процессорам XML. Они могут использоваться для управления и настройки поведения процессора. В зависимости от используемого API JAXP, свойства JAXP могут называться *Атрибутами, Свойствами* или *Функциями*.Системные свойства
Некоторые свойства JAXP имеют соответствующие системные свойства, позволяющие настраивать свойства во время выполнения, в командной строке или в файле конфигурации JAXP. Например, системное свойствоjavax.xml.catalog.resolve может использоваться для установки свойства RESOLVE каталога CatalogFeatures. Точное время чтения системных свойств не определено. Для обеспечения правильного применения желаемых значений приложения должны убедиться, что системные свойства установлены должным образом до создания первой фабрики JAXP и не изменяются после этого.
Файл конфигурации JAXP
JAXP поддерживает использование файлов конфигурации для указания класса реализации для загрузки фабрик JAXP, а также для установки свойств JAXP.Файлы конфигурации — это файлы Java Properties, которые содержат соответствия между системными свойствами и их значениями, определенными различными API или процессами. Следующие записи в файле конфигурации демонстрируют установку свойств javax.xml.parsers.DocumentBuilderFactory и CatalogFeatures.RESOLVE:
javax.xml.parsers.DocumentBuilderFactory=packagename.DocumentBuilderFactoryImpl
javax.xml.catalog.resolve=strict
jaxp.properties файл
По умолчанию JAXP ищет файл конфигурации jaxp.properties, расположенный в каталоге ${java.home}/conf; и если файл существует, загружает указанные свойства для настройки поведения XML-фабрик и процессоров. Файл jaxp.properties будет читаться только один раз во время инициализации реализации JAXP и кэшироваться в памяти. Если возникнет ошибка доступа к файлу или его чтения, процесс конфигурации продолжится так, как если бы файла не существовало.
Пользовательский файл конфигурации
В дополнение к файлуjaxp.properties системное свойство java.xml.config.file может быть установлено для указания расположения файла конфигурации. Если свойство java.xml.config.file включено в файл конфигурации, оно будет проигнорировано. При указании java.xml.config.file, файл конфигурации будет прочитан, и включенные свойства переопределят те же свойства, которые были определены в файле jaxp.properties. Если свойство java.xml.config.file не установлено во время инициализации реализации JAXP, дальнейших попыток проверить его существование не будет.
Значение java.xml.config.file должно содержать допустимый путь к файлу конфигурации. Если путь не является абсолютным, он будет рассматриваться как относительный к рабочей директории JVM. Если при чтении файла конфигурации возникнет ошибка, процесс конфигурации продолжится так, как если бы свойство java.xml.config.file не было установлено. Реализации могут по желанию вывести сообщение об ошибке.
Порядок приоритета свойств
Свойства JAXP могут быть установлены несколькими способами, включая методы API, системные свойства и файл конфигурации JAXP. Если они не установлены явно, они будут инициализированы значениями по умолчанию или более строгими значениями при включенной функцииFEATURE_SECURE_PROCESSING (FSP). Порядок приоритета конфигурации для свойств следующий, от самого высокого к самому низкому: API фабрик или процессоров
Системное свойство
Пользовательский файл конфигурации
Файл конфигурации JAXP по умолчанию
jaxp.propertiesЗначения по умолчанию для свойств JAXP. Если
FSPистинно, значения по умолчанию будут установлены для безопасной обработки XML.
CatalogFeatures в качестве примера, следующее иллюстрирует, как применяются эти правила: -
Свойства, указанные в методах фабрик или процессоров, имеют наивысший приоритет. Следующий код эффективно устанавливает свойство RESOLVE в
strict, независимо от настроек в других источниках конфигурации.DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setAttribute(CatalogFeatures.Feature.RESOLVE.getPropertyName(), "strict"); -
Если свойство не установлено в фабрике, как в коде выше, будет использоваться системное свойство.
// in the following example, the RESOLVE property is set to 'continue' // for the entire application java -Djavax.xml.catalog.resolve=continue myApp -
Если свойство не установлено в фабрике или с помощью системного свойства, то установка в файле конфигурации вступит в силу. Следующая запись устанавливает свойство в '
continue'.javax.xml.catalog.resolve=continue Если свойство не установлено нигде, оно будет разрешено до значения по умолчанию, которое равно '
strict'.
Механизм поиска JAXP
JAXP определяет упорядоченную процедуру поиска для определения класса реализации для загрузки фабрик JAXP. Фабрики, которые поддерживают этот механизм, перечислены в таблице ниже вместе с методом, системным свойством и системным значением по умолчанию, которые должны использоваться в этой процедуре.| Фабрика | Метод | Системное свойство | Системное значение по умолчанию |
|---|---|---|---|
DatatypeFactory | newInstance() | javax.xml.datatype.DatatypeFactory | newDefaultInstance() |
DocumentBuilderFactory | newInstance() | javax.xml.parsers.DocumentBuilderFactory | newDefaultInstance() |
SAXParserFactory | newInstance() | javax.xml.parsers.SAXParserFactory | newDefaultInstance() |
XMLEventFactory | newFactory() | javax.xml.stream.XMLEventFactory | newDefaultFactory() |
XMLInputFactory | newFactory() | javax.xml.stream.XMLInputFactory | newDefaultFactory() |
XMLOutputFactory | newFactory() | javax.xml.stream.XMLOutputFactory | newDefaultFactory() |
TransformerFactory | newInstance() | javax.xml.transform.TransformerFactory | newDefaultInstance() |
SchemaFactory | newInstance(schemaLanguage) |
javax.xml.validation.SchemaFactory:язык_схемы[1] | newDefaultInstance() |
XPathFactory | newInstance(uri) |
DEFAULT_PROPERTY_NAME + ":uri"[2] | newDefaultInstance() |
newInstance(schemaLanguage). [2] где uri — параметр метода newInstance(uri).
Процедура поиска
Порядок приоритетов при поиске реализации класса JAXP-фабрики следующий, от наивысшего к наименьшему:- Системное свойство, перечисленное в столбце "Системное свойство" таблицы JAXP-фабрики выше
-
Файл конфигурации (Configuration File)
-
Модуль загрузки поставщиков сервисов, определённый классом
ServiceLoader, для поиска и загрузки реализации сервиса с использованием механизма по умолчанию: модуль загрузки использует класс загрузки контекста текущей нити, для поиска сервиса. Если класс загрузки контекста нити равен null, используется класс загрузки системы.
В случае сSchemaFactorySchemaFactory, каждый потенциальный поставщик сервиса должен реализовывать методisSchemaLanguageSupported(String schemaLanguage). Возвращается первый найденный поставщик, поддерживающий указанный язык схемы.
В случае сXPathFactoryXPathFactory, каждый потенциальный поставщик сервиса должен реализовывать методisObjectModelSupported(String objectModel). Возвращается первый найденный поставщик, поддерживающий указанную модель объекта. -
В противном случае возвращается реализация
system-default, что эквивалентно вызову методаnewDefaultInstance() or newDefaultFactory(), как показано в столбце "Системное значение по умолчанию" таблицы JAXP-фабрики выше.
В случае сSchemaFactorySchemaFactory, должен быть платформенный стандарт по умолчаниюSchemaFactoryдля W3C XML Schema.
В случае сXPathFactoryXPathFactory, должен быть платформенный стандарт по умолчаниюXPathFactoryдля W3C DOM, т.е.DEFAULT_OBJECT_MODEL_URI.
- Примечание по реализации:
-
Свойства, специфичные для реализации
В дополнение к стандартным свойствам JAXP, реализация JDK поддерживает ряд свойств, специфичных для реализации, имена которых начинаются с "jdk.xml.". Эти свойства также следуют процедуре конфигурации, определённой в разделе Конфигурация.Обратитесь к таблице Свойства, специфичные для реализации, чтобы получить список свойств, поддерживаемых реализацией JDK.
Поддержка процессора
Свойства могут поддерживаться одним или несколькими процессорами, как указано в таблице ниже. В зависимости от типа свойства, они могут быть установлены с помощью метода 1: setAttribute/Parameter/Property или 2: setFeature, как показано в соответствующих столбцах.Процессоры ID Имя Метод 1: setAttribute/Parameter/Property Метод 2: setFeature DOM Парсер DOM DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setAttribute(name, value);DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature(name, value);SAX Парсер SAX SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = spf.newSAXParser();
parser.setProperty(name, value);SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature(name, value);
StAX Парсер StAX XMLInputFactory xif = XMLInputFactory.newInstance();
xif.setProperty(name, value);XMLInputFactory xif = XMLInputFactory.newInstance();
xif.setProperty(name, value);Validation API валидации XML SchemaFactory schemaFactory = SchemaFactory.newInstance(schemaLanguage);
schemaFactory.setProperty(name, value);SchemaFactory schemaFactory = SchemaFactory.newInstance(schemaLanguage);
schemaFactory.setFeature(name, value);Transform API преобразования XML TransformerFactory factory = TransformerFactory.newInstance();
factory.setAttribute(name, value);TransformerFactory factory = TransformerFactory.newInstance();
factory.setFeature(name, value);XSLTC Serializer XSLTC Serializer Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(name, value);DOMLS Загрузка и сохранение DOM LSSerializer serializer = domImplementation.createLSSerializer();
serializer.getDomConfig().setParameter(name, value);XPath XPath XPathFactory factory = XPathFactory.newInstance();
factory.setProperty(name, value);XPathFactory factory = XPathFactory.newInstance();
factory.setFeature(name, value);
Реализация специфичных свойств Полное имя (префикс jdk.xml.) [1]Описание Свойство системы [2] Значение [3] Безопасность [4] Поддерживаемый процессор [5] С момента [6] Тип Значение По умолчанию Принудительно ИД Метод установки jdk.xml.entityExpansionLimitОграничивает количество расширений сущностей. да Целое число Положительное целое число. Значение, меньшее или равное 0, указывает на отсутствие ограничения. Если значение не является целым числом, выбрасывается исключение NumberFormatException. 64000 64000 Да DOM
SAX
StAX
Проверка
ПреобразованиеМетод 1 8 jdk.xml.elementAttributeLimitОграничивает количество атрибутов, которые может иметь элемент. 10000 10000 jdk.xml.maxOccurLimitОграничивает количество узлов модели содержимого, которые могут быть созданы при построении грамматики для W3C XML Schema, содержащей атрибуты maxOccurs со значениями, отличными от "unbounded". 5000 5000 jdk.xml.totalEntitySizeLimitОграничивает общий размер всех сущностей, включая общие и параметрические сущности. Размер рассчитывается как сумма всех сущностей. 5x10^7 5x10^7 jdk.xml.maxGeneralEntitySizeLimitОграничивает максимальный размер любых общих сущностей. 0 0 jdk.xml.maxParameterEntitySizeLimitОграничивает максимальный размер любых параметрических сущностей, включая результат вложенности нескольких параметрических сущностей. 10^6 10^6 jdk.xml.entityReplacementLimitОграничивает общее количество узлов во всех ссылках на сущности. 3x10^6 3x10^6 jdk.xml.maxElementDepthОграничивает максимальную глубину элемента. 0 0 jdk.xml.maxXMLNameLimitОграничивает максимальный размер XML-имён, включая имя элемента, имя атрибута и префикс и URI пространства имён. 1000 1000 jdk.xml.isStandaloneУказывает, что сериализатор должен обрабатывать выходные данные как автономный документ. Свойство можно использовать для обеспечения записи новой строки после объявления XML. В отличие от свойства xml-declaration, это свойство не влияет на то, должно ли быть записано объявление XML.булево true/false false N/A Нет DOMLS 17 jdk.xml.xsltcIsStandaloneУказывает, что сериализатор XSLTC должен обрабатывать выходные данные как автономный документ. Свойство можно использовать для обеспечения записи новой строки после объявления XML. В отличие от свойства OMIT_XML_DECLARATION, это свойство не влияет на то, должно ли быть записано объявление XML.Это свойство ведет себя аналогично свойству для DOMLS выше, за исключением того, что оно предназначено для сериализатора XSLTC, а его значение — строка.
строка да/нет нет N/A Нет Сериализатор XSLTC 17 jdk.xml.cdataChunkSizeИнструктирует парсер возвращать данные в разделе CData в одном блоке, если свойство равно нулю или не указано, или в нескольких блоках, если оно больше нуля. Парсер разделяет данные по разрывам строк, а любые блоки, которые больше указанного размера, делит на блоки, равные или меньшие размера. да Целое число Положительное целое число. Значение, меньшее или равное 0, указывает на то, что свойство не указано. Если значение не является целым числом, выбрасывается исключение NumberFormatException. 0 N/A Нет SAX
StAX9 jdk.xml.extensionClassLoader Устанавливает экземпляр ClassLoader, отличный от null, который будет использоваться для загрузки расширений XSLTC java-функций. нет Объект Ссылка на объект ClassLoader. Null, если значение не указано. null N/A Нет Преобразование 9 jdk.xml.xpathExprGrpLimit Ограничивает количество групп, которые может содержать выражение XPath. да Целое число Положительное целое число. Значение, меньшее или равное 0, указывает на отсутствие ограничения. Если значение не является целым числом, выбрасывается исключение NumberFormatException. 10 10 Да Преобразование
XPath19 jdk.xml.xpathExprOpLimit Ограничивает количество операторов, которые может содержать выражение XPath. 100 100 jdk.xml.xpathTotalOpLimit Ограничивает общее количество операторов XPath в стиле XSL. 10000 10000 Преобразование
jdk.xml.enableExtensionFunctionsОпределяет, разрешены ли расширения функций XSLT и XPath. да Булево true или false. True указывает, что расширения функций разрешены; False — в противном случае. true false Да Преобразование
XPathМетод 2 8 jdk.xml.overrideDefaultParserВключает использование реализации парсера третьей стороны для переопределения системного парсера по умолчанию для реализаций JDK для преобразования, проверки и XPath. true или false. True включает использование реализаций парсеров третьих сторон для переопределения системной реализации во время операций XML-преобразования, проверки или XPath. False отключает использование реализаций парсеров третьих сторон. false false Да Преобразование
Проверка
XPathМетод 2 9 jdk.xml.resetSymbolTableИнструктирует парсер сбросить свою внутреннюю таблицу символов во время каждой операции парсинга. true или false. True указывает, что таблица символов, связанная с парсером, должна быть перераспределена во время каждой операции парсинга.
False указывает, что экземпляр таблицы символов парсера будет повторно использоваться в последующих операциях парсинга.false N/A Нет SAX Метод 2 9 [1] Для установки свойства следует использовать полное имя свойства.
[2] Значение "да" указывает на наличие соответствующего системного свойства для свойства, "нет" — в противном случае. Имя системного свойства такое же, как и имя свойства.
[3] Значение должно быть точно таким, как указано в этой таблице, регистрозависимым. Значение соответствующего системного свойства — строковое представление значения свойства. Если тип boolean, системное свойство равно true только если оно "true"; если тип String, системное свойство равно true только если это точно такая же строка, представляющая положительное значение (например, "да" для
xsltcIsStandalone); в противном случае системное свойство равно false. Если тип Integer, значение системного свойства — строковое представление значения (например, "64000" дляentityExpansionLimit).[4] Значение "да" указывает, что свойство является свойством безопасности. Как указано в порядке приоритета свойств, значения, указанные в столбце
enforced, будут использованы для инициализации этих свойств, когдаFSPравно true.[5] Один или несколько процессоров, которые поддерживают свойство. ИД и метод установки показаны в таблице Процессоры.
[6] Указывает исходную версию, в которой было добавлено свойство.
Названия устаревших свойств (устарели)
- Выпуски JDK до JDK 17 поддерживают использование префикса URI для свойств. Эти устаревшие имена свойств устарели начиная с JDK 17 и могут быть удалены в будущих выпусках. Если установлены и новые, и устаревшие свойства, новые имена свойств имеют приоритет независимо от того, как и где они установлены. Порядок переопределения, как определено в Порядок приоритета свойств, таким образом, становится:
- Значение, установленное в фабриках или обработчиках, использующих новые имена свойств.
- Значение, установленное в фабриках или обработчиках, использующих устаревшие имена свойств;
- Значение, установленное как системное свойство;
- Значение, установленное в файле конфигурации;
- Значение, установленное с помощью FEATURE_SECURE_PROCESSING;
- Значение по умолчанию;
В следующей таблице перечислены свойства и соответствующие устаревшие имена.
Устаревшие имена свойств (устарели начиная с 17) Свойство Устаревшее имя свойства(я) jdk.xml.entityExpansionLimithttp://www.oracle.com/xml/jaxp/properties/entityExpansionLimitjdk.xml.elementAttributeLimithttp://www.oracle.com/xml/jaxp/properties/elementAttributeLimitjdk.xml.maxOccurLimithttp://www.oracle.com/xml/jaxp/properties/maxOccurLimitjdk.xml.totalEntitySizeLimithttp://www.oracle.com/xml/jaxp/properties/totalEntitySizeLimitjdk.xml.maxGeneralEntitySizeLimithttp://www.oracle.com/xml/jaxp/properties/maxGeneralEntitySizeLimitjdk.xml.maxParameterEntitySizeLimithttp://www.oracle.com/xml/jaxp/properties/maxParameterEntitySizeLimitjdk.xml.entityReplacementLimithttp://www.oracle.com/xml/jaxp/properties/entityReplacementLimitjdk.xml.maxElementDepthhttp://www.oracle.com/xml/jaxp/properties/maxElementDepthjdk.xml.maxXMLNameLimithttp://www.oracle.com/xml/jaxp/properties/maxXMLNameLimitjdk.xml.isStandalonehttp://www.oracle.com/xml/jaxp/properties/isStandalonejdk.xml.xsltcIsStandalonehttp://www.oracle.com/xml/is-standalone
http://www.oracle.com/xml/jaxp/properties/xsltcIsStandalonejdk.xml.extensionClassLoaderjdk.xml.transform.extensionClassLoaderjdk.xml.enableExtensionFunctionshttp://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions - Граф модулей:
- С момента:
- 9
Пакеты
| Пакет | Описание |
|---|---|
| javax.xml | Определяет константы для обработки XML. |
| javax.xml.catalog | Предоставляет классы для реализации Стандарта XML-каталогов OASIS V1.1, 7 октября 2005 года. |
| javax.xml.datatype | Определяет сопоставления типов XML/Java. |
| javax.xml.namespace | Определяет обработку XML-пространств имен. |
| javax.xml.parsers | Предоставляет классы для обработки XML-документов с помощью парсера SAX (простой API для XML) или создателя документа DOM (Document Object Model). |
| javax.xml.stream | Определяет интерфейсы и классы для потокового API для XML (StAX). |
| javax.xml.stream.events | Определяет интерфейсы событий для потокового API для XML (StAX). |
| javax.xml.stream.util | Предоставляет вспомогательные классы для потокового API для XML (StAX). |
| javax.xml.transform | Определяет универсальные API для обработки инструкций преобразования и выполнения преобразования из источника в результат. |
| javax.xml.transform.dom | Предоставляет классы преобразования, специфичные для DOM. |
| javax.xml.transform.sax | Предоставляет классы преобразования, специфичные для SAX. |
| javax.xml.transform.stax | Предоставляет классы преобразования, специфичные для StAX. |
| javax.xml.transform.stream | Предоставляет классы преобразования, специфичные для потоков и URI. |
| javax.xml.validation | Предоставляет API для проверки XML-документов. |
| javax.xml.xpath | Предоставляет нейтральный по отношению к объектной модели API для оценки XPath-выражений и доступа к среде оценки. |
| org.w3c.dom | Предоставляет интерфейсы для объектной модели документа (DOM). |
| org.w3c.dom.bootstrap | Предоставляет фабрику для получения экземпляров DOMImplementation. |
| org.w3c.dom.events | Предоставляет интерфейсы для событий DOM уровня 2. |
| org.w3c.dom.ls | Предоставляет интерфейсы для загрузки и сохранения DOM уровня 3. |
| org.w3c.dom.ranges | Предоставляет интерфейсы для диапазона DOM уровня 2. |
| org.w3c.dom.traversal | Предоставляет интерфейсы для перемещения DOM уровня 2. |
| org.w3c.dom.views | Предоставляет интерфейсы для представлений DOM уровня 2. |
| org.xml.sax | Предоставляет интерфейсы для простого API для XML (SAX). |
| org.xml.sax.ext | Предоставляет интерфейсы для возможностей SAX2, которые совместимые драйверы SAX не обязательно будут поддерживать. |
| org.xml.sax.helpers | Предоставляет вспомогательные классы, включая поддержку запуска приложений на основе SAX. |
Услуги
| Тип | Описание |
|---|---|
| DatatypeFactory | Фабрика, которая создает новые javax.xml.datatype Object для сопоставления XML с/из Java Object. |
| DocumentBuilderFactory | Определяет API фабрики, который позволяет приложениям получать парсер, который создаёт деревья объектов DOM из XML-документов. |
| SAXParserFactory | Определяет API фабрики, который позволяет приложениям настроить и получить парсер на основе SAX для разбора XML-документов. |
| SchemaFactory | Фабрика, которая создаёт объекты Schema. |
| TransformerFactory | Экземпляр TransformerFactory может использоваться для создания Transformer и Templates объектов. |
| XMLEventFactory | Этот интерфейс определяет утилитарный класс для создания экземпляров XMLEvents |
| XMLInputFactory | Определяет абстрактную реализацию фабрики для получения потоков. |
| XMLOutputFactory | Определяет абстрактную реализацию фабрики для получения XMLEventWriters и XMLStreamWriter. |
| XMLReader | Интерфейс для чтения XML-документа с помощью обратных вызовов. |
| XPathFactory | Экземпляр XPathFactory может использоваться для создания XPath объектов. |
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.xml/module-summary.html