Интерфейс 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.
- С тех пор:
- 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 .
Анализаторы, настроенные на использование этого метода разрешения, вызовут его для определения источника ввода, который необходимо использовать для любой внешней сущности, включаемой из-за ссылки в тексте XML. Это исключает сущность документа и любую внешнюю сущность, возвращенную методом getExternalSubset(). Когда (не проверяющий) процессор настроен на то, чтобы не включать класс сущностей (параметра или общего) через использование флагов функций, этот метод не вызывается для таких сущностей.
Обратите внимание, что схема именования сущностей, используемая здесь, такая же, как в методе LexicalHandler или в методе ContentHandler.skippedEntity().
- Параметры:
-
name- Определяет внешнюю сущность, подлежащую разрешению. Либо "[dtd]" для внешнего подмножества, либо имя, начинающееся с "%", чтобы указать параметр сущности, или имя общей сущности. -
publicId- Общедоступный идентификатор внешней сущности, на которую имеется ссылка (нормализованный, как требуется спецификацией XML), или null, если он не был предоставлен. -
baseURI- URI по отношению к которому интерпретируются относительные systemIDs. Это всегда абсолютный URI, если он не равен null (вероятно, потому что XMLReader получил InputSource без него). Этот URI определяется спецификацией XML как связанный с "<" в начале соответствующего объявления. -
systemId- Идентификатор системы внешней сущности, на которую имеется ссылка; относительный или абсолютный URI. Это никогда не равно null, когда вызывается SAX2 анализатором; только объявленные сущности и любые внешние подмножества разрешаются такими анализаторами. - Возвращает:
- Объект InputSource, описывающий новый источник ввода, который должен использоваться анализатором. Возврат null направляет анализатор на разрешение systemID по отношению к базовому URI и открытие соединения к результирующему URI.
- Исключения:
-
SAXException- Любое исключение SAX, возможно, содержащее другое исключение. -
IOException- Вероятно, указывает на ошибку создания нового потока ввода-вывода или читателя или неверный URL.
© 1993, 2020, 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/11/docs/api/java.xml/org/xml/sax/ext/EntityResolver2.html