Spec-Zone .ru
спецификации, руководства, описания, API
|
Основную схему API парсинга SAX показывают в рисунке 1-1. Чтобы запустить процесс, экземпляр SAXParserFactory, class используется, чтобы генерировать экземпляр синтаксического анализатора.
Синтаксический анализатор обертывает объект SAXReader. Когда метод parse() синтаксического анализатора вызывается, читатель вызывает один из нескольких методов обратного вызова, реализованных в приложении. Те методы определяются интерфейсами ContentHandler, ErrorHandler, DTDHandler, и EntityResolver.
Вот сводка ключевых API SAX:
Объект SAXParserFactory создает экземпляр синтаксического анализатора, определенного системным свойством, javax.xml.parsers.SAXParserFactory.
Интерфейс SAXParser определяет несколько видов методов parse(). Вообще, Вы передаете источник данных XML и объект DefaultHandler к синтаксическому анализатору, который обрабатывает XML и вызывает соответствующие методы в объекте-обработчике.
SAXParser обертывает SAXReader. Как правило, Вы не заботитесь об этом, но время от времени Вы должны овладеть этим использующий getXMLReader() SAXParser так, чтобы можно было сконфигурировать это. Это - SAXReader, который продолжает разговор с обработчиками событий SAX, которые Вы определяете.
Не показанный в схеме, DefaultHandler реализует ContentHandler, ErrorHandler, DTDHandler, и интерфейсы EntityResolver (с нулевыми методами), таким образом, можно переопределить только тех, Вы интересуетесь.
Методы, такие как startDocument, endDocument, startElement, и endElement вызываются, когда XML-тэг распознается. Этот интерфейс также определяет методы characters() и processingInstruction(), которые вызываются, когда синтаксический анализатор встречается с текстом в элементе XML или встроенной инструкции обработки, соответственно.
Методы error(), fatalError(), и warning() вызываются в ответ на различные ошибки парсинга. Обработчик ошибок значения по умолчанию выдает исключение для фатальных ошибок и игнорирует другие ошибки (включая ошибки проверки допустимости). Это - одна причина, Вы должны знать что-то о синтаксическом анализаторе SAX, даже если Вы используете ДОМА. Иногда, приложение может быть в состоянии восстановиться с ошибки проверки допустимости. Другие времена, это, возможно, должно генерировать исключение. Чтобы гарантировать корректную обработку, Вы должны будете предоставить свой собственный обработчик ошибок к синтаксическому анализатору.
Определяет методы, которые Вы никогда не будете обычно призываться, чтобы использовать. Используемый, обрабатывая DTD, чтобы распознать и действовать на объявления для непроанализированного объекта.
Метод resolveEntity вызывается, когда синтаксический анализатор должен идентифицировать данные, идентифицированные URI. В большинстве случаев URI является просто URL, который определяет расположение документа, но в некоторых случаях документ может быть идентифицирован УРНОЙ - общедоступный идентификатор, или имя, которое уникально в интернет-пространстве. Общедоступный идентификатор может быть определен в дополнение к URL. EntityResolver может тогда использовать общедоступный идентификатор вместо URL, чтобы найти документ например, получить доступ к локальной копии документа, если Вы существуете.
Типичное приложение реализует большинство методов ContentHandler, как минимум. Поскольку реализации по умолчанию интерфейсов игнорируют все вводы за исключением фатальных ошибок, устойчивая реализация может также хотеть реализовать методы ErrorHandler.
Синтаксический анализатор SAX определяется в пакетах, перечисленных в следующей Таблице .
Пакеты |
Описание |
---|---|
org.xml.sax |
Определяет интерфейсы SAX. org.xml имени является префиксом пакета, который был обоснован группой, которая определила API SAX. |
org.xml.sax.ext |
Определяет расширения SAX, которые используются для того, чтобы сделать более сложную обработку например SAX, обработать определение типа документа (DTD) или видеть подробный синтаксис для файла. |
org.xml.sax.helpers |
Содержит классы помощника, которые облегчают использовать SAX например, определяя обработчик значения по умолчанию, у которого есть нулевые методы для всех интерфейсов, так, чтобы Вы только переопределили тех, Вы фактически хотите реализовать. |
javax.xml.parsers |
Определяет SAXParserFactory class, который возвращает SAXParser. Также определяет классы исключений для того, чтобы сообщить об ошибках. |