| |
今回は W3C の DOM の話題を中心に DOM の概略構造を眺めてみましょう。
W3C DOM は Level1 と Level2 があり、Level1 では「Core」と「HTML」が、 Level2 では Level1 の DOM に加えて 「Views」, 「StyleSheets」, 「CSS」, 「Events」, 「Traversal」 そして「Range」 の6つのオブジェクトモデルが 定義されています。
文字列( DOMString )、タグ要素( Element )やその属性( Attr )などの雛形、 例外( DOMException )発生時に通知されるオブジェクトなど、DOM を構成する 要素に関する定義がされています。
Core で定義された DOM 要素を HTML に適用したもので、いわば HTML の DOM における表現に関する定義がされています。
HTML や CSS で定義された文書がどう見えるかを規定するものですが、Level2 では単に静的なインターフェイスとして AbstractView, DocumentView の2つの オブジェクトを定義しているだけ詳細については未だ決まっていません。
STYLE タグの定義は HTML DOM で定義されていますが、StyleSheets は管理されている スタイルシートをアクセスするためのインターフェイスの定義にあたります。
スタイルシートに記述された実体( ルールや属性、値 )などが定義されています。
ドキュメントで発生するイベントの定義で、イベントの種類や伝達方式、 取得できる情報などが定義されています。
主に DOM 構造をアクセスするためのインターフェイスとして TreeWalker, NodeIterator に関する定義がされています。
文書の文脈に沿った DOM 要素の選択動作に関する定義で、 ある特定のタグや 文字から他のタグや文字までの選択に関する 方法や インターフェイスが定義されています。
詳細は W3C の文書を見ていただくことにして(笑)、 W3C DOM の特徴は何と言っても
HTML の文書構造をそのまま DOM に反映させていることでしょう。
例えば、
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS"> <title>sample</title> <style type="text/css"><!-- BODY { background-color: white; text: black; } --></style> </head> <body> <h1>W3C DOM は HTML そのまんま!</h1> </body>
とあったとすると、DOM 構造は大体以下のようになります。
HTMLDocument └ HTMLElement ├ HTMLHeadElement │ ├ HTMLMetaElement │ ├ HTMLTitleElement │ │ └ text( sample ) │ └ HTMLStyleElement │ └ text( <!-- BODY { ... } --> ) └ HTMLBodyElement └ HTMLHeadingElement └ text( W3C DOM は HTML そのまんま! )
また、もう一つの特徴として各タグの属性値が内容に依存した型ではなく、
文字列( DOMString )になっていることでしょう。
つまり、今までの IE や NN の DOM 構造が JavaScript から使いやすいように
必要な情報をオブジェクトとして提供し、その属性値も期待する使い方に従った型が
設定されていたのが、 W3C DOM では使用方法は想定せず、ただひたすら HTML 文書の
構造をオブジェクトとして表現することに徹底していることです。
... と、ここまで書くと、色々と疑問が湧いてきます。 f(^^;
結論から言うと、 W3C DOM Level2 までの仕様ではこれらの問題を解決できません。
「じゃぁ、意味ないじゃん」かと言うと、まあ... そうなんですが... そう捨てたもんじゃなくって、そこは Mozilla で色々と工夫して、その結果を Level3 に反映させようとしているらしいんです... がね(笑)。
まあ、スタンダードな仕様の確立を目的として、従来の互換を捨ててゼロから 再構築しているわけで、最初っから完全な形にはならないのは当然でしょうか ら、ここはむしろどうすれば良いかを提案して仕様を確立して行こうと考える べきでしょう。
ってことで、次回からはいよいよ Mozilla の DOM に関して、もう少し具体的 な話題に入ろうかな、って思っています。 f(^^;