20.9 | Java-APIs für XML-Verarbeitung |
Die Java-APIs zur Verarbeitung von XML-Dokumenten lassen sich von ihrem Ansatz her in zwei Kategorien einteilen:Entsprechend den Ansätzen werden die verschiedenen Bestandteile eines Dokuments unterschiedlich dargestellt. So gibt es bei dem Interface ContentHandler von SAX je eine Methode zur Benachrichtigung über den Anfang und das Ende eines Elements startElement() und endElement(). Bei DOM dagegen wird ein Element als Knoten im Parse-Baum dargestellt. Unterschiedliche Bestandteile wie Elemente oder Textdaten werden mit verschiedenen Knotentypen abgebildet.
- Zum einen gibt es den Event-orientierten Ansatz, bei dem eine XML-Applikation ähnlich wie bei der Programmierung grafischer Oberflächen einen Event-Handler implementiert, der beim Parser-Objekt registriert wird. Der Event-Handler erhält während des Parse-Vorgangs Callbacks bei verschiedenen Ereignissen, d. h., der Parser ruft Methoden des registrierten Event-Handlers auf, in denen das Ereignis verarbeitet wird. Ein solches Ereignis könnte beispielsweise das Erreichen des Anfangs eines Elements sein. Das Simple API for XML (SAX) ist ein Beispiel für eine Event-orientierte Schnittstelle.
- Zum anderen gibt es den baumorientierten Ansatz, den das Document Object Model (DOM) verfolgt. Bei diesem Ansatz baut der Parser einen Baum von Java-Objekten auf, der der Schachtelungshierarchie des Dokuments entspricht. Dieser Baum wird der XML-Applikation nach dem Parse-Vorgang übergeben. Anschließend kann die XML-Applikation den Baum traversieren und das Dokument so verarbeiten.
SAX und DOM sind beide im J2SDK seit Version 1.4 enthalten. Darüber hinaus beinhaltet das SDK einen Parser, der sowohl DOM als auch SAX unterstützt. Im J2SDK werden SAX, DOM sowie ein API zur Erzeugung von Parser-Objekten unter dem Begriff Java API for XML Processing (JAXP) zusammengefasst.
Ein spezielles API zur Erzeugung von Parsern war aufgrund einer Lücke in DOM und SAX erforderlich. SAX und DOM definieren zwar eine Schnittstelle zum Parser und zum Dokument, geben aber nicht vor, wie Parser-Objekte erzeugt werden. Durch diese Lücke war der Weg, eine bestimmte Implementierung von DOM und SAX in einer XML-Applikation zu verwenden, immer noch abhängig von der verwendeten Implementierung.
Dieses Problem wird von JAXP durch entsprechende Factory-Klassen gelöst. JAXP definiert im Paket javax.xml.parsers Klassen und Methoden zur Erzeugung von Parser-Objekten, ohne dass die Klassennamen einer SAX- oder DOM-Implementierung fest in der Applikation kodiert werden müssen. Stattdessen werden die Klassennamen über Properties konfiguriert.