SAX


... [ Seminar XML ] ... [ XML-Parser ] ... [ DOM ] ...

SAX


SAX 1.0


SAX steht für "Simple API for XML" und definiert Schnittstellen für das Parsen von XML-Dokumenten. Es ist kein W3C-Standard, sondern wurde von der XML-DEV Mailinglist entwickelt und Anfang 1998 in der Version 1.0 herausgebracht. Zur Zeit ist die Version 2.0 aktuell.

Das SAX-API stellt einen Mechanismus zur seriellen Verarbeitung von XML-Dokumenten zur Verfügung. Das heißt, dass ein Dokument Element um Element abgearbeitet wird. Die Kommunikation mit anderen Anwendungen wird dabei über sogenannte Handler abgewickelt, weshalb man auch von einem ereignisgesteuerten Protokoll spricht. Die folgende Grafik illustriert dies:

SAX1.0-API
sax-api.gif

Um ein XML-Dokument zu parsen, erzeugt man sich zunächst eine Instanz eines SAX-Parsers. Dies geschieht über die ParserFactory, die gemäß der Fabrikmethode den Erzeugungsprozeß des Parsers kapselt. Der Parser darf aus einem beliebigen XML-Parser-Paket kommen und muß sich an die SAX-Spezifikation halten.

Danach muß man die jeweiligen Handler(entweder generische von einem XML-Parser, oder Handler, die man selbst gemäß den durch SAX gegebenen Interfaces implementiert hat) erzeugen und beim Parser registrieren.

Zum Schluß ruft man die Methode parse des Parsers mit dem zu parsenden XML-Dokument als Parameter auf. Der Parser wird nun das Dokument sequentiell lesen und je nach Element, das er liest, bestimmte callback-Methoden in den Handlern aufrufen. Über diese und vor allem den DocumentHandler läßt sich die Verarbeitung des XML-Dokuments dann steuern.


SAX Handler


Das SAX-API definiert folgende Handler zur Verarbeitung eines XML-Dokuments:


Beispiel


Für eine einfache Implementation eines SAX-Parsers reicht es völlig, nur die ersten beiden Handler zu schreiben. In einem kleinen Beispiel-Programm, SAXBeispiel in Java, das die erkannten Elemente eines XML-Dokuments auf der Konsole ausgibt, wird dies demonstriert.

Beispiel: SAXBeispiel.java


Von SAX 1.0 zu SAX 2.0


Dieses Jahr wurde die Version 2.0 von SAX freigegeben und es haben sich einige Änderungen und Ergänzungen zur 1.0 Spezifikation ergeben:


Whitespace


Whitespaces sind oft ein Problem beim Parsen von XML, denn es ist für den Parser in manchen Fällen schwierig zu erkennen, ob der Whitespace signifikant ist oder nicht.

Eine Art von Whitespace ist dafür da, ein XML-Dokument lesbarer zu machen, also z.B. das Einrücken von Tags oder Einfügen von Leerzeilen. Dieser Whitespace ist nicht signifikant und die meisten XML-Parser erkennen anhand von DTD's solchen Whitespace. Im DocumentHandler des SAX-API's gibt es die Methode ignorableWhitespace, die dann vom Parser aufgerufen wird. Allerdings ist zu beachten, daß nur validierende Parser diesen ignorable Whitespace erkennen können. Nun könnte man meinen, daß nichtvalidierende Parser den Whitespace dann bei der characters-Methode des DocumentHandlers melden würden, leider ist dies aber nicht immer der Fall. Manche nichtvalidierende Parser lesen nämlich trotzdem eine angegebene DTD ein und können so dann ignorable Whitespace erkennen und in der entsprechenden Methode weitergeben.

Die zweite Art sind Whitespaces, die eine bestimmte Bedeutung haben, z.B. Zeilenenden bei Gedichten, oder mehrere Leerzeichen zwischen Wörtern. Hier sollte man entweder das Attribut xml:space="preserve" im XML-Dokument setzen oder die Daten in einem CDATA-Abschnitt kapseln, damit der Parser diesen Whitespace auf jeden Fall weitergibt.


... [ Seminar XML ] ... [ XML-Parser ] ... [ DOM ] ...