Spec-Zone.ru › OpenJDK 21

Интерфейс 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 (что является его значением по умолчанию, когда функция распознается). Если этот флаг не распознается, или его значение ложно, или разрешитель не реализует этот интерфейс, то будет использоваться только метод EntityResolver.

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

Since:
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 как тот, который связан с "<" в начале соответствующего объявления.
systemId - Идентификатор системы внешней сущности, на которую делается ссылка; либо относительный, либо абсолютный URI. Это никогда не равно null при вызове SAX2 парсером; только объявленные сущности и любое внешнее подмножество разрешаются такими парсерами.
Возвращает:
Объект InputSource, описывающий новый источник ввода, который будет использоваться парсером. Возвращение null направляет парсер к разрешению systemID относительно base URI и открытию соединения к полученному URI.
Исключения:
SAXException - Любое исключение SAX, возможно, обертывающее другое исключение.
IOException - Вероятно, указывает на неудачу создания нового потока ввода или чтения, или некорректный URL.

© 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/org/xml/sax/ext/EntityResolver2.html

Spec-Zone.ru

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