Интерфейс 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.
- С:
- 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 направляет парсер к разрешению системного идентификатора относительно базового 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.