www.wikidata.de-de.nina.az
Die Simple API for XML SAX ist ein De facto Standard der ein Application Programming Interface API zum Parsen von XML Daten beschreibt Die aktuelle Hauptversion SAX 2 0 wurde 2000 von David Megginson veroffentlicht und ist Public Domain Ein SAX Parser liest XML Daten als sequentiellen Datenstrom und ruft fur im Standard definierte Ereignisse vorgegebene Ruckruffunktionen callback function auf Eine Anwendung die SAX nutzt kann eigene Unterprogramme als Ruckruffunktionen registrieren und auf diese Weise die XML Daten auswerten Inhaltsverzeichnis 1 Arbeitsweise von SAX 2 Ereignisse in SAX 3 Arbeiten mit SAX 3 1 Beispiel in Java 3 2 Beispiel in Lua 4 Siehe auch 5 Literatur 6 Weblinks 7 EinzelnachweiseArbeitsweise von SAX BearbeitenSAX wurde ursprunglich in Java entwickelt und besteht aus einer Anzahl von Java Interfaces heute finden sich jedoch Implementierungen fur nahezu alle gangigen Programmiersprachen SAX unterliegt keinem formalen Komitee oder Konsortium was fur eine XML Spezifikation eher untypisch ist dennoch ist SAX ein De facto Standard Es spezifiziert eine Menge von Methoden fur den Zugriff auf XML Dokumente mittels eines SAX Parsers SAX arbeitet anders als DOM ereignisorientiert Das Verarbeitungsprinzip entspricht dem Konzept einer Pipeline SAX definiert eine Menge von Ereignissen die beim sequentiellen Lesen eines XML Dokuments vorkommen konnen Diese Ereignisse sind zustandslos sie referenzieren nicht auf andere vorhergegangene Ereignisse und stehen auch sonst in keinem Verhaltnis zu anderen Ereignissen Beim Erkennen einer syntaktischen Struktur startet der SAX Parser eine Behandlungsroutine welche gegebenenfalls eine individuelle Behandlungsroutine des Ereignisses ausfuhrt Hierdurch kann mit dem Einlesen der ersten Zeichen bereits mit der Auswertung des Dokuments begonnen werden Dies verkurzt insbesondere in interaktiven Systemen die subjektiv gefuhlte Zugriffszeit Gleichzeitig minimiert der SAX Parser den Speicherbedarf da neben dem jeweils eingelesenen Element nur solche Daten im Speicher stehen die mittels einer Behandlungsroutine explizit ausgewahlt wurden SAX Ereignisse werden parallel zum Einlesen des Dokuments in den Parser ausgeworfen In der Praxis bedeutet dies dass es SAX Ereignisse auf nicht wohlgeformte XML Dokumente geben kann bevor das Dokument als ungultig erkannt wird Daher spielt die Fehlerbehandlung bei SAX Parsern eine wichtige Rolle entsprechende Klassen stehen in Java zur Verfugung Das Validieren eines XML Dokuments vor dem Parsen mit SAX widerspricht der Natur von SAX da hierfur zunachst das gesamte Dokument in den Speicher geladen werden musste Dennoch findet sich eine Vielzahl validierender SAX Parser Ereignisse in SAX BearbeitenGegeben sei folgendes Dokument lt xml version 1 0 gt lt seminararbeit gt lt titel gt DOM SAX und SOAP lt titel gt lt inhalt gt lt kapitel value 1 gt Einleitung lt kapitel gt lt kapitel value 2 gt Hauptteil lt kapitel gt lt kapitel value 3 gt Fazit lt kapitel gt lt inhalt gt lt seminararbeit gt Wird das gezeigte XML Dokument mit Hilfe eines SAX Parsers gelesen wirft dieser der Reihe nach die folgenden Ereignisse aus 1 2 SAX Ereignis ErlauterungstartDocument Parser ist auf Anfang des XML Dokuments gestossenstartElement seminararbeit ein Element mit dem Namen seminararbeit wurde gefunden der 2 Parameter die eckigen Klammern ist eine Liste aller zum Element gehorenden Attribute da dieses Element allerdings keine Attribute hat ist diese Liste in diesem Fall leer characters n ein SAX Parser gibt auch samtliche Whitespaces aus die er zwischen zwei Element Tags findet 3 in diesem Fall ist das der Zeilenumbruch newLine n gefolgt von einem Leerzeichen welches im XML zur besseren Lesbarkeit fur die Zeileneinruckung verwendet wurde startElement titel characters DOM SAX und SOAP der Inhalt des Elements titel endElement titel kennzeichnet dass das Ende des zuvor gefundenen Elements erreicht wurdecharacters n startElement inhalt characters n da die Einruckung im XML nun 2 Leerzeichen betragt gibt auch das Ereignis 2 Leerzeichen ausstartElement kapitel value 1 der 2 Parameter enthalt eine Liste samtlicher Attribute in diesem Fall enthalt die Liste nur ein einziges Listenelement namlich value 1 characters Einleitung endElement kapitel characters n startElement kapitel value 2 characters Hauptteil endElement kapitel characters n startElement kapitel value 3 characters Fazit endElement kapitel characters n endElement inhalt characters n da diese Zeile im XML nicht mehr eingeruckt ist wird nur noch n ohne folgende Leerzeichen ausgegebenendElement seminararbeit endDocument Parser hat Ende des XML Dokumentes erreichtBei jedem Ereignis unterbricht der Parser seine Arbeit und wartet darauf dass er vom Dokument Handler die Arbeitserlaubnis zuruckbekommt Dieser kann in der Zwischenzeit zur Auswertung des Ereignisses eine Behandlungsroutine starten Dabei mussen jedoch nur fur solche Ereignisse Behandlungsroutinen geschrieben werden die fur die weitere Verarbeitung auch von Interesse sind ansonsten wird die Kontrolle sofort wieder an den Parser zuruckgegeben Arbeiten mit SAX BearbeitenBeispiel in Java Bearbeiten Im folgenden Beispiel in Java soll im Rahmen einer Dokumentenanalyse der Titel und die Anzahl der Kapitel ausgelesen und am Ende ausgegeben werden Dafur mussen zunachst entsprechende SAX Klassen importiert werden und der SAX Parser initialisiert werden Zusatzlich muss ein Dokument Handler gestartet werden der uber die Ereignisse vom Parser informiert wird Dieser Dokument Handler beinhaltet fur das Beispiel folgende Methoden fur die Ereignisse characters startElement und endDocument public int count 0 public boolean titel false public String seminararbeit public void characters char ch int start int length throws SAXException if titel true amp amp seminararbeit equals seminararbeit new String ch start length titel false public void startElement String name AttributeList atts throws SAXException if name equals kapitel count if name equals titel titel true public void endDocument throws SAXException System out println seminararbeit enthalt count Kapitel Beispiel in Lua Bearbeiten In LuaExpat 4 Lua mit einem SAX Parser werden fur das Parsen von XML Dateien zunachst sogenannte Callbacks vorbereitet mit denen der Parser seine Daten an das ihn aufrufende Anwendungsprogramm ubergeben kann Im Beispiel sind das einfache Aufrufe von Ausgabefunktionen Das folgende Programm gibt eine XML Datei als einfachen Text aus require lxp xml file irgendeineXMLdatei xml do local count 0 callbacks StartElement function parser name attributes StartTag ausgeben io write string rep count 2 name n count count 1 Attribute ausgeben local attributename for attributename in ipairs attributes do io write string rep count 2 attributename attributes attributename n end end EndElement function parser name Endtag ausgeben count count 1 io write string rep count 2 name n end CharacterData function parser text Text ausgeben io write n text n n end end p lxp new callbacks Generiere eine Instanz des Parsers file assert io open xml file r p parse file read all Parsen der gesamten Datei Auch zeilenweises Einlesen ware moglich file close collectgarbage p parse Beendet das Dokument p close Schliesst den ParserSiehe auch BearbeitenStreaming API for XML StAX Literatur BearbeitenDavid Brownell SAX2 O Reilly ISBN 0 596 00237 8 Helmut Erlenkotter XML Extensible Markup Language von Anfang an Rowohlt Taschenbuch Verlag Reinbek bei Hamburg 2003 ISBN 3 499 61209 7 S 211 229 W Scott Means Michael A Bodie The Book of SAX No Starch Press ISBN 1 886411 77 8Weblinks BearbeitenEinfuhrung in SAX deutsch SAX Referenz deutsch Homepage des SAX Projekts englisch XML Parser Tutorial deutsch Top Ten SAX2 Tips englisch Einzelnachweise Bearbeiten SAX Quickstart SAX API Documentation saxproject org SAX Quickstart keplerproject org Abgerufen von https de wikipedia org w index php title Simple API for XML amp oldid 184973210