Объектная модель документа (Document Object Model, DOM), предложенная консорциумом World Wide Web (W3C) представляет собой нечто вроде интерфейса прикладного программирования для работы с информацией в Web, делающего ее базовый элемент - Web-страницу - доступным для манипулирования из программ.
Преобразование документов в деревья
Первый шаг в направлении стандартизации DOM консорциум сделал в октябре, выпустив проект спецификации, определяющей объектно-ориентированный интерфейс прикладного программирования (ИПП) для доступа к любым объектам, от Web-страницы до XML-документа (Extensible Markup Language - расширяемый язык разметки) и их модификациям. Этот первый проект определяет наиболее фундаментальный ИПП, составляющий так называемое ядро более обширной системы, разрабатываемой в настоящее время W3C. Последующие проекты будут посвящены ИПП более высоких уровней, предназначенным для манипулирования документами и запросами, например ориентированным специально на HTML-документы.
Наиболее остро потребность в DOM ощущается при использовании технологии динамического HTML (Dynamic HTML), поскольку DOM предоставляет стандартный способ манипулирования помещенной на страницы информацией с помощью сценариев. Как только соответствующий стандарт будет принят двумя ключевыми производителями - корпорациями Netscape Communications и Microsoft, авторам и разработчикам станет гораздо проще создавать динамические, функционирующие на основе сценариев документы, которые смогут исполняться браузерами обеих компаний. Например, одинаковым для обоих браузеров станет метод доступа к содержимому заголовков документов (и, вероятно, его модификации).
И Microsoft, и Netscape уже используют каждая свою собственную версию DOM, и между этими версиями есть существенные различия.
DOM, кроме того, может обеспечить для разработчиков стандартный способ сбора информации (возможно, из нескольких источников) и интеграции разрозненных приложений. Например, создавая на основе DOM специальные XML-документы, можно будет легко связывать между собой несовместимые БД.
DOM также позволит разделить процессы управления документами и их публикации. Например, с помощью DOM система управления документами сможет открыть внешним программам доступ к информации о хранящихся в ней документах. Приложение, предназначенное для публикации, в свою очередь, смогло бы использовать эту информацию для того, чтобы “на лету” собирать из нескольких документов, составленных с применением различных разновидностей HTML и XML, один, предназначенный для публикации. Благодаря использованию DOM ПО публикации в приведенном примере смогло бы обойтись без детальной информации о внутреннем устройстве конкретных систем управления документами; любые DOM-совместимые приложения могли бы взаимодействовать между собой.
Преобразование документов в иерархические структуры
В текущем проекте (который еще может претерпеть до стандартизации существенные изменения) в основу DOM положена иерархическая модель данных.
На верхнем уровне дерева находится сам документ. На следующем размещаются такие элементы, как заголовки, метаданные и комментарии. Атрибуты и текст каждого из этих элементов располагаются уровнем ниже (см. рисунок).
Модель описывается на IDL (Interface Definition Language - язык описания интерфейсов) объектной архитектуры CORBA (Common Object Request Broker Architecture - общая архитектура с посредниками запросов к объектам). Использовать CORBA IDL очень просто и удобно (это ясный и лаконичный язык); однако не требуется, чтобы всякая реализация DOM была основана на CORBA. Например, уже существует проект спецификации DOM, основанной на Java.
Первым делом DOM-приложение должно получить ссылку на документный объект (ее может предоставить ему либо браузер, либо ПО хранения документов). Затем эта ссылка используется для получения дерева элементов документа, которое преобразуется для передачи DOM-приложению в последовательность узлов.
Каждый элемент такой последовательности представляет собой узел основанного на модели DOM дерева. Документ является родительским узлом, ему подчинены по иерархии один или более дочерних, соответствующих различным элементам. Каждый элементный узел, в свою очередь, имеет дочерние узлы, в частности содержащие текст элемента. Разработчик манипулирует узлами с помощью определенных в интерфейсе прикладного программирования вспомогательных объектов, таких, как NodeList и NodeEnumerator (“список узлов” и “регистратор узлов”), предоставляющих, в частности, методы insertChild(), removeChild(), getParentNode(), getFirstChild() (“добавить дочерний узел”, “удалить дочерний узел”, “выбрать родительский узел”, “выбрать первый дочерний узел”) и т. д.
Кроме того, DOM предусматривает наличие в составе каждого документного объекта специального узла, называемого DocumentContext (“контекст документа”), который содержит метаданные о документе. В первоначальной версии спецификации, DocumentContext, вероятно, будет включать просто HTTP-заголовки, выбранные вместе с документом, и его URL-адрес. Однако в перспективе этот список может быть значительно пополнен различной дополнительной информацией. Наиболее очевидное из возможных расширений - связывание DOM через объект DocumentContext с механизмом Resource Definition Framework (см. статью рядом).
И. С.