Продолжается подписка на наши издания! Вы не забыли подписаться?

Назад

Типы парсеров**

На сегодня существует два типа парсеров. Один из них базируется на событиях, а второй – на объектной модели представления документа. Рассмотрим их по порядку.

SAX2

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

Реализация SAX2, предоставляющая интерфейсы Visual Basic и Visual C++, предлагает простую и быструю альтернативу DOM. При использовании DOM файл считывается, разбивается на индивидуальные объекты (элементы, атрибуты и комментарии), и на этой основе в памяти строится древовидная структура документа. Выгода тут в том, что можно работать с каждым отдельным узлом. Но создание такой структуры для большого документа требует большого количества памяти.

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

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

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

Однако эти преимущества сопровождаются не менее значимыми недостатками. Поскольку документ не хранится в памяти, с данными приходится работать в порядке поступления. В результате SAX малопригоден для работы с внутренними ссылками, например, атрибутами ID и IDREF.

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

И, наконец, наиболее распространенные сегодня броузеры (например, IE) не имеют встроенной поддержки SAX.

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

Здесь мы не будем подробно разбирать работу с SAX, но в дальнейшем, возможно, вернемся к этой теме.

DOM. Краткое описание модели

XML Document Object Model (DOM) – это представление XML-документа в виде иерархии объектов некоторого языка программирования, позволяющее анализировать и/или изменять структуру XML-документа. DOM стандартизован W3C. Естественно, что реализации DOM выполняются различными производителями. Наиболее известная реализация DOM для Windows создана, разумеется, Микрософт.

DOM-парсер поставляется с версиями IE (начиная с версии 4.0). На момент создания этой статьи наиболее свежая версия парсера MSXML, поддерживающего DOM – 3.0. Ее можно бесплатно скачать с сервера Микрософт (www.microsoft.com).

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

DOM-парсер создает дерево объектов и дает возможность управлять им. Это позволяет разработчику воспользоваться встроенной в парсер логикой вместо ручной работы с XML.

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

<?xml version="1.0" encoding=" windows-1251"?>
<?xml-stylesheet type="text/xsl" href="show_book.xsl"?>
<!DOCTYPE catalog SYSTEM "catalog.dtd">
<!--catalog last updated 2000-11-01-->
<catalog xmlns="">
  <book id="bk101">
     <author>Gambardella, Matthew</author>
     <title>XML Developer's Guide</title>
     <genre>Computer</genre>
     <price>44.95</price>
     <publish_date>2000-10-01</publish_date>
     <description><![CDATA[Глубокий взгляд на создание XML-приложений, используя <, >,]]> and &.</description>
  </book>
  <book id="bk109">
     <author>Фрай, Макс</author>
     <title>Гнезда Химер</title>
     <genre>Фэнтези</genre>
     <price>54.00</price>
     <publish_date>2000-01-02</publish_date>
     <description>После долгой жизни в Ехо сэр Макс оказывается в совершенно незнакомом мире.</description>
  </book>
</catalog>

После разбора два верхних уровня структуры узлов выглядят следующим образом. Самый верхний – это собственно документ, содержащий все остальные узлы. Сразу за ним следуют узлы, представляющие XML-декларацию, указание XSL, с помощью которого обрабатывается документ, декларация DOCTYPE и корневой элемент документа, в данном случае, catalog.

В элемент catalog входит реальное содержание документа, включающее узлы элементов, атрибутов, текста и CDATA. (Заметьте, что все узлы конвертируются при обработке, а CDATA – нет.)

Применение DOM

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

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

DOM рассматривает узлы как объекты, позволяя создать скрипт, загружающий документ и затем проходящий по нужным узлам, докладывая о том, что нашел по пути.

Дальше приводится краткое описание объектов и интерфейсов, входящих в эту реализацию DOM-парсера...

<...>

Чуть позже мы рассмотрим применение XML DOM на примере создания Web-конференции.

Далее

**Полностью статью можно найти в печатной версии журнала

Copyright © 1994-2016 ООО "К-Пресс"