Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






XML-АНАЛИЗАТОР. ТЕХНОЛОГИИ SAXAPI И DOMAPI.

Цели работы:1. Получить знания о средствах Java, предназначенных для обработки XMLдокументов.

1. Задание по лабораторной работе

Разработка программы для реализации ввода исходных данных из файла и сохранения результатов в файл.

Ввод, отладка и выполнение разработанной программы.

2. Методические указания

2.1. В классе ПЭВМ студенты самостоятельно под руководством преподавателя выполняют п. 3 настоящего задания.

2.2. При отладке программы рекомендуется организовать вывод промежуточных данных для контроля правильности работы подпрограмм.

2.3. Текст отлаженной программы необходимо сохранить на сменный носитель и отразить в отчете на ЛР.

3. Выполнение работы

XML как набор байт в памяти, запись в базе или текстовый файл представляет собой данные, которые еще предстоит обработать. То есть из набора строк необходимо получить данные, пригодные для использования в программе. Поскольку ХML представляет собой универсальный формат для передачи данных, существуют универсальные средства его обработки – XML-анализаторы (парсеры).

Парсер– это библиотека (в языке Java: класс), которая читает XML-документ, а затем предоставляет набор методов для обработки информации этого документа.

Валидирующие и невалидирующие анализаторы

Как было выше упомянуто, существует два вида корректности XML-документа: синтаксическая (well-formed) – документ сформирован в соответствии с синтаксическими правилами построения, и действительная (valid) – документ синтаксически корректен и соответствует требованиям, заявленным в DTD.

Соответственно есть невалидирующие и валидирующие анализаторы. И те, и другие проверяют XML-документ на соответствие синтаксическим правилам. Но только валидирующие анализаторы знают, как проверить XML-документ на соответствие структуре, описанной в XSD или DTD.

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

Древовидная и событийная модели

Существует три подхода (API) к обработке XML-документов:

 

DOM (Document Object Model – объектная модель документов) –платформенно-независимый программный интерфейс, позволяющий программам и скриптам (см. лабораторные работы по JavaScript) управлять содержимым документов HTML и XML, а также изменять их структуру и оформление. Модель DOM не накладывает ограничений на структуру документа. Любой документ известной структуры с помощью DOM может быть представлен в виде дерева узлов, каждый узел которого содержит элемент, атрибут, текстовый, графический или любой другой объект. Узлы связаны между собой отношениями родитель-потомок.

 

SAX (Simple API for XML) базируется на модели последовательной одноразовой обработки и не создает внутренних деревьев. При прохождении по XML вызывает соответствующие методы у классов, реализующих интерфейсы, предоставляемые SAX-парсером.

 

StAX (Streaming API for XML) не создает дерево объектов в памяти, но, в отличие от SAX-парсера, за переход от одной вершины XML к другой отвечает приложение, которое запускает разбор документа.

Анализаторы, которые строят древовидную модель, – это DOM-анализаторы. Анализаторы, которые генерируют события, – это SAX-анализаторы.

Анализаторы, которые ждут команды от приложения для перехода к следующему элементу XML – StAX-анализаторы.

В первом случае анализатор строит в памяти дерево объектов, соответствующее XML-документу. Далее вся работа ведется именно с этим деревом.

Во втором случае анализатор работает следующим образом: когда происходит анализ документа, анализатор вызывает методы, связанные с различными участками XML-файла, а программа, использующая анализатор, решает, как реагировать на тот или иной элемент XML-документа. Так, аннализатор будет генерировать событие о том, что он встретил начало документа либо его конец, начало элемента либо его конец, символьную информацию внутри элемента и т.д.

StAX работает как Iterator, который указывает на наличие элемента с помощью метода hasNext()и для перехода к следующей вершине использует метод next().

Когда следует использовать DOM-, а когда – SAX, StAX -анализаторы?

DOM-анализаторы следует использовать тогда, когда нужно знать структуру документа и может понадобиться изменять эту структуру либо использовать информацию из XML-файла несколько раз.

SAX/StAX-анализаторы используются тогда, когда нужно извлечь информацию о нескольких элементах из XML-файла либо когда информация из документа нужна только один раз.

Событийная модель

Как уже отмечалось, SAX-анализатор не строит дерево элементов по содержимому XML-файла. Вместо этого анализатор читает файл и генерирует события, когда находит элементы, атрибуты или текст. На первый взгляд, такой подход менее естествен для приложения, использующего анализатор, так как он не строит дерево, а приложение само должно догадаться, какое дерево элементов описывается в XML-файле.

Однако нужно учитывать, для каких целей используются данные из XML-файла. Очевидно, что нет смысла строить дерево объектов, содержащее десятки тысячи элементов в памяти, если всё, что необходимо, – это просто посчитать точное количество элементов в файле.

SAX-анализаторы

SAX API определяет ряд методов, используемых при разборе документа:

void startDocument()– вызывается на старте обработки документа;

void endDocument()– вызывается при завершении разбора документа;

voidstartElement(Stringuri, StringlocalName, StringqName, Attributesattrs)– будет вызван, когда анализатор полностьюобработает содержимое открывающего тега, включая его имя и все содержащиеся атрибуты;

void endElement(String uri, String localName, String qName)– сигнализируетозавершенииэлемента;

void characters(char[] ch, int start, int length)– вызывается в том случае, если анализатор встретил символьную информацию внутри элемента (тело тега);

warning(SAXParseException e), error(SAXParseException e), fatalError(SAXParseException e)– вызываются в ответ на возникающие предупреждения и ошибки при разборе XML-документа.

В пакете org.xml.sax в SAX2 APIсодержатся интерфейсы org.xml.sax.ContentHandler, org.xml.sax.ErrorHandler, org.xml.sax.DTDHandler, и org.xml.sax.EntityResolver, которые необходимо реализовать для обработки соответствующего события.

Для того чтобы создать простейшее приложение, обрабатывающее XML-документ, достаточно сделать следующее:

1. Создать класс, который реализует один или несколько интерфейсов

(ContentHandler, ErrorHandler, DTDHandler, EntityResolver) и реализовать методы, отвечающие за обработку интересующих событий.

 

2. Используя SAX2 API, поддерживаемое всеми SAX парсерами, создать org.xml.sax.XMLReader, например для Xerces:

XMLReader reader =

Последнее изменение этой страницы: 2016-07-23

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...