SAX (simple API for XML)

Die Simple API for XML (SAX) bietet ebenso wie das Document Object Model (DOM) eine Möglichkeit zum Zugriff auf XML-Dokumente. Dabei ist SAX eine programmierbare Schnittstelle ( Application Programming Interface, API) die im Gegensatz zum DOM die sequentielle Verarbeitung von XML-Dokumenten unterstützt. Dazu werden beim Parsen des Dokuments Ereignisse in vordefinierten Situationen ausgelöst, auf die dann eine Anwendung entsprechend agieren kann. Damit steht jedoch nicht wie bei DOM das gesamte XML-Dokument im Speicher zur Verfügung, sondern immer nur Momentaufnahmen der Daten, beispielsweise wenn sehr schnelle Suchprozesse in Dokumenten zu realisieren sind. Die Programmiermodelle von SAX und DOM unterscheiden sich jedoch erheblich, daher kann die jeweilige Umstellung nicht ohne Weiteres erfolgen.


Die Historie von SAX

Bereits im Jahre 1997 wurde unter Leitung von David Megginson mit der Entwicklung von SAX begonnen. SAX steht als Public-Domain-Software derzeit in der Version 2.0.2 (SAX2) unter dem u.g. Link zur Verfügung. Diese Version unterstützt die Document Type Definition (DTD) sowie Namensräume und die Verarbeitung von Kommentaren. Ursprünglich wurde SAX als Schnittstelle für Java entworfen, mittlerweile gibt es aber Implementierungen für weitere Sprachen wie C++, Python oder Perl. Im Gegensatz zum DOM entspricht SAX keiner vom World Wide Web Consortium (W3C) entworfenen Spezifikation und ist dennoch ein weitverbreiterter De-facto-Standard.

Bei SAX wirken unterschiedliche Programmkomponenten zusammen:

  • Ein XML-Parser, der beim Parsen des XML-Dokumentes unterschiedliche Ereignisse generiert.
  • Ein sogenannter Handler, der auf die generierten Ereignisse mit verschiedenen Methoden reagiert.
Man spricht in diesem Zusammenhang auch davon, dass SAX auf einem Ereignismodell basiert. Das XML-Dokument wird seriell wie ein Datenstrom gelesen, und für erkannte Elemente wird ein Ereignis generiert. Ein Ereignis ist in jedem Fall ein Signal, was eine Veränderung im Markup-Status aufzeigt. Dafür können ursächlich sein: Element-Tags, Verarbeitungsanweisungen, die Grenzen des Dokumentes selber, Kommentare oder zu filternde Zeichendaten. Der Parser meldet diese Ereignisse durch Call-Backs an das aufrufende Programm zurück. Der Handler interpretiert nun das Ereignis und agiert entsprechend. Verbunden ist diese Vorgehensweise mit dem Nachteil, dass ein unabhängiger Zugriff auf ein einzelnes Element nur mit einer vorherigen Zwischenspeicherung möglich ist. Daher muss der Entwickler selbst dafür Sorge tragen, dass zu analysierende Daten aufbewahrt werden. In keinem Fall steht mit SAX das komplette XML-Dokument zur Verfügung.

Die Weiterentwicklung von SAX

SAX2 ist bereits Bestandteil des Java Development Kits (JDK) und dort im Rahmen der Java API for XML Processing (JAXP) implementiert. Diese Abstraktionsschicht unterstützt aber auch die Technologien: DOM Level 3, StAX, XSLT und XPath. Dabei ist mit StAX eine sogenannte Pull-API definiert, die nicht nach dem Callback-Prinzip arbeitet, sondern wie ein Tokenizer - bekannt aus dem Compilerbau - über die Elemente geht und diese selektiert. XSLT ( Extensible Stylesheet Language Transformations) ist nach dem W3C-Standard eine in XML definierte Sprache zur Transformation von XML-Dokumenten.

Vergleicht man nun die Schnittstellen DOM und SAX, so sind beide jeweils spezifisch auf den entsprechenden Anwendungsfall abgestimmt zu betrachten. Es ist beispielsweise für die Suche nach einer bestimmten Zeichenfolge nicht wichtig, das gesamte Dokument im Speicher abzulegen und auch daher nicht notwendig mit DOM einen kompletten Knotenbaum aufzubauen. In diesem Fall bietet es sich an, mit SAX zu arbeiten. Dabei werden die Ansätze auch häufig in Kombination miteinander verwendet. Es können daher auch die gesuchten Informationen zunächst mit SAX aus einem Dokument herausgefiltert werden, um diese anschließend mit DOM weiterzureichen. SAX wird auch vom Microsoft XML Core Services (MSXML) unterstützt. JAXP integriert die Parser-Implementierungen Xerces und Crimson, der u.g. Link gibt darüber im Detail Auskunft. JAXP ist in jedem Fall eine flexible Möglichkeit zwischen verschiedenen Parsern und XLST-Transformern zu wählen, ohne dass der eigentliche Programmcode in jedem Fall modifiziert werden muss.

http://www.saxproject.org

http://java.sun.com/webservices/jaxp/docs.html

Informationen zum Artikel
Deutsch:
Englisch: simple API for XML - SAX
Veröffentlicht: 28.10.2013
Wörter: 631
Tags: #Beschreibungssprachen
Links: API (application programming interface), Apps, C++, Compilerbau, Daten