Об'єктна модель документа (англ.
Document Object Model, DOM) — специфікація прикладного програмного інтерфейсу для роботи зі структурованими документами (як правило, документами XML). Визначається ця специфікація консорціумом W3C.
З точки зору об'єктноорієнтованого програмування, DOM визначає класи, методи та атрибути цих методів для аналізу структури документів та роботи із представленням документів у вигляді дерева. Все це призначено для того, аби надати можливість комп'ютерній програмі доступу та динамічної модифікації структури, змісту та оформлення документа.
Разом із поширенням та розвитком вебтехнологій і вебпереглядачів почали з'являтись різні, часто несумісні інтерфейси роботи із HTML документами в інтерпретаторах JavaScript, вбудованих у вебпереглядачі. Це спонукало World Wide Web Consortium (W3C) узгодити та визначити низку стандартів, які отримали назву W3C Document Object Model (W3C DOM). Специфікації W3C не залежать від платформи або мови програмування.
Через те, що структура документа представляється у вигляді дерева, повний зміст документа аналізується та зберігається в пам'яті комп'ютера. Тому, DOM підходить для застосувань в програмах, які вимагають багаторазовий доступ до елементів документа в довільному порядку. В разі, якщо треба лише послідовний або одноразовий доступ до елементів документа, рекомендується, для пришвидшення перероблення та зменшення обсягів необхідної пам'яті комп'ютера, використовувати послідовну модель роботи зі структурованими документами (SAX).
Починаючи з 1998 року DOM визнається стандартом W3C. Відтоді, його було багаторазово розширено та вдосконалено. Існують кілька версій DOM, які отримали назву рівнів (англ. Level). Кожен рівень складається із декількох обов'язкових та необов'язкових модулів. Для того, щоб стверджувати про підтримку DOM певного рівня, програма має задовольняти всім вимогам стандарту DOM заявленого рівня, та всім вимогам нижчих рівнів. Також, реалізація інтерфейсу може підтримувати певні розширення, якщо вони не суперечать вимогам стандарту. У 2005 році, рівні 1 та 2 (Level 1, Level 2) та деякі модулі 3-го рівня (Level 3) було визнано як W3C Recommendation, що означає, що вони набули кінцевої форми.
Враховуючи суттєві чинні відмінності у реалізації DOM у веббраузерах, серед програмістів розповсюджена звичка перевіряти дієздатність тих чи інших можливостей DOM для кожного з браузерів, і тільки потім використовувати їх. Код нижче ілюструє можливість перевірки стандартів W3CDOM перед тим як запускати код, що залежить від результату перевірки.
if (document.getElementById && document.getElementsByTagName) { // якщо методи getElementById та getElementsByTagName // існують, то можна з майже впевнено сподіватись на підтримку W3CDOM. obj = document.getElementById("navigation") // далі йде інший код з використанням можливостей W3CDOM. // ..... }
Ще один фрагмент коду JavaScript, що дозволяє перевірити заявлену підтримку різних доповнень DOM у відповідному браузері.
<html> <head> <title>Test DOM Implementation</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <script type="text/javascript"> 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){ document.write(''); // header of table document.write(''); document.write('' + 'Підтримка доповнення ' + ' ') for (j = 0; j < versionArray.length; j++) { document.write(''+ 'версія ' + versionArray[j] + ' '); } document.write(' '); // content of table for (i = 0; i < featureArray.length; i++){ document.write(''); document.write('' + featureArray[i] + ' '); for (j = 0; j < versionArray.length; j++) { var res = document.implementation.hasFeature(featureArray[i], versionArray[j]); document.write(' + (res ? 'blue' : 'red') + '; color:white;">'+ res + ' '); } document.write(' '); } document.write('
'); } } </script> </head> <body> <h1>Перевірка доповнень DOM</h1> <script type="text/javascript"> domImplementationTest(); </script> </body> </html>
Після аналізу структурованого документа, будується його представлення у вигляді дерева. Дерево, в моделі DOM, складається із множини зв'язних вузлів (Node) різних типів. Як правило, розрізняють вузли наступних типів:
Стандартом визначаються і деякі інші типи вузлів у моделі документа.
Вузли деяких типів можуть мати гілки, інші ж можуть бути лише листами дерева. Спеціальні методи об'єктів вузлів дають можливість обходу дерева.
This article uses material from the Wikipedia Українська article Об'єктна модель документа, which is released under the Creative Commons Attribution-ShareAlike 3.0 license ("CC BY-SA 3.0"); additional terms may apply (view authors). Вміст доступний на умовах CC BY-SA 4.0, якщо не вказано інше. Images, videos and audio are available under their respective licenses.
®Wikipedia is a registered trademark of the Wiki Foundation, Inc. Wiki Українська (DUHOCTRUNGQUOC.VN) is an independent company and has no affiliation with Wiki Foundation.