Spec-Zone.ru › OpenJDK 17

Интерфейс EntityResolver2

Все суперинтерфейсы:
EntityResolver
Все известные реализующие классы:
DefaultHandler2
public interface EntityResolver2 extends EntityResolver
Расширенный интерфейс для сопоставления ссылок на внешние сущности с источниками ввода или предоставления отсутствующего внешнего подмножества. Метод XMLReader.setEntityResolver() используется для предоставления реализаций этого интерфейса анализаторам. Когда анализатор использует методы в этом интерфейсе, метод EntityResolver2.resolveEntity() (в этом интерфейсе) используется вместо более старого (SAX 1.0) метода EntityResolver.resolveEntity().

Если приложение SAX требует настраиваемой обработки внешних сущностей, определённой этим интерфейсом, оно должно убедиться, что оно использует XMLReader с флагом http://xml.org/sax/features/use-entity-resolver2, установленным в true (что является его значением по умолчанию, когда признак распознан). Если этот флаг не распознаётся или его значение равно false, или разрешитель не реализует этот интерфейс, то используется только метод EntityResolver.

Это поддерживает три категории приложений, которые изменяют разрешение сущностей. Приложения Старого стиля не будут знать об этом интерфейсе; они будут предоставлять EntityResolver. Приложения Переходного режима предоставляют EntityResolver2 и автоматически получают преимущества от его методов в любых системах (анализаторы или другие инструменты), поддерживающих его, благодаря полиморфизму. Приложения Старого стиля и Переходного режима будут работать с любым SAX2 анализатором. Приложения Нового стиля не будут работать, кроме как с SAX2 анализаторами, которые поддерживают этот конкретный признак. Они потребуют, чтобы значение флага функции было "true", и реализация EntityResolver2, которую они предоставляют, может вызвать исключение, если вызывается метод разрешения сущностей старого стиля SAX 1.0.

С:
1.5, SAX 2.0 (расширения 1.1 alpha)
См. также:
  • XMLReader.setEntityResolver(org.xml.sax.EntityResolver)

Краткое описание методов

Модификатор и тип Метод Описание
InputSource getExternalSubset(String name, String baseURI)
Позволяет приложениям предоставить внешнее подмножество для документов, которые явно его не определяют.
InputSource resolveEntity(String name, String publicId, String baseURI, String systemId)
Позволяет приложениям сопоставлять ссылки на внешние сущности с источниками ввода или сообщить анализатору, что он должен использовать обычное разрешение URI.

Методы, объявленные в интерфейсе org.xml.sax.EntityResolver

resolveEntity

Подробное описание методов

getExternalSubset

InputSource getExternalSubset(String name, String baseURI) throws SAXException, IOException
Позволяет приложениям предоставить внешнее подмножество для документов, которые явно его не определяют. Документы с объявлениями DOCTYPE, которые опускают внешнее подмножество, таким образом, могут дополнить объявления, доступные для проверки, обработки сущностей и обработки атрибутов (нормализация, значения по умолчанию и отчет о типах, включая ID). Это дополнение отображается через метод startDTD(), как если бы текст документа изначально включал внешнее подмножество; этот обратный вызов выполняется до того, как будут сообщены любые внутренние данные подмножества или ошибки.

Этот метод также может использоваться с документами, у которых нет объявления DOCTYPE. Когда встречается корневой элемент, но объявление DOCTYPE не было видно, вызывается этот метод. Если он возвращает значение для внешнего подмножества, этот корневой элемент объявляется корневым элементом, что дает эффект вставки объявления DOCTYPE в конец пролога документа, который в противном случае не был бы валидным. Последовательность обратных вызовов анализатора в этом случае логически напоминает следующее:

 ... comments and PIs from the prolog (as usual)
 startDTD ("rootName", source.getPublicId (), source.getSystemId ());
 startEntity ("[dtd]");
 ... declarations, comments, and PIs from the external subset
 endEntity ("[dtd]");
 endDTD ();
 ... then the rest of the document (as usual)
 startElement (..., "rootName", ...);
 

Обратите внимание, что для InputSource дальнейшее разрешение не выполняется. Реализации этого метода могут захотеть вызвать resolveEntity() для получения преимуществ, таких как использование локальных кэшей сущностей DTD. Кроме того, этот метод никогда не будет использован процессором (без проверки), который не включает внешние параметрические сущности.

Возможности использования этого метода включают упрощение проверки данных при взаимодействии с процессорами XML, которые всегда требуют нежелательных сетевых запросов для внешних сущностей или по другим причинам принимают политику «без DTD». Мотивы, не связанные с проверкой, включают принуждение документов к включению DTD, чтобы атрибуты обрабатывались согласованно. Например, процессор XPath должен знать, какие атрибуты имеют тип «ID», прежде чем он сможет обработать широко используемый тип ссылки.

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

Параметры:
name - Идентифицирует корневой элемент документа. Это имя взято из объявления DOCTYPE (если оно доступно) или из фактического корневого элемента.
baseURI - Базовый URI документа, служащий дополнительным указанием для выбора внешнего подмножества. Это всегда абсолютный URI, если он не равен null, потому что XMLReader получил InputSource без него.
Возвращает:
Объект InputSource, описывающий новое внешнее подмножество, которое должен использовать анализатор, или null, чтобы указать, что внешнее подмножество не предоставляется.
Выбрасывает:
SAXException - Любое исключение SAX, возможно, обернутое другим исключением.
IOException - Вероятно, указывает на неудачу создания нового потока ввода или вывода или неверный URL.

resolveEntity

InputSource resolveEntity(String name, String publicId, String baseURI, String systemId) throws SAXException, IOException
Позволяет приложениям сопоставлять ссылки на внешние сущности с источниками ввода или сообщить анализатору, что он должен использовать обычное разрешение URI. Этот метод вызывается только для внешних сущностей, которые были надлежащим образом объявлены. Этот метод обеспечивает большую гибкость, чем интерфейс EntityResolver, поддерживая реализации более сложных схем каталогов, таких как схема, определенная в спецификации OASIS XML Catalogs.

Анализаторы, настроенные на использование этого метода разрешителя, вызовут его, чтобы определить источник ввода, который нужно использовать для любой внешней сущности, которая включается из-за ссылки в тексте XML. Это исключает сущность документа и любую внешнюю сущность, возвращаемую методом getExternalSubset(). Когда (не проверяющий) процессор настроен на невключение класса сущностей (параметровых или общих) с помощью флагов функций, этот метод не вызывается для таких сущностей.

Обратите внимание, что схема именования сущностей, используемая здесь, такая же, как в интерфейсе LexicalHandler, или в методе ContentHandler.skippedEntity().

Параметры:
name - Идентифицирует внешнюю сущность, которая разрешается. Либо "[dtd]" для внешнего подмножества, либо имя, начинающееся с "%", чтобы указать параметрическую сущность, или же имя общей сущности. Это никогда не равно null при вызове SAX2 анализатором.
publicId - Общедоступный идентификатор внешней сущности, на которую ссылаются (нормализованный в соответствии с требованиями спецификации XML), или null, если он не был предоставлен.
baseURI - URI, относительно которого интерпретируются относительные systemID. Это всегда абсолютный URI, если он не равен null (вероятно, потому что XMLReader получил InputSource без него). Этот URI определяется спецификацией XML как URI, связанный с "<" в начале соответствующего объявления.
systemId - Системный идентификатор внешней сущности, на которую ссылаются; относительный или абсолютный URI. Это никогда не равно null при вызове SAX2 анализатором; только объявленные сущности и любое внешнее подмножество разрешаются такими анализаторами.
Возвращает:
Объект InputSource, описывающий новый источник ввода, который должен использовать анализатор. Возврат null указывает анализатору разрешить systemID относительно base URI и открыть подключение к результирующему URI.
Выбрасывает:
SAXException - Любое исключение SAX, возможно, обернутое другим исключением.
IOException - Вероятно, указывает на неудачу создания нового потока ввода или вывода или неверный URL.

© 1993, 2021, 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/17/docs/api/java.xml/org/xml/sax/ext/EntityResolver2.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API