Языки информационного обмена

Объектная модель документа

Показывать лекцию целиком

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

При использовании DOM для работы с текстовым файлом в формате XML она анализирует файл, разбивает его на индивидуальные элементы, атрибуты, комментарии и т.д. Затем в памяти создается представление файла 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-level1>
<node-level2/>
<node-level2>
<node-level3/>
</node-level2>
</node-level1>
</tree-node>

дерево элементов выглядит так:

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

В .

Зачем нужна модель DOM

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

  • Модель DOM гарантирует правильную грамматику и правильное оформление документов.

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

  • Модель DOM абстрагирует содержание от грамматики.

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

  • Модель DOM упрощает внутреннее манипулирование документом.

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

  • Модель DOM напоминает структуры иерархических и реляционных баз данных.

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

  • Модель DOM в окружающем мире

    Компания Netscape в версии 4.7 своего браузера еще не предлагает встроенной поддержки DOM, но при наличии библиотек ActiveX или Java DOM можно обращаться к документам XML и работать с ними у клиента с помощью языков Java и JavaScript. Следующие версии браузера Netscape включает встроенную поддержку XML и XSL.

    В браузерах Internet Explorer 5 и выше находятся встроенные библиотеки DOM и поддержка XSL. Для сценариев на стороне клиента доступно множество объектов для работы с XML-документом, самые важные из них, объекты XMLDOMDocument, XMLDOMNode, XMLDOMNodeList, XMLDOMParseError представляющие интерфейс для доступа ко всему документу, отдельным его узлам и поддеревьям, предоставляющие необходимую для отладки информацию о произошедших ошибках анализатора соответственно.

    Объект XMLDOMNode

    Объект XMLDOMNode, реализует базовый DOM интерфейс Node, предназначен для манипулирования с отдельным узлом дерева документа. Его свойства и методы позволяют получать и изменять полную информацию о текущем узле - его тип (является ли текущий узел элементом, комментарием, текстом и т.д.), название, полное название (вместе с Namespace префиксом), его содержимое, список дочерних элементов и т.д.

    Объект XMLDOMDocument

    Объект XMLDOMDocument представляет верхний уровень объектной иерархии и содержит методы для работы с документом: его загрузки, анализа, создания в нем элементов, атрибутов, комментариев и т.д. Многие свойства и методы этого объекта реализованы также в классе Node, т.к. документ может быть рассмотрен как корневой узел с вложенными в него поддеревьями.

    Объект XMLDOMNodeList

    Представляет собой список узлов - поддеревья и содержит методы, при помощи которых можно организовать процедуру обхода дерева.

    Объект XMLDOMParserError

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

    Клиент и сервер

    Все приложения DOM и XML можно разделить на две группы: устанавливаемые на сервере (или в таком контролируемом окружении, как системы типа клиент/сервер) и устанавливаемые у клиента.

    Использование модели DOM на сервере

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

    Использование модели DOM у клиента

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

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

    Так же возможно широкое использования модели DOM для генерации и манипулирования документами XML в среде предприятия.

    DOM и базы данных

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

    Применение DOM для создания комплексных документов XML

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

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

    Пример использования модели DOM.

    Рассмотрим простейший пример обработки XML документа с использованием DOM модели.

    Рассмотрим следующий XML документ:

    <example type="listing">
    <?xml version="1.0" encoding="windows-1251"?>
    <?xml-stylesheet type='text/xsl' href='1.xsl'?>
    <book>
      <title>Языки информационного обмена </title>
      <type> Лекции </type>
      <file>Лекции.doc</file>
    </book>

    Для отображения данного документа можно использовать следующий простой рекурсивный цикл.

    <html>
    <!--  Эта программа загружает XML-документ в браузер IE5 и проходит все узлы, используя рекурсивную функцию, применяя к ним необходимый стиль оформления --> 
    <!--  Загружаем XML-документ-->
    	<XML ID="xdoc" SRC="documents.xml"></XML>
    	<SCRIPT>
    //Создаем объект документа 
    var myDoc=xdoc;
    //Просматриваем документ применяя к каждому тегу свой стиль оформления --> 
    x=getchildren(myDoc);
    //***************Начало рекурсивной функции*************
    function getchildren(node)
    {
       var x=node.childNodes;
       var z=x.length;
       if (z!=0)
       {
          for(var i=0;i<z;i++)
          {
             if (x(i).nodeType==3)
            {
              document.write(x(i).nodeValue);
              document.write();
              getchildren(x(i));
            }
            else if (x(i).nodeName=="title")
            {
               document.write("<DIV STYLE='font-size:20pt;color:red;'>");
               getchildren(x(i));
               document.write("</DIV>");
               document.write("</br>");
            }
            else if (x(i).nodeName=="type")
           {
               document.write("<DIV STYLE='font-size:14pt;color:black;'>");
               getchildren(x(i));
               document.write("</DIV>");
               document.write("</br>");
           }
           else if (x(i).nodeName=="file")
           {
               document.write("<DIV STYLE='font-size:16pt;'>");
               document.write("<a href=");
               getchildren(x(i));
               document.write(">");
               document.write("Файл");
               document.write("</a>");
               document.write("</DIV>");
               document.write("</br>");
           }
           else
           {
               getchildren(x(i));
           }
         }
       }
    }
    </SCRIPT>
    </html>

    Функция getchildren кода принимает в качестве параметра узел, создает список всех дочерних узлов, проходит по этому списку, проверяя, имеет ли каждый дочерний узел свои собственные дочерние узлы, и если имеет, то вызывает сама себя. При этом к тегам с именами title, type, file применяются соответствующие стили.

    Применив эту функцию к нашему XML- документу мы получим на экране следующий результат:

    Вернуться к учебному плану