<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=Document_Object_Model</id>
	<title>Document Object Model - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=Document_Object_Model"/>
	<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=Document_Object_Model&amp;action=history"/>
	<updated>2026-05-14T21:42:06Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Demo Wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://demowiki.knowlus.com/index.php?title=Document_Object_Model&amp;diff=763&amp;oldid=prev</id>
		<title>imported&gt;Invisigoth67: typo, form</title>
		<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=Document_Object_Model&amp;diff=763&amp;oldid=prev"/>
		<updated>2025-07-19T11:07:36Z</updated>

		<summary type="html">&lt;p&gt;typo, form&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Datei:Dom-inspector-baumstruktur.png|mini|DOM-Knotenbaum einer fiktiven Webseite]]&lt;br /&gt;
&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;Document Object Model&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;DOM&amp;#039;&amp;#039;&amp;#039;, [[Englische Sprache|engl]]. für &amp;#039;&amp;#039;Dokumenten-Objekt-Modell&amp;#039;&amp;#039;) ist eine Spezifikation einer [[Programmierschnittstelle]], welche [[Hypertext Markup Language|HTML]]- oder [[Extensible Markup Language|XML]]-[[Datei|Dokumente]] als eine [[Baum (Graphentheorie)|Baumstruktur]] darstellt, in der jeder [[Knoten (Graphentheorie)|Knoten]] ein [[Objekt (Programmierung)|Objekt]] ist, welches einen Teil des Dokumentes repräsentiert, z.&amp;amp;nbsp;B. einen Absatz, eine Überschrift, ein Video oder etwa eine Tabellenzelle. Die Schnittstelle ist plattform- und programmiersprachenunabhängig und erlaubt damit standardisiert, die Struktur und das Layout eines Dokumentes zu verändern. Im [[Webbrowser]] bildet dies einen wichtigen Baustein für dynamische Webseiten.&lt;br /&gt;
&lt;br /&gt;
Das DOM wurde ursprünglich vom [[World Wide Web Consortium]] spezifiziert, heutzutage ist die autoritative Quelle die [[WHATWG]]. Den Veränderungen in der Standardisierung liegt zugrunde, dass Standards oftmals nachträglich definiert wurden, während [[Browser|Webbrowser]] bereits Implementierungen enthielten.&lt;br /&gt;
&lt;br /&gt;
Seit dem Ende der sogenannten [[Browserkrieg|Browser-Wars]] hat sich der Ansatz etabliert, die Standardisierung in offiziellen Dokumenten und die Implementierung in verbreiteten Web-Browsern zu parallelisieren, in der Praxis also die endgültige Standardisierung der Implementierung nachzuordnen.&lt;br /&gt;
&lt;br /&gt;
Eine [[Implementierung]], die der DOM-Spezifikation genügt, besteht im Sinne der [[Objektorientierte Programmierung|objektorientierten Programmierung]] aus einem Satz von [[Klasse (Objektorientierung)|Klassen]] zusammen mit deren [[Methode (Programmierung)|Methoden]] und Attributen, wobei es eine [[Dualität]] zwischen Attributen in serialisierten Dokumenten und Eigenschaften im DOM gibt. Dies nennt sich auch &amp;quot;Attribute reflection&amp;quot;&amp;lt;ref&amp;gt;https://developer.mozilla.org/de/docs/Web/API/Document_Object_Model/Reflected_attributes&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
DOM ist ursprünglich unter dem Einfluss von mindestens zwei Entwicklungen entstanden, die seit der Jahrtausendwende die Entwicklung von [[Web-Dokument]]en und Webbrowsern prägten. Beiden liegt die Notwendigkeit zugrunde, auf die strukturierten Daten in [[Hypertext Markup Language|HTML]]- und [[Extensible Markup Language|XML]]-Dokumenten einfach und einheitlich zugreifen zu können.&lt;br /&gt;
&lt;br /&gt;
Mitte der 1990er Jahre, als das [[World Wide Web]] an Popularität zunahm, wurde die [[Skriptsprache]] [[JavaScript]] erfunden und gängige [[Webbrowser]] enthielten seitdem [[Interpreter]], die solche [[Skriptsprache|Scripte]] ausführen. JavaScript definierte rudimentäre Möglichkeiten zum Zugriff auf das HTML-Dokument und zur [[Ereignis (Programmierung)|Ereignisbehandlung]]. Später erfanden verschiedene Browserhersteller unterschiedliche Modelle für &amp;#039;&amp;#039;[[dynamisches HTML]]&amp;#039;&amp;#039; (DHTML), die eine umfassendere Änderung der Struktur und des Aussehens des Dokuments ermöglichten, während das Dokument im Browser angezeigt wird. Diese Unterschiede machten allerdings die Arbeit für Webentwickler, welche dynamisches HTML nutzen wollten, zu einer äußerst mühsamen Angelegenheit, da sie oft praktisch gezwungen waren, für jeden zu unterstützenden Browser eine eigene Version zu schreiben.&amp;lt;ref name=&amp;quot;CRE146:JavaScript ab 01:00:45 (Podcast)&amp;quot;&amp;gt;[http://cre.fm/cre146 JavaScript] CRE146 (Podcast; ab 01:00:45)&amp;lt;/ref&amp;gt; Die ersten DOM-Standards des [[W3C]] sind daher Versuche, die verschiedenen [[proprietär]]en JavaScript- und DHTML-Techniken, die während der Zeit der [[Browserkrieg]]e entstanden, zusammenzuführen, zu standardisieren und letztlich abzulösen. Dies ist so weit gelungen, dass DOM heutzutage eine zentrale Bedeutung bei der JavaScript-Programmierung einnimmt.&lt;br /&gt;
&lt;br /&gt;
Gleichzeitig entstand XML als allgemeines Austauschformat zur menschenlesbaren Darstellung von strukturierten Daten, das an den Erfolg von HTML anknüpfte. Zur Verarbeitung von XML-Dokumenten war eine verständliche, leistungsfähige und programmiersprachenübergreifende Schnittstelle nötig. DOM bietet eine solche und definiert darüber hinaus zusätzliche Schnittstellen für einen komfortablen Umgang mit XML-Dokumenten.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen anhand eines Beispiels ==&lt;br /&gt;
Folgender HTML-Code definiert eine Tabelle mit dem Element &amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt; und verschiedenen Unterelementen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;thead&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;th&amp;gt;Vorname&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;/thead&amp;gt;&lt;br /&gt;
  &amp;lt;tbody&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Donald&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Duck&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;/tbody&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sieht es im Browser aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Dom-tabelle-so-siehts-aus.png|So sieht es im Browser aus]]&lt;br /&gt;
&lt;br /&gt;
Das DOM repräsentiert das &amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt;-Element und dessen Unterelemente in der folgenden Baumstruktur:&lt;br /&gt;
&lt;br /&gt;
[[Datei:DOM Beispielbaum.svg|DOM Baumstruktur zu den Unterelementen]]&lt;br /&gt;
&lt;br /&gt;
An diesem Beispiel lässt sich der prinzipielle Aufbau des Objektmodells diskutieren: Dokumente werden logisch wie ein Stammbaum dargestellt. Knoten (&amp;#039;&amp;#039;nodes&amp;#039;&amp;#039;) stehen über „Verwandtschaftsbeziehungen“ zueinander in Verbindung.&lt;br /&gt;
&lt;br /&gt;
=== Arten von Beziehungen ===&lt;br /&gt;
Die vorliegende Struktur wird im Objektmodell durch die folgenden Beziehungen charakterisiert:&lt;br /&gt;
&lt;br /&gt;
* Der Wurzelknoten (&amp;#039;&amp;#039;root&amp;#039;&amp;#039;) &amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt; hat als Kinder (&amp;#039;&amp;#039;children&amp;#039;&amp;#039;) die Elementknoten &amp;lt;code&amp;gt;thead&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;tbody&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Der &amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt;-Elementknoten ist umgekehrt ein Elternteil (&amp;#039;&amp;#039;parent&amp;#039;&amp;#039;) von &amp;lt;code&amp;gt;thead&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;tbody&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Knoten mit gemeinsamem Elternteil (zum Beispiel die beiden &amp;lt;code&amp;gt;th&amp;lt;/code&amp;gt;-Elementknoten) werden Geschwister (&amp;#039;&amp;#039;siblings&amp;#039;&amp;#039;) genannt.&lt;br /&gt;
&lt;br /&gt;
Ausgehend von einem beliebigen Knoten ist jeder andere Knoten über diese Verwandtschaftsbeziehungen erreichbar.&lt;br /&gt;
&lt;br /&gt;
=== Arten von Knoten ===&lt;br /&gt;
Die wichtigsten Knotentypen in DOM sind:&lt;br /&gt;
* Ein Dokumentknoten stellt die gesamte Baumstruktur dar.&lt;br /&gt;
* Ein Dokumentfragmentknoten stellt einen Teil der Baumstruktur dar.&lt;br /&gt;
* Ein Elementknoten entspricht exakt einem Element in [[Hypertext Markup Language|HTML]] oder [[Extensible Markup Language|XML]].&lt;br /&gt;
* Ein Attributknoten entspricht exakt einem Attribut in HTML oder XML.&lt;br /&gt;
* Ein Textknoten stellt den Textinhalt eines Elements dar.&lt;br /&gt;
&lt;br /&gt;
Attributknoten sind eine besondere Knotenart, denn sie kommen nicht als Knoten in der Baumstruktur vor, die vor allem durch Elementknoten gebildet wird. Attributknoten sind demnach keine „Kinder“ von Elementknoten, sondern Eigenschaften von ihnen.&lt;br /&gt;
&lt;br /&gt;
=== Verarbeitung eines Dokuments ===&lt;br /&gt;
Im ersten Schritt wird ein bestehendes Dokument durch das Programm eingelesen und ein Dokument-Objekt erzeugt. Anhand dieses Objekts kann mittels der Methoden des [[Programmierschnittstelle|API]] auf die Inhalte, Struktur und Darstellung zugegriffen werden.&lt;br /&gt;
&lt;br /&gt;
Insbesondere erlaubt DOM&lt;br /&gt;
* die Navigation zwischen den einzelnen Knoten eines Dokuments,&lt;br /&gt;
* das Erzeugen, Verschieben und Löschen von Knoten sowie&lt;br /&gt;
* das Auslesen, Ändern und Löschen von Textinhalten.&lt;br /&gt;
&lt;br /&gt;
Am Ende der Verarbeitung kann aus dem Dokument-Objekt durch so genannte [[Serialisierung]] ein neues XML- oder HTML-Dokument generiert werden.&lt;br /&gt;
&lt;br /&gt;
== Standardisierung ==&lt;br /&gt;
[[Datei:WHATWG DOM.png|mini|WHATWG DOM]]&lt;br /&gt;
DOM ist seit 1998 ein Standard des [[World Wide Web Consortium|W3C]] und wurde seitdem mehrfach aktualisiert und erweitert. Es existieren mehrere Versionen (Levels) jeweils mit verschiedenen Modulen:&lt;br /&gt;
&lt;br /&gt;
=== DOM Level 0 ===&lt;br /&gt;
Dieses Level wurde nie formal spezifiziert. &amp;#039;&amp;#039;Level 0&amp;#039;&amp;#039; bezeichnet die mittels [[JavaScript]] nutzbaren Techniken zum Zugriff auf HTML-Dokumente. Diese wurden von [[Webbrowser]]n wie [[Internet Explorer]] und [[Netscape Navigator]] vor der Standardisierung von DOM eingeführt.&lt;br /&gt;
&lt;br /&gt;
=== DOM Level 1 ===&lt;br /&gt;
Veröffentlicht Ende 1998.&lt;br /&gt;
* &amp;#039;&amp;#039;DOM Core&amp;#039;&amp;#039; (DOM-Kern) definiert das Bewegen im DOM-Baum, die Manipulation der Knoten, inklusive des Einfügens neuer Elemente und des Setzens von Attributen.&lt;br /&gt;
* &amp;#039;&amp;#039;DOM HTML&amp;#039;&amp;#039; ist die Erweiterung zum Zugriff auf HTML-Dokumente. Es standardisiert und vervollständigt die bereits verbreitete Praxis, die auf den JavaScript-Spezifikationen von [[Netscape Communications|Netscape]] bzw. [[Microsoft]] [[JScript]] basiert.&lt;br /&gt;
&lt;br /&gt;
=== DOM Level 2 ===&lt;br /&gt;
Veröffentlicht Ende 2000.&lt;br /&gt;
* &amp;#039;&amp;#039;DOM Core&amp;#039;&amp;#039;: u.&amp;amp;nbsp;a. Erweiterung um XML-[[Namensraum]]-Unterstützung&lt;br /&gt;
* &amp;#039;&amp;#039;DOM HTML&amp;#039;&amp;#039;: u.&amp;amp;nbsp;a. Ausweitung auf [[Extensible Hypertext Markup Language|XHTML]]-Dokumente, Anpassung an DOM 2 Core&lt;br /&gt;
* &amp;#039;&amp;#039;DOM Style&amp;#039;&amp;#039; und &amp;#039;&amp;#039;DOM CSS&amp;#039;&amp;#039; ermöglichen das dynamische Auslesen, Hinzufügen und Ändern der Formatierung bzw. des Layouts des Dokuments über [[Stylesheet]]s, insbesondere [[Cascading Style Sheets]] (CSS).&lt;br /&gt;
* &amp;#039;&amp;#039;DOM Views&amp;#039;&amp;#039; erlaubt den Zugriff auf Informationen konkreter Wiedergabearten des Dokuments (zum Beispiel der grafischen Darstellung im Webbrowser). Das wird vor allem zusammen mit DOM CSS benutzt, um die tatsächlichen CSS-Eigenschaftswerte von gewissen Elementen in Erfahrung zu bringen (z.&amp;amp;nbsp;B. „Welche Hintergrundfarbe hat diese Überschrift?“).&lt;br /&gt;
* &amp;#039;&amp;#039;DOM Events&amp;#039;&amp;#039; standardisiert die Verarbeitung von [[Ereignis (Programmierung)|Ereignissen]] im Dokument, zum Beispiel Benutzeraktionen. Wird vor allem im Zusammenhang mit JavaScript bei der Darstellung von HTML-Dokumenten in Webbrowsern verwendet. Angelehnt an die Modelle der Ereignis-Behandlung des Netscape Navigators und des Internet Explorers für HTML-Dokumente.&lt;br /&gt;
* &amp;#039;&amp;#039;DOM Traversal&amp;#039;&amp;#039; und &amp;#039;&amp;#039;DOM Range&amp;#039;&amp;#039;: Durchlaufen des Knotenbaums anhand von bestimmten Auswahlkriterien, Arbeiten mit Bereichen im Dokument, die bestimmte Elemente und Textknoten umfassen &amp;lt;!-- ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DOM Level 3 ===&lt;br /&gt;
Veröffentlicht April 2004.&lt;br /&gt;
* &amp;#039;&amp;#039;DOM 3 Core&amp;#039;&amp;#039;: umfassende Erweiterung, u.&amp;amp;nbsp;a. verbesserte [[Ausnahmebehandlung]] und Umgang mit [[Zeichenkodierung]]en&lt;br /&gt;
* &amp;#039;&amp;#039;DOM 3 Load and Save&amp;#039;&amp;#039; ermöglicht die Serialisierung von Dokumenten oder Dokumentteilen sowie das [[Parser|Parsen]] von XML-Dokumenten in Zeichenketten in Dokument-Objekte. Zudem können XML-Dokumente über [[Hypertext Transfer Protocol|HTTP]] versendet und abgerufen werden, wie es mit der bekannteren [[XMLHttpRequest]]-Technik möglich ist.&lt;br /&gt;
* &amp;#039;&amp;#039;DOM 3 XPath&amp;#039;&amp;#039; erlaubt das Auswählen von Knoten anhand von [[XPath]]-Ausdrücken.&lt;br /&gt;
* &amp;#039;&amp;#039;DOM 3 Events&amp;#039;&amp;#039; erweitert DOM 2 Events u.&amp;amp;nbsp;a. um Tastatur-Ereignisse.&lt;br /&gt;
* &amp;#039;&amp;#039;DOM 3 Validation&amp;#039;&amp;#039; erlaubt das Prüfen, ob nach einer dynamischen Änderung (Hinzufügen oder Entfernen von Knoten) das DOM-Dokument [[valide]] bleibt.&lt;br /&gt;
* &amp;#039;&amp;#039;DOM 3 Views and Formatting&amp;#039;&amp;#039; erlaubt es, dynamisch auf den Inhalt, Struktur und Style zuzugreifen und diese zu ändern.&lt;br /&gt;
* &amp;#039;&amp;#039;DOM 3 Abstract Schemas&amp;#039;&amp;#039; &amp;lt;!-- ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Simple API for XML]] (SAX)&lt;br /&gt;
* [[Xerces]], [[JDOM]], [[dom4j]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.w3.org/DOM/ Website beim W3C] (englisch)&lt;br /&gt;
* [http://www.w3-de.de/W3C/DOM/ W3C-Übersetzung] zu Testsuiten (deutsch)&lt;br /&gt;
* [[Mario Jeckle]]: [https://web.archive.org/web/20161130170758/http://jeckle.de/vorlesung/xml/script.html Skript zur Vorlesung XML: DOM]&lt;br /&gt;
* [http://www.data2type.de/xml-xslt-xslfo/xml/xml-in-a-nutshell/document-object-model/ DOM Einführung] bei data2type (deutsch)&lt;br /&gt;
* [http://www.data2type.de/xml-xslt-xslfo/xml/xml-in-a-nutshell/dom-referenz/ DOM-Referenz] bei data2type (deutsch)&lt;br /&gt;
* [http://krum.rz.uni-mannheim.de/web-tech99w/sess-5.html Folienvortrag]&lt;br /&gt;
* [http://xml.com/pub/rg/DOM_Tutorials Sammlung von Links zu Fachartikeln] (englisch)&lt;br /&gt;
* [https://web.archive.org/web/20190326104821/http://xml-rss.de/XML-RSS-Feed-mit-PHP/XML-RSS-Feed-mit-PHP-und-DOM-erstellen.htm Praktisches Anwendungsbeispiel DOM mit PHP] – Erstellung eines validen RSS-Feed mit DOM und PHP&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Normdaten|TYP=s|GND=4680714-7}}&lt;br /&gt;
{{Navigationsleiste W3C-Standards}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Beschreibungssprache]]&lt;br /&gt;
[[Kategorie:JavaScript-Programmierschnittstelle]]&lt;br /&gt;
[[Kategorie:XML]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Invisigoth67</name></author>
	</entry>
</feed>