Приклад ієрархії об'єктів в HTML DOM

DOM (від англ. Document Object Model - "Об'єктна модель документа") - це не залежний від платформи і мови програмний інтерфейс, що дозволяє програмам і скриптам отримати доступ до вмісту HTML, XHTML і XML -документів, а також змінювати вміст, структуру та оформлення таких документів.

Модель DOM не накладає обмежень на структуру документа. Будь-який документ відомої структури за допомогою DOM може бути представлений у вигляді дерева вузлів, кожен вузол якого являє собою елемент, атрибут, текстовий, графічний або будь-який інший об'єкт. Вузли зв'язані між собою відносинами "батьківський-дочірній".

Спочатку різні браузери мали власні моделі документів (DOM), несумісні з іншими. Для того щоб забезпечити взаємну і зворотну сумісність, фахівці міжнародного консорціуму W3C класифікували цю модель за рівнями, для кожного з яких була створена своя специфікація. Усі ці специфікації об'єднані в загальну групу, що носить назву W3C DOM.

Ще один інтерфейс прикладного програмування, званий JDOM, забезпечує більш високий, ніж W3C DOM, рівень для роботи з XML-документами на Java.


1. Історія

Історія DOM переплітається з історією "воєн веб-браузерів" в кінці 1990-х років між Netscape Navigator і Microsoft Internet Explorer, зокрема, між JavaScript і JScript, першими скриптовими мовами, за те, щоб бути широко використовуваними в механізмі верстки для веб-браузерів.

1.1. Традиційний DOM

JavaScript був випущений Netscape Communications в 1996 році в рамках Netscape Navigator 2.0. Конкурент Netscape - Microsoft випустив пізніше в тому ж році Internet Explorer 3.0 з портом JavaScript, названим JScript. JavaScript і JScript дозволяють розробникам створювати інтерактивні веб-сторінки з боку клієнта. Обмежені можливості виявлення створених користувачем подій і зміна документа HTML в першому поколінні цих мов в підсумку стали відомі як "DOM рівень 0" або "Традиційний DOM". Жоден незалежний стандарт не був розроблений для DOM рівень 0, але він був частково описаний в специфікації HTML4.

Традиційний DOM був обмежений в типах елементів, до яких можна отримати доступ. Такі елементи, як форма ( form), посилання ( link) і зображення (image) могли бути посиланнями з ієрархічними іменами, які починалися з кореня об'єкта документа. Ієрархічне ім'я могло використовувати або імена, або послідовний індекс загального елемента. Наприклад, елемент form input може бути доступний як "document.formName.inputName" або як "document.forms [0]. Elements [0]".

Традиційний DOM давав можливість підтвердження форми з клієнтської сторони і популярний ефект "трансформації об'єкта".


1.2. Проміжний DOM

У 1997 році Netscape і Microsoft випустили Netscape Navigator і Internet Explorer версії 4.0, додавши підтримку Dynamic HTML (DHTML), надає можливість зміни функціональності HTML документа при його завантаженні. DHTML вимагав розширень для елементарного об'єкта document, який був доступний в Традиційною реалізації DOM. Хоча Традиційна реалізація DOM була в значній мірі сумісної з того моменту, як JScript був заснований на JavaScript, розширення DOM для DHTML були розроблені паралельно кожним з творців браузера і залишились несумісними. Ці версії DOM стали відомі як "Проміжний DOM".

Проміжні DOM давали можливість маніпуляції властивостями Cascading Style Sheets (CSS), які впливають на відображення документа. Вони також забезпечують доступ до нового властивості під назвою "шари" через властивості "document.layers" (в Netscape Navigator) і "document.all" (в Internet Explorer). Через первісної несумісності в Проміжних DOM розробка загального браузера зажадала спеціальної обробки для кожного випадку.

Пізніші версії Netscape Navigator відмовилися від підтримки Проміжного DOM. Internet Explorer продовжує підтримку свого Проміжного DOM для зворотної сумісності.


1.3. Стандартизація

Організація World Wide Web Consortium (W3C), заснована в 1994 році, щоб розвивати і підтримувати відкриті стандарти для World Wide Web, змусила Netscape Communications і Microsoft разом з іншими компаніями розробити стандарт для скриптових мов браузера під назвою " ECMAScript ". Перша версія стандарту була опублікована в 1997 році. Пізніші випуски JavaScript і JScript будуть здійснювати стандарт ECMAScript для більшої межбраузерной сумісності.

Після виходу ECMAScript W3C почала роботу над стандартизацією DOM. Початковий стандарт DOM, також відомий як "DOM рівень 1", був рекомендований W3C наприкінці 1998 року. Приблизно в цей же час вийшов Internet Explorer 5.0 з обмеженою підтримкою DOM рівень 1. DOM рівень 1 забезпечив повну модель для всього HTML-або XML-документа, включаючи спосіб зміни будь-якої частини документа. Неадаптовані браузери, наприклад, Internet Explorer 4.x і Netscape 4.x, були широко використовувані аж до 2000 року.

DOM рівень 2 був опублікований в кінці 2000 року. Він ввів функцію "getElementById", а також модель подій і підтримку XML namespace і CSS. DOM рівень 3 - поточна версія специфікації DOM, опублікована у квітні 2004 року, додала підтримку XPath та обробку подій клавіатури, а також інтерфейс для серіалізациі документа як XML.

У 2005 році велика частина W3C DOM підтримувалася основними, що задовольняють ECMAScript, браузерами, включаючи Microsoft Internet Explorer version 6 (2001 рік), Opera, Safari і браузери, засновані на Gecko (такі як Mozilla, Firefox, SeaMonkey і Camino).


2. Реалізація DOM в веб-браузерах

Враховуючи існування різних реалізацій DOM в веб-браузерах, серед програмістів поширена звичка перевіряти працездатність тих чи інших можливостей DOM для кожного конкретного браузера і тільки потім використовувати їх. Код нижче ілюструє спосіб перевірки на підтримку стандартів W3CDOM перед тим, як запустити код, залежний від результату цієї перевірки.

 if  (  document.  getElementById  &&  document.  getElementsByTagName  )  {  / / Якщо методи getElementById і getElementsByTagName  / / Доступні, то можна відносно точно передбачити підтримку W3CDOM.  obj  =  document.  getElementById  (  "Navigation"  )  / / Далі йде інший код з використанням можливостей W3CDOM.  / / .....  } 

Ще один фрагмент коду JavaScript, що дозволяє перевірити заявлену підтримку різних розширень DOM в конкретному браузері.

 function  domImplementationTest  (  )  {  var  featureArray  =  [  'HTML'  ,  'XML'  ,  'Core'  ,  'Views'  ,  'StyleSheets'  ,  'CSS'  ,  'CSS2'  ,  'Events'  ,  'UIEvents'  ,  'MouseEvents'  ,  'HTMLEvents'  ,  'MutationEvents'  ,  'Range'  ,  'Traversal'  ]  ;  var  versionArray  =  [  '1 .0 '  ,  '2 .0 '  ,  '3 .0 '  ]  ;  var  i  ;  var  j  ;  if  (  document.  implementation  &&  document.  implementation  .  hasFeature  )  {  for  (  i  =  0  ;  i  <  featureArray.  length  ;  i  + +  )  {  for  (  j  =  0  ;  j  <  versionArray.  length  ;  j  + +  )  {  document.  write  (  'Підтримка розширення'  +  featureArray  [  i  ]  +  'Версії'  +  versionArray  [  j  ]  +  ':'  +  (  document.  implementation  .  hasFeature  (  featureArray  [  i  ]  ,  versionArray  [  j  ]  )  ?  ' true '  :  ' false '  )  +  '
'
) ; } document. write ( '
'
) ; } } }

Так як DOM підтримує навігацію в будь-якій області (наприклад, батько і попередній брат) і враховує довільні зміни, реалізація повинна принаймні буферізіровать документ, який (або деяка розроблена форма якого) читався до цього часу.


2.1. Браузерний движок

Основна стаття: Браузерний движок

Браузери спираються на свій движок, коли відбувається перетворення (парсинг) HTML-файлів в DOM. Деякі браузерні движки, наприклад Trident / MSHTML і Presto, тим чи іншим чином мають прив'язку до певного браузеру - Internet Explorer і Opera, відповідно. Такі ж, як WebKit і Gecko, використовуються в безлічі різних браузерів, таких як Safari, Google Chrome, RockMelt, Firefox або Flock. Різні браузерні движки підтримують стандарти DOM на різних рівнях відповідності.

Див також: Comparison of layout engines (Document Object Model) (англ.)


2.2. Бібліотеки

Реалізації DOM:

  • libxml2
  • MSXML
  • Xerces - це реалізація DOM на C + +, з компонуванням Java і Perl.

API, які показують реалізації DOM

  • JAXP (Java API for XML Processing) - API для доступу до провайдерів DOM.

3. Рівні W3C DOM

Поточним рівнем специфікацій DOM є Рівень 2, але тим не менше деякі частини специфікацій Рівня 3 є рекомендованими W3C.

Рівень 0
Включає в себе всі специфічні моделі DOM, які існували до появи Рівня 1, наприклад, document.images, document.forms, document.layers і document.all. Необхідно звернути увагу, що ці моделі формально не є специфікаціями DOM, опублікованими W3C, а скоріше є інформацією про те, що існувало до початку процесу стандартизації.
Рівень 1
Базові функціональні можливості DOM (HTML і XML) в документах, такі як отримання дерева вузлів документа, можливість змінювати і додавати дані.
Рівень 2
Підтримка так званого простору імен XML <- filtered views -> і подій.
Рівень 3
Складається з шести різних специфікацій:
  1. DOM Level 3 Core;
  2. DOM Level 3 Load and Save;
  3. DOM Level 3 XPath;
  4. DOM Level 3 Views and Formatting;
  5. DOM Level 3 Requirements;
  6. DOM Level 3 Validation.
Ці специфікації є додатковими розширеннями DOM.

4. Додатки

4.1. Веб-браузери

Веб-браузери не зобов'язані використовувати DOM в обов'язковому порядку, щоб виконувати HTML-документ. Однак DOM потрібно для скриптів JavaScript, які бажають спостерігати або змінити веб-сторінку динамічно. Іншими словами, Document Object Model - це інструмент, за допомогою якого JavaScript бачить вміст HTML-сторінки і стан браузера.

5. Проблеми

Через несумісність браузерів використання DOM іноді призводить до труднощів HTML-верстки і низької надійності сторінок.

6. Специфікації