<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">W3C DOM</anchor> 時代には<dfn>DOM実装</dfn>を表す<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>がありました。
その名の通り、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実装</anchor>の全体を表すことを意図したもので、
複数の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実装</anchor>が混在することが想定されていました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> 現在は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">後方互換性</anchor>のため形骸化した <code class="DOMi" xml:lang="en">DOMImplementation</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>のみ残っています。</p><section><h1>DOM インターフェイス</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM実装</anchor>の名を持つ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>には、
次のものがありました。</p><figure class="middle list"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM実装</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor></figcaption><ul><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMImplementation</anchor></code></li><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMImplementationList</anchor></code></li><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMImplementationRegistry</anchor></code></li><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMImplementationSource</anchor></code></li></ul></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMImplementation</anchor></code> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM1</anchor> で追加されました。
元々<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM実装</anchor>を表す<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書</anchor>によらない共通オブジェクトを意図していた節がありますが、
実際の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>ではそのように扱われず、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM Standard</anchor>
では <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Document</anchor></code> の付属オブジェクトとして定義されています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> それ以外は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM3</anchor> で追加され、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Java</anchor> で複数の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM実装</anchor>が混在する環境で直接
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM実装</anchor>の名前を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ハードコード</anchor>せずに選択 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">発見</anchor>) するために使うことが想定されていたようです。
しかし <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web</anchor> では実装されなかったため、現在の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM Standard</anchor> では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">廃止</anchor>されています。</p></section><section><h1>DOM実装と DOM木</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">W3C DOM</anchor> はまず <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM実装</anchor> (<code class="DOMi" xml:lang="en">DOMImplementation</code>)
があって、その<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>を使って <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM木</anchor>を作成するような構造となっていました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> 現在の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> は、 <code class="DOMi" xml:lang="en">Document</code> に付属する補助的な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>として
<code class="DOMi" xml:lang="en">DOMImplementation</code> が存在する形になっています。
<code class="DOMi" xml:lang="en">DOMImplementation</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>は、 <code class="DOMi" xml:lang="en">Document</code>
ごとに存在します。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <code class="DOMi" xml:lang="en">DOMImplementation</code> は元の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JavaScript</anchor> には存在せず、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">W3C DOM</anchor> で追加されたものですが、それが <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>に実装された時に、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">同一起源ポリシー</anchor>や複数の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">大域オブジェクト</anchor>の存在する構成に馴染む形として、
現在の仕様に落ち着きました。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">W3C DOM</anchor> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Java</anchor> を優先してそれと矛盾した進化を進めていきましたが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WHATWG</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web DOM Core</anchor> (現在の <cite>DOM Standard</cite>) は
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>に実装された形のまま<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">標準化</anchor>しました。</p></section><section><h1>歴史</h1><section><h1>混合</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM実装</anchor>の混合について。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 仕様書:<ul><li>[DOM 3] 1.3.5 Mixed DOM Implementations
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="IW" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="DOM3:&quot;Core/core.html#Embedded-DOM&quot;">IW:DOM3:&quot;Core/core.html#Embedded-DOM&quot;</anchor-external></li></ul></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> XML 語彙を開発するとその語彙の XML 実現値を操作するために特化した
API を定義することがよく行われていまして、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MathML</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SVG</anchor>
のように通常は DOM を拡張することで実現しています。</p><p>SVG や MathML の実現値はしばしば XHTML など他の語彙の文書に埋込まれます。
構文的には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML名前空間</anchor>を使って語彙を統合できるのですが、
DOM 2 では異なる DOM 実装を一つの応用から同時に使うには問題があることがわかりました。
DOM 3 ではこの点が改良されています。</p><p>DOM 3 を実装する DOM 実装は、特定の DOM を実装する部分部品と DOM
界面を通じてシームレスに探索・操作することができるように協調することができるべきです。</p><p>物体に関する通常の<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">型変換<rt xmlns="http://www.w3.org/1999/xhtml">typecast</rt></rubyb>操作は与えられた文書型について遺物 code
が期待する界面に対応するべきです。実行時に結合された物体の複数の DOM
特別化から選択するためには型変換技術は適当ではないかもしれません。
すべてが束縛の物体模型で定義された通り同じ物体の一部ではないかもしれないからです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> 衝突が一番はっきりしているのは <code class="DOM">Document</code> 物体で、
同じ種類の語彙で構成される文書では、どの要素も <code class="DOM">Document</code>
物体と所有者が同じですから、特別化サービスや特別化節の構築を
<code class="DOM">Document</code> に気兼ねなく頼むことができます。
ところが、異なる種類の語彙が混ざっている場合は、
それぞれの要素が異なる特別化サービスや API
を期待するのですが、文書階層の所有者や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">根</anchor>はあくまで1つしかないのです。</p></section></section></body></html>