3. Wie arbeitet DOM ?



>Das Prinzip von DOM ist die Abbildung der log. Struktur eines XML-Dokumentes auf eine hierarchivische Baumstruktur, in welcher jedes einzelne Objekt ansprechbar ist In der untersten Instanz ist jedes Ogjekt ein Knoten, welcher durch die Attribute NodeName, NodeValue und NodeAttr spezifiziert ist. Daneben existiert noch ein objektorientierter Ansatz,in dem jedes Tag entsprechend seiner Funktion gekapselt ist, wie z.Bsp: Create,Append, Remove und Replace


die allgemeine Baumstruktur


Baumstruktur
Der gesamte Baum befindet sich im Arbeitsspeicher. Somit arbeitet man mit virtuellen Dokumenten,welche erst nach der Speicherung endgültig übernommen werden. Nachteilig hierbei ist jedoch der hohe RAM-Speicherbedarf. Diese Änderungen sind seit DOMLevelCore3 durch das LS-Modul speicherbar. Desweiteren ist mit diesem Model der Baum an sich speicherbar.



Ein kurzes Beispiel soll dies demonstrieren:

Auf der linken Seite steht ein Auszug aus einem XML-Dokument, rechts die entsprechende
DOM-Abbildung in eine Baumstruktur.

beispiel



Die DOM - Objektstruktur


domknoten
Der Wurzelknotren und somit die Basis der Baumstruktur ist der Knoten Document. Jedes weitere Objekt bildet einen Unterknoten dieses Document-Knotens.




Die DOM - Schnittstellen




Die Schnittstellen sind die in Core und dessen Module zusammengefassten Knotendefinitionen. Die Module setzen sich meist noch aus mehreren Untermodulen zusammen, welche die Methoden beinhalten,welche Konstanten,Variablen und Attribute der einzelnen Schnittstellen eindeutig definieren. Die in DOM standardmäßig vorkommenden Variablen sind:
DOMString 16-bit Unicode-Sequenzen (UTF-16-Format)
DOMTimeStamp enthält die vergangene Zeit in ms ( 64-bit unsigned long)
DOMObject eine benutzerdefinierte Variable
DOMUserdate referenziert versch. Objekte in Applikationen

Desweiteren werden in den Schnittstellen die Art der Kinderknoten ( wenn existent) und deren Anzahl definiert.Einen kurzen Überblick über diesen Sachverhalt sollen die direkt von Node abgeleiteten Childnodes und deren Childdefinition geben.

Child von Node
Funktion
definierte Childs
Document Primärzugang zur XML - Baumstruktur element(max 1), ProcessingInstruction, comment, documenttype(max 1)
documentfragment teil eines Dokumentes element, ProcessingInstruction, comment, Text, cdatasection, entityreference
entity enthält alle Entitys des Dokumentes element, ProcessingInstruction, comment, Text, cdatasection, entityreference
entityreference Referenzierung einer Entity element, ProcessingInstruction, comment, Text, cdatasection, entityreference
element representiert ein Element des Dokumentes element, ProcessingInstruction, comment, Text, cdatasection, entityreference
attribute representiert ein Attribut eines Elementes von einem Objekt element, ProcessingInstruction, comment, Text, cdatasection, entityreference
Doctype Doctypeanweisung
keins
ProcessingInstruction Charakter einer XML-Verfahrensanweisung
keins
comment representiert Kommentare
keins
Text textlicher Inhalt eines Elementes / Attributes
keins
cdatasection nicht als Attribute anhängbare Codes
keins
notation Notation einer DTD
keins


Zur Verdeutlichung folgen 3 W3C-Spezifikationen von verschiedenartigen Knoten.

W3C-Spezifikation des DOM-Knotens NodeList


length unsigned long
item( index: unsigned long ) Node


W3C-Spezifikation des DOM-Knotens Attr


name DOMString
specified boolean
value DOMString
ownerElement Element


W3C-Spezifikation des DOM-Knotens Element


TagName DOMString
getAttribute(name : DOMString ) DOMString
setAttribute(name : DOMString , value : DOMString )
removeAttribute(name : DOMString )
getAttributeNode(newAttr : DOMString ) Attr
. . .
getElementsByTagName(name : DOMString ) NodeList
getAttributeNS(namespace URI : DOMString , local name : DOMString ) DOMString
. . .
hasAttribute(name : DOMString ) boolean