1
0

DOMとは何か?

Posted at

仕様から考える

DOMの仕様は2つあり、メインはWHATWGのものでサブとしてW3Cの仕様があります。WHATWGの仕様では1.8 HTML vs XML syntax

This specification defines an abstract language for describing documents and applications, and some APIs for interacting with in-memory representations of resources that use this language.
The in-memory representation is known as "DOM HTML", or "the DOM" for short.

(日本語)この仕様は、文書やアプリケーションを記述するための抽象言語と、この言語を使用するリソースのメモリ内表現と相互作用するためのいくつかのAPIを定義しています。
このメモリ内表現は「DOM HTML」、または略して「DOM」として知られています。

となっています。引用先の前後の文脈から抽象言語はHTMLやXMLなどを表すので、DOMとはHTMLやXMLなどにおけるメモリ内での表現の仕方を示す、と考えられます。
一方で歴史的に最初にDOMの仕様を作成したW3CのWhat is the Document Object Model?のページによると

The Document Object Model (DOM) is a programming API for HTML and XML documents. It defines the logical structure of documents and the way a document is accessed and manipulated.

(日本語)ドキュメントオブジェクトモデル(DOM)は、HTMLおよびXML文書のためのプログラミングAPIです。DOMは文書の論理的な構造と、文書へのアクセス方法および操作方法を定義します。

となっています。つまりHTMLやXMLの構造を表すのはWHATWGと同じで、W3Cの定義ではそれに追加でAPIの部分もDOMに含んでいる、つまりdocument.querySelector()のようなプログラムもDOMの1つとして定義しています。

実装側から考える

実際のブラウザを作成しているブラウザベンダーではどのような解釈をしているのかも考えます。Chrome for DevelopersのHTML versus the DOMでは

The browser parses the HTML and creates a tree of objects like this: 略 This tree of objects, or nodes, representing the page's content is called the DOM.

(日本語)ブラウザはHTMLを解析し、このようなオブジェクトのツリーを作成します:略 このオブジェクトのツリー、つまりノードは、ページの内容を表しており、これをDOM(Document Object Model)と呼びます。

となっており、実際に、ブラウザがHTMLを解析して内部で作成したデータ自体をDOMと表現しています。

まとめ

以上のことからDOMとは、HTMLなどの情報をメモリ内に保存する際のデータの表現方法、を表すこともあれば、実際にそこから実装されるデータ自体を表すこともあれば、API自体を含むこともあると言えます。そのため文脈によっていろいろ変わるので、結局DOMって何?って聞かれたら、難しいですね。個人的にはHTMLを変換してプログラムから操作しやすいような形にしてメモリに記録したもの、みたいに解釈するのが一番自然で良いのかなと思ったりします。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0