JAXP, основные группы API.




JAXP (Java API for XML Processing) предлагает стандартный API для программного анализа XML-документов. При этом в ходе анализа могут быть выполнены дополнительные функции: проверка соответствия документа DTD-описанию или схеме, трансформация XML-документа в соответствии с XSLT описанием и др.

В состав JAXP входят два механизма для анализа XML-данных:

- Основан на представлении документов в виде системы объектов некоторого набора классов. Эта система объектов формирует в памяти некоторую иерархическую структуру, которую можно анализировать в соответствии с прикладной задачей, модифицировать и сериализовать в XML-представление (в виде потока символов). Система объектов, в виде которых представляется XML-документ, регламентирована W3C в составе спецификации Document Object Model (DOM), а соответствующий подход к анализу называется DOM-анализ.

- Использует событийно-ориентированную модель обработки. XML-анализатор в ходе синтаксического анализа текста XML-документа вызывает для обработки тех или иных его частей, выделенных к данному моменту, специальные методы (call-back методы, методы обратного вызова) на объекте перехватчике событий (handler object), который анализатору был передан на этапе инициализации прикладной программой. Объект-перехватчик реализует прикладную логику обработки XML-данных и реализует определенный интерфейс. Соответствующий подход к анализу был разработан независимым сообществом разработчиков и называется SAX-анализом.

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

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

 


 

21. Работа с XML документами посредством SAX.

Сегодня стандартным интерфейсом для большинства универсальных XML-анализаторов является событийно-ориентированное API SAX - Simple API for XML.

Термин событийно-ориентированный является ключевым в этом определении и объясняет способ использования SAX. Каждый раз, когда при разборе XML документа анализатор оказывается в каком-то новом состоянии - обнаруживает какую-либо синтаксическую конструкцию XML-документа (элемент, символ, шаблон, и т.д.), фиксирует начало, конец объявлений элементов документа, просматривает DTD-правила или находит ошибку, он воспринимает его как произошедшее событие и вызывает внешнюю процедуру - обработчик этого события. Информация о содержимом текущей конструкции документа передается ему в качестве параметров функции. Обработчик события - это какой-то объект приложения, который выполняет необходимые для обработки полученной из XML информации действия и осуществляет таким образом непосредственный разбор содержимого. После завершения этой функции управление опять передается XML-анализатору и процесс разбора продолжается.

 

Реализацией этого механизма в Java SAX 1.0 является библиотека классов org.xml.sax (их можно получить, например, с узла: www.megginson.com, но обычно эти классы включаются в состав XML -анализатора). Наследуя клссы SAX-совместимого анализатора, мы получаем универсальный доступ к XML документу при помощи классов, содержимое и механизм использование которых приведено в соответствующем описании.

 

Последовательный разбор XML-документа SAX-обработчиком обычно производится по следующей схеме (более подробное описание приведено ниже):

· загрузить документ, установить обработчики событий, начать просмотр его содержимого (если есть DTD-описания, то - их разбор);

· найдено начало документа (его корневой, самый первый элемент) - вызвать виртуальную функцию- обработчик события startDocument;

· каждый раз, когда при разборе будет найден открывающий тэг элемента вызывается обработчик-функция startElement. В качестве параметров ей передаются название элемента и список его атрибутов;

· найдено содержимое элемента - передать его соответствующему обработчику - characters, ignorableWhitespace,processingInstruction и т.д.;

· если внутри текущего элемента есть подэлементы, то эта процедура повторяется;

· найден закрывающий тэг элемента - обработать событие endElement();

· найден закрывающий тэг корневого элемента -обработать событие endDocument;

· если в процессе обработки были обнаружены ошибки, то анализатором вызываются обработчики предупреждений (warning), ошибок (error) и критических ошибок обработчика (fatalError).

 

Ссылка на объект класса обработчика событий может передаваться объекту XML-анализатора при помощи следующих функций:

parser.setDocumentHandler(event_class); // - обработчик событий документа

parser.setEntityResolver(event_class); // - обработчик событий загрузки DTD-описаний

parser.setDTDHandler(event_class); // - обработчик событий при анализе DTD-описаний

parser.setErrorHandler(event_class); // - обработчик чрезвычайных ситуаций


 

22. Работа с XML документами посредством DOM.

Для программной обработки XML документов используется модель XML DOM, которая определяет объекты и свойства всех XML элементов и методы (интерфейс) для доступа к ним. Иначе говоря, XML DOM описывает каким образом необходимо получать, изменять, добавлять и удалять XML элементы.

Согласно DOM:

  • все, что содержится внутри XML документа, является узлом;
  • весь документ представляется узлом документа;
  • каждый XML элемент – узел элемента;
  • текст внутри XML элементов - текстовый узел;
  • каждый атрибут - узел атрибута;
  • комментарии - узлы комментариев.

XML документ в соответствии с моделью XML DOM представляется как дерево из узлов, при этом:

  • Все узлы дерева находятся в определенных отношениях друг с другом.
  • Все узлы доступны через дерево. Их содержимое может быть изменено, удалено; новые элементы могут быть добавлены в дерево.
  • Дерево начинается с корневого узла и разветвляется вниз вплоть до текстовых узлов на самом низшем уровне дерева.
  • Все узлы находятся в иерархических отношениях между собой.

Эти отношения описываются с помощью понятий родитель, дочерний и потомок (все дочерние на одном уровне).


 

23. Сравнение SAX и DOM подходов к обработке XML документов.

В состав JAXP входят два механизма для анализа XML-данных:

- Основан на представлении документов в виде системы объектов некоторого набора классов. Эта система объектов формирует в памяти некоторую иерархическую структуру, которую можно анализировать в соответствии с прикладной задачей, модифицировать и сериализовать в XML-представление (в виде потока символов). Система объектов, в виде которых представляется XML-документ, регламентирована W3C в составе спецификации Document Object Model (DOM), а соответствующий подход к анализу называется DOM-анализ.

- Использует событийно-ориентированную модель обработки. XML-анализатор в ходе синтаксического анализа текста XML-документа вызывает для обработки тех или иных его частей, выделенных к данному моменту, специальные методы (call-back методы, методы обратного вызова) на объекте перехватчике событий (handler object), который анализатору был передан на этапе инициализации прикладной программой. Объект-перехватчик реализует прикладную логику обработки XML-данных и реализует определенный интерфейс. Соответствующий подход к анализу был разработан независимым сообществом разработчиков и называется SAX-анализом.

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

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


 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: