Autor: U. Altmann, Institut für Medizinische Informatik, Justus-Liebig-Universität Gießen
Heinrich-Buff-Ring 44, 35392 Gießen
e-Mail: Udo.Altmann@informatik.med.uni-giessen.de
Quellenhinweis: Mit dieser Einführung soll ein Überblick über die vorhandenen Standards im Bereich DOM sowie deren Anwendung gegeben werden. Die Textpassagen sind teilweise Übersetzungen aus den W3C-Standards. Aus diesen wurden auch die Abbildungen entnommen. Die Standards wurden, soweit sie in der Einführung benötigt werden als Kopie heruntergeladen und werden lokal referenziert. Verbindlich sind in jedem Fall die englische Originale unter http://www.w3.org/DOM
Verarbeiten und/oder Modifizieren von Dokumenten, z.B.
Die Standards können aus Sicht der Architektur in Standards für bestimmte Anwendungsbereiche (Module) unterteilt werden, die wiederum in verschiedenen Leveln spezifiziert werden. (Referenz)
Die Module werden in unterschiedlichen (3) Leveln eingeführt, bzw. weiterentwickelt, wobei ein nicht normativer Level 0 den vorherigen in den Browsern implementierten Status beschreibt. Einen Überblick gibt das "Activity Statement". Den aktuellen Überblick gibt "DOM Technical Reports" wieder.
DOM repräsentiert Dokumente als Hierarchie von Knoten-(Node-)Objekten. Knoten können Kind-(Child-)Knoten haben, andere sind Blatt-(Leaf-)Knoten. Die folgende Abbildung zeigt die Darstellung eines XML/HTML-Dokuments als Hierarchie entsprechender Knoten.
<TABLE> <TBODY> <TR> <TD>Shady Grove</TD> <TD>Aeolian</TD> </TR> <TR> <TD>Over the River, Charlie</TD> <TD>Dorian</TD> </TR> </TBODY> </TABLE>
Die folgende Liste zeigt, welche Knotentypen es gibt und welche Kindknoten vorkommen können.
Des weiteren gibt es noch Knotenlisten (NodeList) und Abbildungen von Knoten auf Namen (NamedNodeMap). NodeLists werden benutzt, um Ergebnisse von Aufrufen wie "getChildNodes" und "getElementsByTagName" zu verarbeiten. Mit NamedNodeMaps können ungeordnete Knotenmengen wie Attribute eines Elements über deren Namen angesprochen werden.
Im eigentlichen Sinn werden keine Objekte direkt definiert, sondern unabhängig davon sogenannte Interfaces. Es handelt sich dabei um die oben genannten Knotenobjekte, die alle Erweiterungen des Node-Interfaces sind sowie um die Interfaces NodeList und NamedNodeMap. Text, Kommentar und CDATA-Section erben ihre Eigenschaften vom CharacterData Interface.
Es ist klar, daß alle Knoten-Interfaces als Erweiterung des Node bestimmte Eigenschaften und Methoden gemeinsam besitzen sowie sich je nach Knotentyp nach zusätzlichen Eigenschaften und Methoden unterscheiden.
Anhand von Beispielen sollen ein Einblick in die Objekte und Methoden des DOM-Levels 1 gegeben werden. Bereits im Level 1 werden die meisten Definitionen festgelegt. Viele Module bauen auf den sogenannten "Core" Spezifikationen auf. Während die Core-Spezifikationen relativ "atomare" Operationen bereitstellen, bieten viele Module Methoden für komplexere Abläufe an. DOM-Level 1 ist der Spezifikationsgrad, der am ehesten von Anwendungen wie Web-Browsern erwartet werden kann.
DOM-Parser verarbeiten XML-Dokumente mit dem Ziel, eine DOM-Struktur (Tree-based) aufzubauen. Dazu müssen sie das gesamte Dokument einlesen. Bei großen Dokumenten kann das sowohl zu (Haupt-)Speicher als auch zu Performanceproblemen führen, da eine entsprechend große Struktur im Hauptspeicherbereich gehalten werden muß.
Alternativ gibt es daher das SAX (Simple API for XML) Verarbeitungsmodell, das als ereignisbasiert (event-based) bezeichnet wird. Hierbei wird das XML-Dokument mit sog. SAX-Parsern seriell verarbeitet, wobei das Auffinden von XML-Strukturen (im Sinne von Elementen, Entities, Text, ...) Ereignisse auslöst. Diese Ereignisse werden durch Methoden "abgefangen" und entsprechend verarbeitet.
Diese Methoden wurden ursprünglich für JAVA beschrieben, sind inzwischen aber vergleichbar zum DOM in einer Reihe weiterer Programmiersprachen implementiert.
SAX ist ein Open Source Standard. Die Web-Seite ist http://www.saxproject.org/
An dieser Stelle wird die Funktionsweise nur anhand einiger (öffentlich verfügbarer) Quellen aus dem Apache-Projekt dargestellt.