Spec-Zone .ru
спецификации, руководства, описания, API
След: API Java для XML, Обрабатывающего (JAXP)
Урок: Простой API для XML
Используя DTDHandler и EntityResolver
Домашняя страница > API Java для XML, Обрабатывающего (JAXP) > Простой API для XML

Используя DTDHandler и EntityResolver

Этот раздел представляет два остающихся обработчика событий SAX: DTDHandler и EntityResolver. DTDHandler вызывается, когда DTD встречается с непроанализированным объектом или объявлением нотации. EntityResolver играет роль, когда УРНА (общедоступный ID) должна быть разрешена к URL (системный ID).

API DTDHandler

Выбор Реализации Синтаксического анализатора показал метод для того, чтобы сослаться на файл, который содержит двоичных данных, таких как файл изображения, используя типы данных MIME. Это является самым простым, большинство расширяемого механизма. Для совместимости с более старыми данными стиля SGML, тем не менее, также возможно определить непроанализированный объект.

Ключевое слово NDATA определяет непроанализированный объект:

<!ENTITY myEntity SYSTEM "..URL.." NDATA gif>

Ключевое слово NDATA говорит, что данные в этом объекте не являются parseable данными XML, но вместо этого являются данными, которые используют некоторую другую нотацию. В этом случае нотацию называют gif. DTD должен тогда включать объявление для той нотации, которая смотрела бы что-то как следующий.

<!NOTATION gif SYSTEM "..URL..">

Когда синтаксический анализатор видит непроанализированный объект или объявление нотации, он ничего не делает с информацией кроме передать это приложению, используя интерфейс DTDHandler. Тот интерфейс определяет два метода.

Метод notationDecl передают имя нотации и или общественность или системный идентификатор, или оба, в зависимости от которых объявляется в DTD. Метод unparsedEntityDecl передают имя объекта, соответствующих идентификаторов, и имени нотации, которую это использует.


Отметьте - интерфейс DTDHandler реализуется DefaultHandler class.


Нотации могут также использоваться в объявлениях атрибута. Например, следующее объявление требует нотаций для ДЖИФА и форматов файла изображения PNG.

<!ENTITY image EMPTY>
<!ATTLIST image ...  type  NOTATION  (gif | png) "gif">

Здесь, тип объявляется как являющийся или gif или png. Значение по умолчанию, если ни один не определяется, является gif.

Используется ли ссылка нотации, чтобы описать непроанализированный объект или атрибут, это до приложения, чтобы сделать соответствующую обработку. Синтаксический анализатор не знает ничего вообще о семантике нотаций. Это только передает объявления.

API EntityResolver

API EntityResolver позволяет Вам преобразовывать общедоступный ID (УРНА) в системный ID (URL). Ваше приложение, возможно, должно сделать это, например, преобразовать что-то как href="urn:/someName" в "http://someURL".

Интерфейс EntityResolver определяет единственный метод:

resolveEntity(String publicId, String systemId)

Этот метод возвращает объект InputSource, который может использоваться, чтобы получить доступ к содержанию объекта. Преобразование URL в InputSource достаточно легко. Но URL, который передают как системный ID, будет расположением оригинала документа, который является, столь же вероятно, как не, где-нибудь в сети. Чтобы получить доступ к локальной копии, если есть один, следует поддержать каталог где-нибудь по системе, которая отображает имена (общедоступные ID) в локальные URL.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Обработка Лексических Событий
Следующая страница: Дополнительная информация