Übersicht über die wichtigsten Parser
... [ Seminar XML ] ... [ XML-Parser ] ... [ Parsergeneratoren ] ...
Übersicht über die wichtigsten Parser
Grundsätzliches
Am Markt gibt es inzwischen eine Unmenge an XML-Parsern und es ist unmöglich hier einen Überblick über alle verfügbaren Parser zu geben. Stattdessen sei an dieser Stelle auf http://www.xmlsoftware.com/parsers/ verwiesen. Auf dieser Seite sind zur Zeit über 40 verschiedene XML-Parser aufgeführt, für alle möglichen Programmier- und Skriptsprachen.
Ich möchte mich in diesem Vortrag auf die wichtigsten Parser für Java beschränken und in diesem Abschnitt deren Eigenschaften, Vor- und Nachteile aufführen.
JAXP und Project X (Sun)
Das erste Parser Paket stellt gleich eine Besonderheit dar, denn JAXP ist gar kein Parser, sondern ein API für XML-Parser. Als Referenzimplementation eines Parsers nach diesem API liefert Sun den Project X Parser zusammen mit JAXP aus. Das JAXP-Paket wurde unter der Community Source License herausgegeben, die die Weitergabe von modifizierten Quelltexten erlaubt und ist von der Sun-Website downloadbar.
JAXP wurde von einem Projektteam unter der Führung von SUN entwickelt und stellt Standard-Schnittstellen zum Parsen und Manipulieren von XML-Dokumenten zur Verfügung. Allerdings überläßt es die Wahl eines bestimmten Parsers dem Programmierer, der über einen sogenannten Plugability Layer den zu benutzenden Parser für das Parsen festlegen kann.
Das ganze Paket ist ein "Java Optional Package" und hat den Paketnamen javax.xml.parsers. Wie man an dem javax Präfix sieht, gehört es damit schon zu den Standarderweiterungen des JDK( wie z.B. auch die swing-Pakete im Paket javax.swing.*), wird zur Zeit aber noch nicht zusammen mit dem JSDK ausgeliefert.
Zur Zeit besteht JAXP aus 6 Klassen, davon sind 4 abstrakt und definieren die Schnittstellen für das Erzeugen eines SAXParsers bzw. DOMBuilders, sowie für das Arbeiten mit Instanzen von ihnen. Die anderen zwei Klassen sind zur Fehlerbehandlung vorgesehen.
- SAXParserFactory: ist eine Klasse, nach dem Designmuster der Fabrikmethode, die es Anwendungen erlaubt einen Parser nach der SAX-Spezifikaton zu konfigurieren und eine Instanz zu erhalten.
- SAXParser: kapselt den benutzten SAX-Parser, der gemäß des org.xml.saxParser Interfaces implementiert sein muß. Methoden: parse und Infos über Parserstate. Ein Aufruf von SAXParserFactory.newInstance() gibt immer eine Instanz dieser Klasse zurück.
- DocumentBuilderFactory: ähnlich der SAXParserFactory, nur wird hier ein Parser instanziert und konfiguriert, der ein XML-Dokument parsed und ein DOM-Modell liefert.
- DocumentBuilder: kapselt den benutzten DOM-Builder, der von der DocumentBuilderFactory bei Aufruf von newInstance() zurückgegeben wird.
- FactoryConfigurationError: Falls es irgendein Problem bei der Konfiguration der Factory-Klassen gibt, wird dieser Fehler aufgerufen.
- ParserConfigurationException: Diese Exception tritt auf, wenn die Factory den Parser nicht mit den vorgegebenen Parametern konfigurieren konnte.
Um einen Parser in das JAXP-Paket "pluggen" zu können, muß dieser einige Voraussetzungen erfüllen:
- Er muß als Character Set encodings mindestens ascii, UTF-8 und UTF-16 unterstützen
- Er muß ein Dokument auf seine Wohlgeformtheit überprüfen können
- Er muß ein Dokument auf seine Gültigkeit anhand der DTD überprüfen können
Es gibt zur Zeit zwei Parser, die diese Voraussetzungen erfüllen und sich nach den JAXP-Schnittstellen richten, den Apache Xercex-J Parser und natürlich den von Sun mit JAXP mitgelieferten Project X Parser. Auf letzteren möchte ich jetzt noch weiter eingehen.
Sun's Implementierung eines XML-Parser war eine der ersten, der das Parsen mit vernünftiger Geschwindigkeit erledigen konnte. Bei Einführung des Parsers war Project X im validierenden Modus schneller als jeder andere Parser, mit oder ohne Validation. Inzwischen haben auch die anderen Hersteller ihre Parser verbessert, so daß die Performanceunterschiede nicht mehr so groß sind.
Von Project X gab es bisher zwei sogenannte Technology Releases, deren letztes im April 1999 herauskam. Diese Releases hatten den Status Experimental und damit einige Nachteile: Die API's wurden nicht von Sun supported und die Weitergabe von veränderten Quelltexten war nicht erlaubt. Inzwischen steht Project X aber, zusammen mit JAXP, wie schon erwähnt, unter der Sun Community Source License.
Project X besitzt sowohl einen validierenden als auch einen nichtvalidierenden Parser und bietet SAX, DOM und XML-Namespaces Unterstützung.
Ein großer Vorteil dieses Parsers ist seine hohe Konformität zum XML-Standard und seine Geschwindigkeit. Zudem bietet er eine Vielzahl an Beispielen(z.B. Adapterklassen um DOM-Modelle in einem JTree darzustellen) und zusätzliche Dokumentation.
Xerces-J (Apache / IBM)
Der Xerces-J Parser der Apache-Gruppe ist aus dem IBM Parser XML4J entstanden. IBM hatte seinen Parser schon 1998 entwickelt und über die alphaWorks-Site angeboten, ihn aber im November 1999 an das xml.apache.org Projekt "verschenkt". IBM bietet den XML4J Parser weiterhin an, allerdings ist er, bis auf ein Kompatibilitäts-API für ältere XML4J-Parser, mit dem Xerces-J Parser des xml.apache.org Projektes identisch. Deshalb möchte ich im folgenden auf die aktuelle Version des Xerces-J Parsers 1.2.1 eingehen.
Dieses Paket bietet natürlich validierende und nichtvalidierende SAX- und DOM-Parser nach der SAX 1.0 bzw. DOM Level 1 Spezifikation. Zusätzlich unterstützt Xerces-J SAX 2.0 und DOM Level 2 Version 1.0(die aber selber noch in der Candidate Recommendation ist). Außerdem ist Xerces-J der einzige Parser, der schon ansatzweise XML-Schema unterstützt. Wenn man also mit den neuesten Entwicklungen und den neuesten Spezifikationen arbeiten will oder muß, ist dieser Parser zu empfehlen.
Der ganze Parser ist natürlich open source und sehr gut dokumentiert. Vor allem die Dokumentation der neuen Features, wie XML-Schema Unterstützung oder DOM Level 2 Support ist sehr ausführlich.
Zu beachten bei diesem Parser ist, daß er selbst wenn er im nicht-validierenden Modus ist, eine DTD lesen wird, wenn sie im XML-Dokument mit DOCTYPE angegeben ist.
XP (James Clark)
Der XP-Parser von James Clark nimmt eine gewisse Sonderstellung bei den hier vorgestellten Parsern ein. Zum einen wurde er nicht von einem Team entwickelt, sondern nur von einer Person. James Clark selber war "Technical Editor" der XML-Spezifikation und hat sich auch im Bereich von SGML einen Namen gemacht. Ihm ging es vor allem darum einen Parser zu entwickeln, der möglichst konform zur XML-Spezifikation und möglichst schnell ist. Diese Ziele hat er mit XP auf jeden Fall erreicht, allerdings kann dieser Parser auch nicht viel mehr.
Die erste Einschränkung ist, daß XP keinen validierenden Parser besitzt. Darüberhinaus unterstützt er nur SAX und hat zusätzlich noch ein proprietäres API, besitzt jedoch keine DOM-Parser. Bei den character encodings unterstützt XP nur 4 Stück, allerdings die wichtigsten. Das Error-Handling ist laut dem Autor "brutal", d.h. mit hilfreichen Fehlermeldungen kann man nicht rechnen.
Die Software ist frei verfügbar und darf laut License zu allen Zwecken verwendet und weitergegeben werden. Da es aber außer der API-Dokumentation keine weiteren Beispiele und weitere Dokumentation gibt, erfordert es schon einiger Einarbeitungszeit, wenn man den XP-Parser in größeren Projekten benutzen möchte.
Wichtig bei diesem Parser: Er ist der einzige, der ignorable Whitespace nicht meldet.
XML Parser v2 for Java(Oracle)
Oracles Parser, den es auch für C, C++ und PL/SQL gibt, bietet im Gegensatz zu XP wieder mehr Funktionen. Er unterstützt das SAX-API in der Version 1.0 und DOM Level 1 mit validierenden und nicht-validierenden Parsern. Er bietet außerdem Unterstützung für XML-Namespaces und unterstützt mit verschiedenen Java Beans Komponenten die Entwicklung von XML-Applikationen(z.B. DOMBuilderBean, TreeViewBean).
Was den Oracle-Parser von den Konkurrenten abhebt ist sein XSLT-Modul. Es hält sich an die W3C XSL Transform Proposed Recommendation 1.0 und wandelt XML gemäß einem definierten Stylesheet in HTML oder ein anderes Textformat um. Auch hierfür gibt es ein entsprechendes Bean.
Oracle's Parser ist kein open source und man bekommt keinen source code mitgeliefert. Dafür sind aber einige Beispiele und die API-Dokumentation dabei.
... [ Seminar XML ] ... [ XML-Parser ] ... [ Parsergeneratoren ] ...