Одним из самых мощных интерфейсов доступа к содержимому XML документов является Document Object Model - DOM.
Объектная модель XML документов является представлением его внутренней структуры в виде совокупности определенных объектов. Для удобства эти объекты организуются в некоторую иерархическую древовидную структуру данных - каждый элемент документа может быть отнесен к отдельной ветви, а все его содержимое, в виде набора вложенных элементов, комментариев, секций CDATA и т.д. представляется в этой структуре поддеревьями. Т.к. в любом правильно составленном XML-документе обязательно определен главный элемент, то все содержимое можно рассматривать как поддеревья этого основного элемента, называемого в таком случае корнем дерева документа. Для следующего фрагмента XML документа:
<tree-node> <node-level1> <node-level2/> <node-level2>text</node-level2> <node-level2/> </node-level1> <node-level1> <node-level2>text</node-level2> <node-level1> <node-level2/> <node-level2><node-level3/></node-level2> </node-level1> </tree-node>
Объектное представление структуры документа не является чем-то новым для разработчиков. Для доступа к содержимому HTML страницы в сценариях давно используется объектно-ориентированный подход, - доступные для Java Script или VBScript элементы HTML документа могли создаваться, модифицироваться и просматриваться при помощи соответствующих объектов. Но их список и набор методов постоянно изменяется и зависит от типа браузера и версии языка. Для того, чтобы обеспечить независимый от конкретного языка программирования и типа документа интерфейс доступа к содержимому структурированного документа в рамках W3 консорциума была разработана и официально утверждена спецификация объектной модели DOM Level 1.
DOM - это спецификация универсального платформо- и программно-независимого доступа к содержимому документов и является просто своеобразным API для их обработчиков. DOM является стандартным способом построения объектной модели любого HTML или XML документа, при помощи которой можно производить поиск нужных фрагментов, создавать, удалять и модифицировать его элементы.
Для описания интерфейсов доступа к содержимому XML документов в спецификации DOM применяется платформонезависимый язык IDL и для использования их необходимо "перевести" на какой-то конкретный язык программирования. Однако этим занимаются создатели самих анализаторов, нам можно ничего не знать о способе реализации интерфейсов - с точки зрения разработчиков прикладных программ DOM выглядит как набор объектов с определенными методами и свойствами. В следующем разделе мы вкратце рассмотрим объектную модель Microsoft Internet Explorer 5, доступную из Java Script и VBScript сценариев.
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 рассматривает узлы как объекты, позволяя создать скрипт, загружающий документ и затем проходящий по нужным узлам, докладывая о том, что нашел по пути.