Интерфейс 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)
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
InputSource |
getExternalSubset |
Позволяет приложениям предоставлять внешнее подмножество для документов, которые не определяют его явно. |
InputSource |
resolveEntity |
Позволяет приложениям сопоставлять ссылки на внешние сущности с источниками входных данных или указать парсеру использовать стандартное разрешение URI. |
Методы, объявленные в интерфейсе org.xml.sax.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 без него. - Возвращает:
- Объект InputSource, описывающий новое внешнее подмножество, которое будет использоваться парсером, или null, чтобы указать, что внешнее подмножество не предоставляется.
- Имеет дело с:
-
SAXException- Любое исключение SAX, возможно, обертывающее другое исключение. -
IOException- Вероятно, указывает на сбой при создании нового потока ввода или читателя, или некорректный URL.
resolveEntity
InputSource resolveEntity(String name, String publicId, String baseURI, String systemId) throws SAXException, IOException
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 по отношению к базовому URI и открыть соединение с полученным URI.
- Имеет дело с:
-
SAXException- Любое исключение SAX, возможно, обертывающее другое исключение. -
IOException- Вероятно, указывает на сбой при создании нового потока ввода или читателя, или некорректный 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://download.java.net/java/early_access/jdk24/docs/api/java.xml/org/xml/sax/ext/EntityResolver2.html