T.M. SoftStudio

feci quod potui, faciant meliora potentes

JAXP API

SAX

Пакеты org.xml.sax, org.xml.sax.ext и org.xml.sax.helpers обеспечивают поддержку SAX-анализа — быстрого и эффективного механизма доступа к XML-документам.

Основным интерфейсом пакета org.xml.sax является интерфейс XMLReader, позволяющий считывать XML-документ, используя обратные вызовы методов. Интерфейс XMLReader реализуется SAX-парсером и имеет следующие методы.

  • boolean getFeature(String name)

void setFeature(String name, boolean value)

Object getProperty(String name)

void setProperty(String name, Object value)

Первая пара методов проверяет и устанавливает режимы SAX-парсера, вторая пара методов проверяет и устанавливает и свойства SAX-парсера.

  • EntityResolver getEntityResolver()

void setEntityResolver(EntityResolver resolver)

Первый метод возвращает, второй метод регистрирует объект EntityResolver, предназначенный для распознавания сущностей. Интерфейс org.xml.sax.EntityResolver может реализовываться классом пользовательского приложения для управления процессом разрешения внешних сущностей, с помощью вызываемого парсером метода InputSource resolveEntity(String publicId, String systemId). Возвращаемый методом объект org.xml.sax.InputSource представляет входящий источник XML-сущности. Класс InputSource имеет следующие конструкторы и методы:

    – public InputSource(), public InputSource(String systemId), public InputSource(InputStream byteStream), public InputSource(Reader characterStream) — создает объект InputSource из различных ресурсов;

    – public void setPublicId(String publicId) и public String getPublicId(), public void setSystemId(String systemId) и public String getSystemId() — устанавливает и возвращает публичный и системный идентификаторы входящего источника данных;

    – public void setByteStream(InputStream byteStream) и public InputStream getByteStream(), public void setCharacterStream(Reader characterStream) и public Reader getCharacterStream() — регистрирует и возвращает байтовый и символьный потоки для входящего источника данных;

    – public void setEncoding(String encoding) и public String getEncoding() — устанавливает и возвращает XML-кодировку данных.

  • void setDTDHandler(DTDHandler handler)

DTDHandler getDTDHandler()

Первый метод регистрирует, второй метод возвращает объект org.xml.sax.DTDHandler, получающий уведомления о DTD-событиях в процессе разбора документа. Интерфейс DTDHandler реализуется классом пользовательского приложения для переопределения методов void notationDecl(String name, String publicId, String systemId) и void unparsedEntityDecl(String name, String publicId, String systemId, String notationName), вызываемых парсером при разборе DTD-описания.

  • void setContentHandler(ContentHandler handler)

ContentHandler getContentHandler()

Первый метод регистрирует, второй метод возвращает объект org.xml.sax.ContentHandler, получающий уведомления о событиях, связанных с содержимым XML-документа в процессе его разбора. Интерфейс ContentHandler реализуется классом пользовательского приложения для переопределения следующих методов:

    – void setDocumentLocator(Locator locator) — получает объект org.xml.sax.Locator, представляющий связь SAX-события с документом. Интерфейс Locator имеет методы String getPublicId(), String getSystemId(), int getLineNumber() и int getColumnNumber();

    – void startDocument() и void endDocument() — вызываются при появлении начала и конца документа соответственно;

    – void startPrefixMapping(String prefix, String uri) и void endPrefixMapping(String prefix) — первый метод вызывается в начале области действия префикса определенного пространства имен, второй метод — в конце;

    – void startElement(String uri, String localName, String qName, Attributes atts) и void endElement(String uri, String localName, String qName) — первый метод вызывается при разборе начала элемента, второй метод — конца. Интерфейс org.xml.sax.Attributes представляет список атрибутов и имеет методы, обеспечивающие информацию об атрибутах в списке;

    – void characters(char[] ch, int start, int length) — вызывается при разборе символьных данных;

    – void ignorableWhitespace(char[] ch, int start, int length) — вызывается при разборе игнорируемых пробелов;

    – void processingInstruction(String target, String data) — вызывается при разборе инструкции по обработке;

    – void skippedEntity(String name) — вызывается при встрече парсером сущности, которую он пропускает, например, если парсер не разбирает ссылки на внешние сущности.

  • void setErrorHandler(ErrorHandler handler)

ErrorHandler getErrorHandler()

Первый метод регистрирует объект org.xml.sax.ErrorHandler, обеспечивающий управление ошибками разбора, второй метод — и возвращает указанный объект. Для обработки ощибок интерфейс ErrorHandler предоставляет методы void warning(SAXParseException exception), void error(SAXParseException exception) и void fatalError(SAXParseException exception).

  • void parse(InputSource input)

void parse(String systemId)

Запускает разбор парсером входящего источника данных.

Интерфейс org.xml.sax.XMLFilter расширяет интерфейс XMLReader и позволяет фильтровать поток событий, получаемый от парсера, с помощью методов, унаследованных от интерфейса XMLReader, а также дополнительно имеет методы void setParent(XMLReader parent) и XMLReader getParent() для установки и возврата исходного парсера.

Пакет org.xml.sax.ext обеспечивает SAX-расширения и содержит классы и интерфейсы, представленные в табл. 1 и 2.

Таблица 1. Интерфейсы пакета org.xml.sax.ext

Интерфейсы

Описание

Attributes2

Расширяет интерфейс org.xml.sax.Attributes. Объект Attributes2 используется как аргумент метода ContentHandler.startElement(), если SAX-реализация поддерживает данное расширение, при этом режим парсера http://xml.org/sax/features/use-attributes2 установлен в значение true.

Интерфейс Attributes2 дополнительно имеет методы:

  • boolean isDeclared(int index), boolean isDeclared(String qName), boolean isDeclared(String uri, String localName) — возвращают true, если атрибут объявлен в DTD-описании;

  • boolean isSpecified(int index), boolean isSpecified(String uri, String localName), boolean isSpecified(String qName) — возвращают true, если значение атрибута определенно непосредственно в документе, а не по умолчанию

DeclHandler

Используется вместе с LexicalHandler для получения событий между LexicalHandler.startDTD и LexicalHandler.endDTD. Объект DeclHandler регистрируется для парсера с помощью метода setProperty() со свойством http://xml.org/sax/properties/declaration-handler.

Интерфейс DeclHandler имеет методы:

  • void elementDecl(String name, String model) — вызывается при разборе декларации типа элемента;

  • void attributeDecl(String eName, String aName, String type, String mode, String value) — вызывается при разборе декларации типа атрибута;

  • void internalEntityDecl(String name, String value) — вызывается при разборе декларации внутренней сущности;

  • void externalEntityDecl(String name, String publicId, String systemId) — вызывается при разборе декларации внешней сущности

LexicalHandler

Обеспечивает дополнительно информацию о комментариях и секциях CDATA документа. Объект LexicalHandler регистрируется для парсера с помощью метода setProperty() со свойством http://xml.org/sax/properties/lexical-handler.

Интерфейс LexicalHandler имеет следующие методы:

  • void startDTD(String name, String publicId, String systemId) и void endDTD() — первый метод вызывается в начале разбора DTD-описания, второй метод — в конце;

  • void startEntity(String name) и void endEntity(String name) — первый метод вызывается в начале объявления сущности, второй метод — в конце;

  • void startCDATA() и void endCDATA() — первый метод вызывается в начале секции CDATA, второй метод — в конце;

  • void comment(char[] ch, int start, int length) — вызывается при разборе комментариев

EntityResolver2

Расширяет интерфейс org.xml.sax.EntityResolver. Объект EntityResolver2 регистрируется для парсера с помощью метода XMLReader.setEntityResolver(), в случае, если SAX-реализация поддерживает данное расширение, при этом режим парсера http://xml.org/sax/features/use-entity-resolver2 устанавливается в значение true.

Интерфейс EntityResolver2 дополнительно имеет методы:

  • InputSource getExternalSubset(String name, String baseURI) — обеспечивает источник данных с внешним DTD-описанием;

  • InputSource resolveEntity(String name, String publicId, String baseURI, String systemId) — обеспечивает разрешение ссылок на внешние сущности

Locator2

Расширяет интерфейс org.xml.sax.Locator. Объект Locator2 регистрируется для парсера с помощью метода ContentHandler.setDocumentLocator(), в случае, если SAX-реализация поддерживает данное расширение, при этом режим парсера http://xml.org/sax/features/use-locator2 устанавливается в значение true.

Интерфейс Locator2 дополнительно имеет методы:

  • String getXMLVersion() — возвращает XML-версию сущности;

  • String getEncoding() — возвращает кодировку сущности

Таблица 2. Классы пакета org.xml.sax.ext

Классы

Описание

Attributes2Impl

Расширяет класс org.xml.sax.helpers.AttributesImpl, реализация по умолчанию интерфейса Attributes2.

Класс Attributes2Impl имеет конструкторы public Attributes2Impl() и public Attributes2Impl(Attributes atts) и дополнительно методы public void setDeclared(int index, boolean value) и public void setSpecified(int index, boolean value) — устанавливают значение флага декларации и определения значения атрибута

DefaultHandler2

Расширяет класс org.xml.sax.helpers.DefaultHandler, реализует интерфейсы LexicalHandler, DeclHandler, EntityResolver2.

Класс DefaultHandler2 имеет конструктор public DefaultHandler2()

Locator2Impl

Расширяет класс org.xml.sax.helpers.LocatorImpl, реализует интерфейс Locator2.

Класс Locator2Impl имеет конструкторы public Locator2Impl() и public Locator2Impl(Locator locator) и дополнительно методы public void setXMLVersion(String version) и public void setEncoding(String encoding) — устанавливает XML-версию и кодировку сущности



Пакет org.xml.sax.helpers обеспечивает загруку приложений, использующих SAX-анализ, и содержит классы, представленные в табл. 3.

Таблица 3. Классы пакета org.xml.sax.helpers

Классы

Описание

AttributesImpl

Реализует интерфейс Attributes. Класс AttributesImpl имеет конструкторы public AttributesImpl() и public AttributesImpl(Attributes atts) и дополнительно методы:

  • public void clear() — очищает список атрибутов;

  • public void addAttribute(String uri, String localName, String qName, String type, String value) — добавляет атрибут в список;

  • public void setAttribute(int index, String uri, String localName, String qName, String type, String value) — определяет атрибут в списке;

  • public void removeAttribute(int index) — удаляет атрибут из списка;

  • public void setURI(int index, String uri), public void setLocalName(int index, String localName), public void setQName(int index, String qName), public void setType(int index, String type), public void setValue(int index, String value) — устанавливают параметры атрибута в списке

DefaultHandler

Реализует интерфейсы EntityResolver, DTDHandler, ContentHandler, ErrorHandler.

Класс DefaultHandler имеет конструктор public DefaultHandler()

LocatorImpl

Реализует интерфейс Locator, имеет конструкторы public LocatorImpl() и public LocatorImpl(Locator locator), а также дополнительно методы:
public void setPublicId(String publicId)
public void setSystemId(String systemId)
public void setLineNumber(int lineNumber)
public void setColumnNumber(int columnNumber)

NamespaceSupport

Обеспечивает поддержку пространств имен с помощью следующих методов:

  • public void reset() — очищает объект NamespaceSupport;

  • public void pushContext() — начинает новый контекст пространства имен;

  • public void popContext() — возвращает к предыдущему контексту пространства имен;

  • public boolean declarePrefix(String prefix, String uri) — декларирует префикс пространства имен;

  • public String[] processName(String qName, String[] parts, boolean isAttribute) — возвращает URI пространства имен, локальное имя и QName-имя;

  • public String getURI(String prefix), public Enumeration getPrefixes(), public String getPrefix(String uri), public Enumeration getPrefixes(String uri), public Enumeration getDeclaredPrefixes() — возвращают URI и префиксы контекста пространства имен;

  • public void setNamespaceDeclUris(boolean value) и public boolean isNamespaceDeclUris() — первый метод устанавливает, второй метод возвращает связь декларации пространства имен с атрибутом xmlns

ParserAdapter

Реализует интерфейсы XMLReader, DocumentHandler, имеет конструкторы public ParserAdapter() и public ParserAdapter(Parser parser), с помощью которых адаптирует неиспользуемый интерфейс org.xml.sax.Parser как парсер XMLReader

XMLFilterImpl

Реализует интерфейсы XMLFilter, EntityResolver, DTDHandler, ContentHandler, ErrorHandler, имеет конструкторы public XMLFilterImpl() и public XMLFilterImpl(XMLReader parent)

XMLReaderAdapter

Реализует интерфейсы Parser, ContentHandler, имеет конструкторы public XMLReaderAdapter() и public XMLReaderAdapter(XMLReader xmlReader), с помощью которых адаптирует интерфейс XMLReader как парсер Parser

XMLReaderFactory

Класс-фабрика для создания объектов XMLReader с помощью метода public static XMLReader createXMLReader() или public static XMLReader createXMLReader(String className)