Это основа. Давайте взглянем на детали, мы начнем с простой SAX программы, которая проверяет достоверность нашего tij_menu.xml:
import
java.io.*;
import
org.xml.sax.*;
import
org.xml.sax.helpers.*;
public class
validate2
{
static public
void
main
(
String
[]
argv
) {
if
(
argv.length ==
0
) {
System.out.println
(
"Usage: java validate2 file:<filename> or n"
+
"or java validate2 uri"
)
;
}
XMLReader parser =
null
;
// пробуем запустить поверку
try
{
parser = XMLReaderFactory
.createXMLReader
(
"org.apache.xerces.parsers.SAXParser"
)
;
// эти свойства должны быть установлены для
// проверочной схемы
parser.setFeature
(
"http://xml.org/sax/features/validation"
,
true
)
;
parser.setFeature
(
"http://apache.org/xml/features/validation/schema"
,
true
)
;
}
catch
(
SAXException e
) {
System.err.println
(
"Cannot activate validation."
)
;
}
// синтаксический разбор документа
try
{
System.out.println
(
argv
[
0
])
;
parser.parse
(
argv
[
0
])
;
}
catch
(
SAXParseException e
) {
System.out.println
(
e.getMessage
()
+
" at line "
+ e.getLineNumber
()
+
", column "
+ e.getColumnNumber
())
;
}
catch
(
SAXException e
) {
System.err.println
(
"XML exception reading document."
)
;
}
catch
(
IOException e
) {
System.err.println
(
"I/O exception reading XML document:n"
+ e.getMessage
())
;
}
}
}
Командная строка для запуска этого примера выглядит так:
java validate2 file:tij_menu.xml
Инструкция import подключает Java классы, которые нам необходимы. Здесь подключаются классы из org.xml.sax с поддержкой SAX от W3C. SAX предоставляет общий интерфейс для многих различных синтаксических анализаторов XML. Этот стандартный интерфейс основывается на событиях и предоставляет простейший, низкоуровневый доступ к XML документу.
Первый шаг состоит в синтаксическом анализе документа. Для синтаксического анализа XML документа вам необходим объект XMLReader, который мы просто назовем parser. Мы получим его посредством XMLReaderFactory и укажем главный класс синтаксического анализатора SAX - Xerces: org.apache.xerces.parsers.SAXParser. Этот класс реализует интерфейс org.xml.sax.XMLReader. Каждый синтаксический анализатор должен иметь хотя бы один класс, который реализует этот интерфейс.
Для того, чтобы получить полную схему проверки достоверности, нам необходимо установить две особенности с помощью метода setFeature() синтаксического анализатора. Validation и SchemaValidation должны быть включены. Без SchemaValidation эта программа будет искать DTD.
И наконец, нам необходимо вызвать метод parse нашего синтаксического анализатора XMLReader. Вот и все.
Есть много хороших вещей, который вы можете сделать во время синтаксического разбора документа с помощью SAX. Эта функциональность устанавливается через обработчики. Обработчики - это ничто иное, как callback методы, определяемые SAX, чтобы позволить программисту вставить код приложения на важные события внутри разбираемого документа. Эти события имеют место при разборе документа, а не после того, как он закончится. В SAX 2.0 есть четыре основных интерфейса обработки: org.xml.sax.ContentHandler, org.xml.sax.ErrorHandler, org.xml.sax.DTDHandler и and org.xml.sax.EntityResolver. Классы реализации для этих интерфейсов регистрируются с помощью setContentHandler(), setErrorHandler(), setDTDHandler и setEntityResolver(). XMLReader будет вызывать callback метод для соответствующего обработчика во время синтаксического разбора. Интерфейс ContentHandler имеет callback'и для таких событий, как начало и конец документа, начало и конец элемента, и обработка инструкций.
← | Синтаксический анализатор с проверкой достоверности: SAX и DOM | DOM | → |