Пользовательские агенты должны создавать объект DOMImplementation всякий раз, когда создается документ, и связывать его с этим документом.
IDL
[Exposed=Window] interface DOMImplementation { [NewObject] DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId); [NewObject] XMLDocument createDocument(DOMString? namespace, [LegacyNullToEmptyString] DOMString qualifiedName, optional DocumentType? doctype = null); [NewObject] Document createHTMLDocument(optional DOMString title); boolean hasFeature(); // бесполезный; всегда возвращает истину };
Для веб-разработчиков (не нормативно)
doctype = document . implementation . createDocumentType(qualifiedName, publicId, systemId)
Возвращает doctype с указанными qualifiedName, publicId и systemId. Если qualifiedName не соответствует продукту Name, генерируется исключение DOMException «InvalidCharacterError», а если оно не соответствует продукту QName, генерируется исключение DOMException «NamespaceError».
doc = document . implementation . createDocument(namespace, qualifiedName [, doctype = null])
Возвращает XMLDocument с элементом документа, локальное имя которого — это qualifiedName, а пространство имен — namespace (кроме случаев, когда qualifiedName является пустой строкой), и с doctype, если он указан, в качестве его типа документа.
Этот метод генерирует те же исключения, что и метод createElementNS(), когда вызывается с пространством имен namespace и квалифицированным именем qualifiedName.
doc = document . implementation . createHTMLDocument([title])
Возвращает документ с уже построенным базовым деревом, включая элемент заголовка title, если не указан аргумент заголовка title.
При вызове метода createDocumentType(qualifiedName, publicId, systemId) необходимо выполнить следующие действия:
1. Проверяем на соответсвие qualifiedName. 2. Верните новый тип документа с qualifiedName как его именем, publicId в качестве общедоступного идентификатора и systemId в качестве идентификатора системы, а для документа узла установите соответствующий документ этого this.
Примечание!
Не выполняется проверка того, что кодовые точки publicId соответствуют продукту PubidChar или что systemId не содержит одновременно ‘"
‘ и «'
«.
Метод createDocument(namespace, qualifiedName, doctype) при вызове должен выполнять следующие действия:
1. Пусть document будет новым объектом XMLDocument. 2. Пусть element будет null. 3. Если qualifiedName не является пустой строкой, тогда установите для element результат выполнения внутренних шагов createElementNS, данного document, namespace, qualifiedName и пустого словаря. 4. Если doctype не равно null, добавьте doctype к document. 5. Если element не равен null, добавьте element в document. 6. Источник document - это источник связанного документа этого this. 7. Тип содержимого document определяется пространством имен namespace: HTML namespace application/xhtml+xml SVG namespace image/svg+xml Любое другое пространство имен application/xml 8. Вернуть document
При вызове метода createHTMLDocument(title) необходимо выполнить следующие действия:
1. Пусть doc будет новым документом, который является документом HTML. 2. Установите тип содержимого документа doc на «text/html». 3. Добавьте новый тип документа с именем «html» и с документом узла, установленным на doc, в doc. 4. Добавьте в doc результат создания элемента, заданного doc, html и пространством имен HTML в doc. 5. Добавьте результат создания элемента, заданного doc, head и пространством имен HTML, к элементу html, созданному ранее. 6. Если указан заголовок title: 1. Добавьте результат создания элемента с заданным doc, title и пространством имен HTML к ранее созданному элементу head. 2. Добавьте новый узел Text с его набором данных в title (который может быть пустой строкой) и его документом узла, установленным в doc, к элементу title, созданному ранее. 7. Добавьте результат создания элемента, заданного документом doc, body и пространством имен HTML, к элементу html, созданному ранее. 8. Источник документа doc - это источник связанного документа этого this. 9. Вернуть doc
При вызове метода hasFeature() он должен возвращать значение true.
Примечание!
Изначально hasFeature() сообщал, заявлял ли пользовательский агент о поддержке данной функции DOM, но опыт показал, что это было не так надежно или детально, как простая проверка наличия требуемых объектов, атрибутов или методов. Таким образом, он больше не будет использоваться, но продолжает существовать (и просто возвращает true), чтобы старые страницы не перестали работать.
Ссылки
DOM стандарт — https://efim360.ru/dom/
Читайте перевод полной версии стандарта «объектной модели документа», чтобы ознакомиться со всеми концепциями и интерфейсами.
DOM — Living Standard — https://dom.spec.whatwg.org
Читайте официальную документацию живого стандарта «объектной модели документа», чтобы быть в курсе последних изменений.