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