DOMについて

Perl&XMLを読んでいたら7章「DOM(Document Object Model)」のイントロで

DOMはXMLデータをツリー構造体として扱うための標準インターフェースを提供する

DOMはW3Cの勧告になっている規格である。DOMはXMLデータのメモリ内構造体に対する言語に依存しないインターフェースとして設計されており、JavaECMAScriptPerl、その他の言語による実装がある。

と書いてあった。なるほど。

Javascriptでツリー構造を扱うためのメソッド群もしくはそのやり方がDOMなんだと思ってたんですけど、実はJavascriptだけの専売特許じゃないのだなと。JavascriptがDOMという標準規格をサポートしてるってだけなんですね。いろんな本にそのように書いてあるのだけど、意味するところをよく分かってなかった・・・だってJavascript以外の本でDOMって言葉を見たこと無かったんだもん (・ω・;)

DOMは、これらのクラスやメソッドの外見だけを規定しており、内部の実装については開発者に任せている。つまり、メモリ管理、データ構造体、アルゴリズムなどの具体的な実装方法については一切規定していない

ふむふむ。

ためしにDOMをサポートするというPerlモジュールのXML::DOMを見て見るとgetElementsByTagNameやappendChildなど、Javascriptでもよく見るメソッドが出てくる。メソッド名が全部同じです。

こうやって標準化されていることで、他言語を使う時でも差を意識しなくてもよくなるんですね。(もちろんDOM以外の部分のやり方はその言語に従う必要がありますが)

あれ でも

DOMはXMLデータをツリー構造体として扱うための標準インターフェースを提供する

とあるが、Javascriptでは明らかにHTMLの文脈でDOMを使ってるな。混乱してきたぞ。


Javascriptの組み込みメソッドの名前とDOM用のメソッドの名前のつけ方が全然違うので妙な違和感を感じていたのだけど、これも納得。(getElementByIdとかgetElementsByTagNameが 妙に長いし説明くさい名前のメソッドだなぁと思ってたんですよ。)

*そういうやJavaの本を読んでいたら「抽象クラス」ってのがが出てきて、メソッドだけを定義してオブジェクトを作成できないクラスが何の役に立つんだよ!?と疑問だったのですが、これも解決。抽象クラスでインターフェースを統一してあげることで、サブクラスの内部実装に差があっても メソッド名の差を吸収してコードを書き換えずに転用できたり ってことなのか。もしくは抽象クラスを先に設計しておくことで、多人数で分散的な作業をするときもメソッド名が混乱しなくていいし。こういう利点があるんですね。DOMと(というか「標準化」という作業かな?)根底の考え方が似てるなーと思った。


Perl & XML

Perl & XML