XML-Parser Grundlegendes

XML-Parser lassen sich nach zwei Kriterien unterscheiden. Das erste ist, ob sie validieren oder nicht, und das zweite, welche Schnittstelle sie zum Zugriff auf das XML-Dokument anbieten (SAX oder DOM). Beide Parser-Pakete bieten die vier möglichen Varianten an (validierender und nicht validierender SAX-Parser, validierender und nicht validierender DOM-Parser).

Die meisten von euch haben wahrscheinlich nur die Hälfte von dem verstanden, was ich eben geschrieben habe, aber das macht nichts, denn im Folgenden kommt nun eine etwas eingehendere Beschreibung.

Das erste Kriterium, also validierend oder nicht validierend, ist schnell erklärt, deshalb gibts dafür kein extra Kapitel. Wenn ihr den XML-Teil dieser Seite studiert habt, und das solltet ihr bevor ihr euch mit den Parsern beschäftigt, müßte euch das eigentlich auch schon klar sein. Ein validierender Parser überprüft, ob das XML-Dokument das er parst valide ist, also den Regeln einer DTD folgt. Es ist also zwingend eine DTD erforderlich. Außerdem wird die Wohlgeformtheit des Dokuments getestet.

Ein nicht validierender Parser überprüft nur, ob das XML-Dokument der XML-Spezifikation folgt, also wohlgeformt ist. In diesem Fall ist also keine DTD nötig, es schadet aber auch nicht wenn eine vorhanden ist.

Da das Validieren eines Dokumentes durch den Parser jedoch sehr zeitaufwändig ist, sollte man wann immer möglich darauf verzichten. Das ist zum Beispiel der Fall, wenn man anderweitig sicherstellen kann, daß das Dokument valide ist.

Soviel zum ersten Kriterium nach denen sich Parser unterscheiden lassen. Das zweite war die Schnittstelle über die der Zugriff auf das Dokument erfolgt. Es gibt derer zwei, nämlich DOM und SAX. Beide werde ich nun näher erläutern.

SAX

SAX heißt Simple API for XML, und wurde von den Mitgliedern der XML-DEV Mailing List entwickelt. Am 11. Mai 1998 wurde die Version 1.0 veröffentlicht.

SAX ist "event based". Das bedeutet, daß der Parser, wenn er ein bestimmtes XML-Konstrukt (beispielsweise ein Element, ein Kommentar oder eine Processing Instruction) liest, ein Ereignis auslöst. Auch bei Fehlern oder Warnungen löst der Parser ein Ereignis aus. Diese Ereignisse können vom Entwickler ganz individuell behandelt werden, indem man einen eigenen Eventhandler schreibt, und diesen beim Parser registriert. So kann die Applikation je nach Anforderung auf das XML-Dokument reagieren. Nach dem Behandeln eines Ereignisses ist dieses allerdings "weg", sofern ihr euch nicht selbst um eine Speicherung der Ereignisse bemüht.

Folgendes Beispiel mag eurem Verständnis helfen: Nehmen wir an, wir haben ein XML-Dokument, in dem dieser Abschnitt vorkommt:

<zitat>
Drum prüfe wer sich ewig bindet, ob sich nicht was Besseres findet.
</zitat>

Der Parser würde beim Lesen folgende Ereignisse auslösen:

  • öffnendes Tag
  • Text
  • schließendes Tag

Wenn nun ein Ereignis auftritt, wird der entsprechende Eventhandler aufgerufen. Dies ist eine Methode, die der Entwickler (also ihr) selber schreiben kann. Man könnte dann beispielsweise den Text (also das eigentliche Zitat) auf dem Bildschirm ausgeben.

DOM

DOM heißt Document Object Model, und ist ein Standard des W3C (momentan in der Version 1.0). Beim DOM wird beim Parsen des XML-Dokuments ein Baum aufgebaut, der DOM-Tree. Das Root-Element des XML-Dokuments fungiert als Wurzel für den DOM-Tree. Dieser Baum steht dann im Speicher zur Verfügung. Er ist quasi das Abbild des XML-Dokuments.

<buch>
<titel>Galgenlieder</titel>
<autor>
<vorname>Christian</vorname>
<name>Morgenstern</name>
</autor>
</buch>

Obiges XML-Dokument würde einen DOM-Parser veranlassen folgenden DOM-Tree aufzubauen:

Die DOM-API bietet Werkzeuge zum Zugriff auf den Baum, und zum Verändern des Baums, und ist deshalb ideal für interaktive Anwendungen geeignet (das gesamte Object Model steht die ganze Zeit im Speicher zur Verfügung). Allerdings ist DOM aufwendiger (sprich langsamer) und benötigt mehr Speicher als SAX.

DOM versus SAX

SAX ist schnell und einfach, hat allerdings den großen Nachteil, daß kein Object Model zur Verfügung steht, auf das ihr nach dem Parsen zugreifen könnt. SAX ist ideal für alle Anwendungen, die das XML-Dokument nur einmal "durchlesen" sollen, beispielsweise um es anzuzeigen.

DOM hingegen ist bedeutend langsamer, bietet aber die Möglichkeit der einfachen Manipulation des DOM-Trees (also des XML-Dokuments). DOM solltet ihr also bei Anwendungen verwenden, die interaktiv auf das XML-Dokument zugreifen müssen (Editoren zum Beispiel) oder die das Dokument mehrfach brauchen (es steht ja als DOM-Tree immer im Speicher zur Verfügung).

zurück              weiter

nach oben