DOMに関するいくつかの説明


25

私はDOMを理解しようとしてきましたが、それが何であるかについてはかなりのアイデアを持っていますが、特定できないアイデアがあります。DOMが何であると思うかをリストし、私の質問はインラインになります。

  1. DOMは、Webページの完全にオブジェクト指向の表現です。W3C DOM標準は、最新のブラウザのほとんどに実装されているDOMの基礎を形成しています。

    それでは、DOMはXML / HTMLドキュメントがオブジェクトモデルとしてどのように表現されるかについて話しますか?

  2. DOMは、ドキュメントをツリーまたはグローブとして実装する必要があることを指定していません。また、オブジェクト間の関係を実装する方法も指定していません。

    ドキュメントは他のどのように表現できますか?

  3. このようなことをするとき-

    document.write('welcome to my home page!');

    ドキュメントオブジェクトはDOMによって提供されます。書き込みメソッドは、DOMによってJavaScriptに公開されるインターフェイスです。

    オブジェクトとそのメソッドは、DOMパーサーによってJavaScriptオブジェクトとして作成され、JavaScriptエンジンに提示されますか?または、DOM解析エンジン内のオブジェクトとメソッドは、独自のネイティブ言語ですか?JavaScriptエンジンにさらされていますか?その場合、JavaScriptから母国語への翻訳の責任は何ですか?

  4. 言語バインディングとは何ですか?

    言語バインディングは、DOM仕様の各インターフェイスを実装する、問題の言語固有のオブジェクトのセットです。

    開発者は、DOM仕様のIDL(インターフェイス定義言語)に従うだけで、DOMから自分の言語への言語バインディングを作成できます。

    たとえば、DOM解析エンジンがC ++などで実装されている場合、IDLに従って言語バインディングを作成するとき、特定の言語、つまりDOM解析エンジンが構築されているC ++でオブジェクトを作成するだけです。


@apsillers「DOMは、XML / HTMLドキュメントオブジェクトモデルとしてどのように表現されるかについて話しますか?」投稿を編集しました。
user1720897

コメントでできることは答えます。3と4は、ブラウザを開発している人が実際に答えてくれるかもしれないので、答えの数に影響を与えたくありません。1-ブラウザーはドキュメントの現在の状態を理解しています。これをDOMと呼ぶことができます。あるいは、DOMを公開する標準インターフェースを呼び出して、ドキュメントの状態を照会および変更できます。
ジョージマウアー

2-ステートメントは、表現ではなく実装に関するものです。誤解しない限り、「表現」はツリーでなければなりません。舞台裏の実装にはありません。
ジョージマウアー

回答:


19

以下は、関連する仕様と参考文献の私の最高の読書です。(DOMレベルと関連リンクに関する Mozillaのアブストラクトが特に有用であることがわかりました。)他からの修正または説明を奨励します。

それでは、DOMはXML / HTMLドキュメントがオブジェクトモデルとしてどのように表現されるかについて話しますか?

はい。DOMレベル1仕様には、コアHTMLの 2つの部分がありますコア DOM仕様では説明し、一般的な任意の構造化文書を表現するために使用できるDOMを。HTML DOMの仕様では、記述し、特にHTML文書を記述するために、コアDOMを使用する方法と、HTML固有のインタフェースが含まれています。

DOMは、ドキュメントをツリーまたはグローブとして実装する必要があることを指定していません。また、オブジェクト間の関係を実装する方法も指定していません。ドキュメントは他のどのように表現できますか?

DOM Core 、ドキュメントがツリーであると想定しています。Nodeインターフェースは、「全体[DOM]のために...主なデータ型。これは、内の1つのノードを表しているドキュメントツリーを。」Node子供、兄弟、および親ノードにアクセスするためのいくつかの特性(例えば、持ってparentNodefrstChildツリー構造を意味し、など)。フラットツリーまたは線形ツリー(リンクリストなど)を使用できますが、それでも何らかの形式のツリーになります。

George Mauerがコメントで指摘しているように、おそらくあなたは、特定の実装の基礎となるモデルがツリーである必要はないことを意味します。それは本当です。実装がDOM仕様で約束されている機能を提供する限り、その機能を提供するために好きな構造を使用できます。

DOM解析エンジン内のオブジェクトとメソッドは、独自のネイティブ言語ですか?

一般的に、はい。ほとんどのブラウザーでは、DOMはCなどの低レベル言語で実装され、ブラウザーは実際の表現を操作できるJavaScript環境にバインディングを提供します。実際、「DOMをJavascriptに移動する」という質問の意味を見ると、、GoogleはネイティブJavaScript DOM実装への切り替えに関心があることがわかります(おそらく、C ++関数、そのC ++関数の重複JavaScriptラッパーの両方を必要としないようにするため、おそらくパフォーマンス向上のためにも)。

JavaScriptから母国語への翻訳の責任は何ですか?

私はこのテーマについて少し混乱していますが、JavaScript DOMバインディングが呼び出されると、JavaScript実行環境(Cのような低レベル言語で実装されている)が関連するDOM関数を呼​​び出します(C / C ++で記述)DOMを操作します。

それよりも深くしたい場合は、実際にブラウザを作っている人と話をする必要があります。

つまり、IDLに従って言語バインディングを作成するとき、特定の言語、つまりDOM解析エンジンが組み込まれているC ++でオブジェクトを作成しているだけです。

はい。DOMのIDLは言語に依存しないため、任意の言語で実装できます。「DOM実装の記述」とは、DOM仕様で説明されているIDLインターフェイスに準拠するコードを(特定の言語で)記述することを意味します。


バインディングには2つのことが必要だと思います。参照およびネイティブ実装からイベントを取得する何らかの方法を介してネイティブランタイムを呼び出します。通常、コンソールでログを記録することで、ブラウザのネイティブコードラッパーにすぎないメソッドを実際に確認できます。例console.log(document.write);またはconsole.log(document.constructor);- .toString()関数テキストを提供しないブラウザにログパラメータを追加します。オブジェクトは必ずしもネイティブコードにミラー化された同等物を持っているとは限りません。また、ほとんどのDOMオブジェクトプロパティは、実際には関連する動作を持つゲッターです。
エリックReppen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.