Технология Клиент-Сервер 2001'2 |
|||||||
|
На сегодня существует два типа парсеров. Один из них базируется на событиях, а второй – на объектной модели представления документа. Рассмотрим их по порядку.
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, но в дальнейшем, возможно, вернемся к этой теме.
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 позволяет приложению работать со структурой и данными XML-документа как со структурой программы, а не текстовым потоком. Используя возможности DOM API, приложения и скрипты могут работать с этими структурами, не зная о деталях синтаксиса XML.
DOM использует две общие для XML абстракции: древовидную иерархию и узлы, представляющие структуру и содержимое документа. Для разработчика это означает, что обработка XML состоит в навигации по этому дереву для обработки или изменения информации. Работа с XML требует думать об информации как о наборе вложенных контейнеров, и следить за тем, чтобы информация укладывалась или вынималась из правильного контейнера.
DOM рассматривает узлы как объекты, позволяя создать скрипт, загружающий документ и затем проходящий по нужным узлам, докладывая о том, что нашел по пути.
Дальше приводится краткое описание объектов и интерфейсов, входящих в эту реализацию DOM-парсера...
<...>
Чуть позже мы рассмотрим применение XML DOM на примере создания Web-конференции.
Copyright © 1994-2016 ООО "К-Пресс"