next up previous contents
Nächste Seite: DOM-API Aufwärts: Parser Vorherige Seite: Parser   Inhalt

SAX-API

SAX wurde im Jahr 1998 von der XML-DEV Mailingliste in der Version 1.0 entwickelt. Mittlerweile ist die Version 2.0 aktuell. Obwohl SAX von keiner offiziellen Organisation standardisiert wurde, gilt es als Quasi-Standard. Der SAX-Parser arbeitet Event-basiert, d.h. beim Einlesen eines Dokumentes arbeitet der Parser es Element für Element ab und erzeugt bei bestimmten XML-Strukturen das dazu passende Ereignis. Bei einem Start-Tag werden dadurch z.B. die Bezeichnung des Elementtyps, der Attribute und deren Werte dem aufrufendem Programm zur Verfügung gestellt. Nach der Behandlung eines Ereignisses gehen die Informationen darüber verloren. Sie müssen also sofort verarbeitet und interpretiert werden. Daraus ergeben sich aber auch die großen Vorteile des SAX-Parsers: er ist schnell und benötigt wenig Speicher unabhängig von der Größe des XML-Dokumentes. Die Benutzung eines SAX-Parser wird mit verschiedenen Schnittstellen realisiert, die die Methoden enthalten, die bei bestimmten Ereignissen aufgerufen werden. Man unterscheidet zwischen folgenden Schnittstellen:
ErrorHandler
Tritt beim Parsen des Dokuments ein Fehler auf, kann je nach Art des Fehlers mit den Methoden warning(), error() oder fatalError() näher auf den Fehler eingegangen werden.
EntityResolver
Die Methode resolveEntity() wird benötigt, um auf externe Dateien zugreifen zu können.
DTDHandler
Die Methoden unparsedEntityDecl() und notationDecl() verarbeiten ungeparste Entities und Notationsdeklarationen in der DTD.
ContentHandler
Diese Schnittstelle stellt die wichtigste Komponente eines SAX-Parsers dar. Hier sind die Methoden hinterlegt, die beim Abarbeiten des Dokumentinhaltes aufgerufen werden. Sie müssen vom Programmierer selbst implementiert werden. Die Methoden startDocument() und endDocument() werden zu Begin und zum Ende der Bearbeitung eines Dokuments aufgerufen. In ihnen lassen sich initialisierende oder auch abschließende Berechnungen durchführen. Wichtiger noch sind die Methoden startElement() und endElement(), die vom Parser aufgerufen werden, sobald er ein Start-Tag bzw. End-Tag einliest. Damit läßt sich gezielt die Verarbeitung der einzelnen Elemente steuern. In der Methode startElement() sind neben dem Elementnamen auch die Attribute und deren Werte angegeben, so daß sie ebenfalls bei der Verarbeitung zur Verfügung stehen. Der Text zwischen den Elementen wird mit der Methode characters() verarbeitet.
Neben diesen Methoden sind noch weitere definiert, die jedoch nicht näher erläutert werden. Sie sind komplett im Quellcode 3.3 aufgelistet.

Methoden des ContentHandlers
public void characters(char[] ch, int start, int length)
    throws SAXException {}
    
public void endDocument()
    throws SAXException {}
    
public void endElement(String uri, String lName, String qName)
    throws SAXException {}
    
public void endPrefixMapping(String prefix)
    throws SAXException{}
    
public void ignorableWhitespace(char[] ch, int start, 
    int length) throws SAXException {}

public void processingInstruction(String target, String data)
    throws SAXException {}
    
public void setDocumentLocator(Locator locator) {}

public void skippedEntity(String name)
    throws SAXException {}
    
public void startDocument()
    throws SAXException {}
    
public void startElement(String uri, String lName, String qName,
    Attributes atts) throws SAXException {}

public void startPrefixMapping(String prefix, String uri)
    throws SAXException {}


next up previous contents
Nächste Seite: DOM-API Aufwärts: Parser Vorherige Seite: Parser   Inhalt
Oliver Krone 2003-04-28