Ein paar Erläuterungen zum DOM

25

Ich habe versucht, das DOM zu verstehen, und obwohl ich eine gute Vorstellung davon habe, was es ist, gibt es bestimmte Ideen, die ich einfach nicht festhalten kann. Ich werde auflisten, was ich denke, das DOM ist und meine Fragen werden inline sein.

  1. Das DOM ist eine vollständig objektorientierte Darstellung der Webseite. Der W3C-DOM-Standard bildet die Grundlage für das in den meisten modernen Browsern implementierte DOM.

    Spricht das DOM also darüber, wie ein XML / HTML-Dokument als Objektmodell dargestellt wird?

  2. Das DOM gibt weder an, dass Dokumente als Baum oder Wald implementiert werden müssen, noch gibt es an, wie die Beziehungen zwischen Objekten implementiert werden sollen.

    Auf welche andere Weise kann das Dokument dargestellt werden?

  3. Wenn Sie so etwas tun -

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

    Das Dokumentobjekt wird vom DOM bereitgestellt. Die Schreibmethoden sind die Schnittstellen, die vom DOM für JavaScript verfügbar gemacht werden.

    Also werden die Objekte und ihre Methoden vom DOM-Parser als JavaScript-Objekte erstellt und dann der JavaScript-Engine präsentiert? Oder sind die Objekte und Methoden in der DOM-Parsing-Engine in ihrer eigenen Muttersprache? Und ist die JavaScript-Engine ausgesetzt? Wenn ja, was ist dann für die Übersetzung von JavaScript in die Muttersprache verantwortlich?

  4. Was sind Sprachbindungen?

    Die Sprachbindung ist die Menge der Objekte, die für die betreffende Sprache typisch sind und die die einzelnen Schnittstellen in der DOM-Spezifikation implementieren.

    Entwickler können Sprachbindungen vom DOM zu ihrer Sprache erstellen, indem sie einfach der IDL (Interface Definition Language) in der DOM-Spezifikation folgen.

    Wenn die DOM-Parsing-Engine also in C ++ implementiert ist, bedeutet dies, dass Sie beim Erstellen von Sprachbindungen anhand der IDL nur Objekte in der spezifischen Sprache erstellen, dh in C ++, mit der Ihre DOM-Parsing-Engine erstellt wurde?

user1720897
quelle
@apsillers Es sollte „Das Gleiche gilt für den DOM darüber reden , wie ein XML / HTML - Dokument gewesen dargestellt wird als ein Objektmodell?“ Ich habe den Beitrag bearbeitet.
user1720897
Ich werde in den Kommentaren antworten, was ich kann. 3 & 4 könnte jemanden brauchen, der Browser entwickelt, um wirklich zu antworten, und ich möchte die Anzahl der Antworten nicht beeinflussen. 1 - Der Browser kennt den aktuellen Status des Dokuments. Sie können dies als DOM bezeichnen. Alternativ können Sie das DOM als die Standardschnittstellen bezeichnen, über die Sie den Status des Dokuments abfragen und ändern können.
George Mauer
2 - Die Aussage bezieht sich auf die Implementierung, nicht auf die Repräsentation. Wenn ich mich nicht irre, muss die Darstellung ein Baum sein. Die Implementierung hinter den Kulissen funktioniert nicht.
George Mauer

Antworten:

19

Was folgt, ist meine beste Lektüre der relevanten Spezifikationen und Referenzen. (Ich fand Mozillas Abstracts zu DOM-Levels und den dazugehörigen Links besonders hilfreich.) Ich ermutige andere zu Korrekturen oder Klarstellungen.

Spricht das DOM also darüber, wie ein XML / HTML-Dokument als Objektmodell dargestellt wird?

Ja. Die DOM Level 1-Spezifikation besteht aus zwei Teilen: Core und HTML . Die Core- DOM-Spezifikation beschreibt ein allgemeines DOM, mit dem jedes strukturierte Dokument dargestellt werden kann. Die HTML- DOM-Spezifikation beschreibt die Verwendung des Core-DOM zur spezifischen Beschreibung von HTML-Dokumenten und enthält HTML-spezifische Schnittstellen.

Das DOM gibt weder an, dass Dokumente als Baum oder Wald implementiert werden müssen, noch gibt es an, wie die Beziehungen zwischen Objekten implementiert werden sollen. Auf welche andere Weise kann das Dokument dargestellt werden?

DOM Core geht davon aus, dass das Dokument ein Baum ist. Die NodeSchnittstelle ist der "... primäre Datentyp für das gesamte [DOM]. Sie repräsentiert einen einzelnen Knoten in der Dokumentstruktur ." Nodehat mehrere Eigenschaften für den Zugriff auf Kinder, Geschwister und Eltern - Knoten (zB parentNode, frstChildusw.) , die eine Baumstruktur impliziert. Sie könnten einen flachen Baum oder einen linearen Baum (z. B. eine verknüpfte Liste) verwenden, aber es wird immer noch eine Form von Baum sein.

Wie George Mauer in den Kommentaren ausführt, meinen Sie vielleicht, dass das zugrunde liegende Modell einer bestimmten Implementierung kein Baum sein muss. So viel ist wahr; Solange Ihre Implementierung die in der DOM-Spezifikation versprochene Funktionalität bietet, können Sie eine beliebige Struktur verwenden, um diese Funktionalität bereitzustellen.

Sind die Objekte und Methoden in der DOM-Parsing-Engine in ihrer eigenen Muttersprache?

Im Allgemeinen ja . In den meisten Browsern ist das DOM in einer niedrigeren Sprache wie C implementiert, und der Browser stellt der JavaScript-Umgebung Bindungen zur Verfügung, mit denen die tatsächlichen Darstellungen bearbeitet werden können. In der Tat, wenn Sie sich die Frage ansehen, Bedeutung von "Verschieben von DOM in Javascript"? Sie werden sehen , dass Google bei der Umstellung auf eine native JavaScript DOM - Implementierung (wahrscheinlich sowohl ein C ++ Funktion zu vermeiden , benötigt interessiert ist , und ein Duplikat JavaScript - Wrapper für die C ++ Funktion, möglicherweise auch für Performance - Gewinne).

Was ist für die Übersetzung von JavaScript in die Muttersprache verantwortlich?

Bei diesem Thema bin ich etwas unsicherer, aber ich verstehe, dass die JavaScript-Ausführungsumgebung (die selbst in einer niedrigeren Sprache wie C implementiert ist) beim Aufrufen einer JavaScript-DOM-Bindung die entsprechende DOM-Funktion aufruft (in C / C ++ geschrieben), um das DOM zu manipulieren.

Wenn Sie tiefer gehen möchten, müssen Sie mit jemandem sprechen, der tatsächlich Browser herstellt.

Bedeutet das, dass Sie beim Erstellen von Sprachbindungen anhand der IDL nur Objekte in der spezifischen Sprache erstellen, dh in C ++, mit der Ihre DOM-Parsing-Engine erstellt wurde?

Ja. Die IDL des DOM ist sprachunabhängig, sodass Sie sie in jeder Sprache implementieren können. "Schreiben einer DOM-Implementierung" bedeutet das Schreiben von Code (in einer bestimmten Sprache), um den in den DOM-Spezifikationen beschriebenen IDL-Schnittstellen zu entsprechen.

Apsillers
quelle
Ich glaube, Bindungen müssten zwei Dinge beinhalten. Aufrufen der nativen Laufzeit über Verweise und eine Möglichkeit zum Aufnehmen von Ereignissen aus der nativen Implementierung. Sie können tatsächlich sehen, welche Methoden nur native Code-Wrapper in Browsern sind, indem Sie sie in der Regel in der Konsole protokollieren. Beispiel: console.log(document.write);oder console.log(document.constructor);- .toString()Fügen Sie den Protokollparameter in Browsern hinzu, in denen der Funktionstext nicht angezeigt wird. Objekte müssten nicht unbedingt eine gespiegelte Entsprechung im systemeigenen Code haben. Außerdem sind die meisten DOM-Objekteigenschaften Getter mit dem zugehörigen Verhalten.
Erik Reppen