DOM実装

W3C DOM3 時代の DOM 実装

[8] W3C DOM 時代にはDOM実装を表すオブジェクトがありました。 その名の通り、 DOM実装の全体を表すことを意図したもので、 複数の DOM実装が混在することが想定されていました。

[9] 現在は後方互換性のため形骸化した DOMImplementation オブジェクトのみ残っています。

DOM インターフェイス

[4] DOM実装の名を持つインターフェイスオブジェクトには、 次のものがありました。

[13] DOM実装インターフェイス

[5] DOMImplementationDOM1 で追加されました。 元々DOM実装を表す文書によらない共通オブジェクトを意図していた節がありますが、 実際の Webブラウザーではそのように扱われず、 DOM Standard では Document の付属オブジェクトとして定義されています。

[6] それ以外は DOM3 で追加され、 Java で複数の DOM実装が混在する環境で直接 DOM実装の名前をハードコードせずに選択 (発見) するために使うことが想定されていたようです。 しかし Web では実装されなかったため、現在の DOM Standard では廃止されています。

DOM実装と DOM木

[10] W3C DOM はまず DOM実装 (DOMImplementation) があって、そのメソッドを使って DOM木を作成するような構造となっていました。

[11] 現在の DOM は、 Document に付属する補助的なオブジェクトとして DOMImplementation が存在する形になっています。 DOMImplementation オブジェクトは、 Document ごとに存在します。

[12] DOMImplementation は元の JavaScript には存在せず、 W3C DOM で追加されたものですが、それが Webブラウザーに実装された時に、 Web同一起源ポリシーや複数の大域オブジェクトの存在する構成に馴染む形として、 現在の仕様に落ち着きました。 W3C DOMJava を優先してそれと矛盾した進化を進めていきましたが、 WHATWGWeb DOM Core (現在の DOM Standard) は Webブラウザーに実装された形のまま標準化しました。

歴史

混合

[1] DOM実装の混合について。

[2] 仕様書:

[3] XML 語彙を開発するとその語彙の XML 実現値を操作するために特化した API を定義することがよく行われていまして、 MathMLSVG のように通常は DOM を拡張することで実現しています。

SVG や MathML の実現値はしばしば XHTML など他の語彙の文書に埋込まれます。 構文的には XML名前空間を使って語彙を統合できるのですが、 DOM 2 では異なる DOM 実装を一つの応用から同時に使うには問題があることがわかりました。 DOM 3 ではこの点が改良されています。

DOM 3 を実装する DOM 実装は、特定の DOM を実装する部分部品と DOM 界面を通じてシームレスに探索・操作することができるように協調することができるべきです。

物体に関する通常の型変換 (typecast) 操作は与えられた文書型について遺物 code が期待する界面に対応するべきです。実行時に結合された物体の複数の DOM 特別化から選択するためには型変換技術は適当ではないかもしれません。 すべてが束縛の物体模型で定義された通り同じ物体の一部ではないかもしれないからです。

[7] 衝突が一番はっきりしているのは Document 物体で、 同じ種類の語彙で構成される文書では、どの要素も Document 物体と所有者が同じですから、特別化サービスや特別化節の構築を Document に気兼ねなく頼むことができます。 ところが、異なる種類の語彙が混ざっている場合は、 それぞれの要素が異なる特別化サービスや API を期待するのですが、文書階層の所有者やはあくまで1つしかないのです。