SAX

(Auszug aus "Perl & XML" von Erik T. Ray & Jason McIntosh)

XML::Parser hat sich bemerkenswert gut als Parser und Eventstromgenerator für verschiedenste Zwecke bewährt. Die Zukunft von Perl und XML liegt aber in anderen Parsern. Wir möchten nicht an einen bestimmten Parser für jeden denkbaren Zweck gebunden sein, sondern je nach Situation den geeignetsten wählen können. Ein Parser ist vielleicht aus Gründen der Portabilität in Perl geschrieben, der andere dagegen ist in C geschrieben und darum sehr schnell. Denkbar wäre auch, einen Pseudoparser einzusetzen, der als Eingabequelle ein ganz anderes Format beherrscht und dieses in einen XML-Strom umwandelt. Man kann unmöglich vorhersagen, was ein Parser alles leisten soll. Selbst XML::Parser mit seinen unzähligen Optionen und Modi erreicht früher oder später seine Grenzen. Die Zukunft liegt in einer Vielfalt von Parsern.

Eine Umgebung mit einer Vielfalt von Parsern benötigt aber ein gewisses Maß an Konsistenz. Wenn jeder Parser seine eigene Schnittstelle hätte, würden die Entwickler früher oder später durchdrehen. Es ist besser, eine einzige Schnittstelle zu erlernen und Parser in konforme und nicht-konforme einzuteilen, als hundert verschiedene Arten zu erlernen, dasselbe zu tun. Wir brauchen eine Standardschnittstelle zwischen Quelltext und Parser: eine universelle, flexible und verläßliche Verbindung, frei von den Marotten eines bestimmten Parsers.

In der Welt der XML-Entwickler hat sich diesbezüglich eine eventorientierte Schnittstelle namens SAX durchgesetzt. SAX entstand aus Diskussionen, die auf der Mailingliste XML-DEV geführt wurden. Ein getreuer Hirte namens David Megginson (Er betreut eine Webseite zum Thema SAX) hat diese Diskussionen damals sehr schnell in eine nützliche Spezifikation umgesetzt. Die erste Inkarnation namens SAX Level 1 (oder kurz SAX1) unterstützt Elemente, Attribute und PIs. Dagegen kennt sie keine Namensräume oder CDATA-Abschnitte. Aus diesem Grund kam es zu einem weiteren Schritt in Form von SAX2. In dieser Schnittstelle ist so ziemlich alles enthalten, was man sich unter generischem XML vorstellen kann.

Anmerkung: Inzwischen sind bereits zwei weitere Erweiterungen vorgenommen worden, die man gelegentlich unter Begriffen wie »SAX2 Extensions« oder »SAX 2.0.2« vorfindet. Details dazu auf Megginsons Website. 

SAX ist ein Riesenerfolg. Seine Einfachheit macht die Schnittstelle schnell zu erlernen und erleichtert die Arbeit damit. Die frühen Zeiten von XML waren relativ nah an Java angelehnt, aus diesem Grund war SAX ursprünglich ein reines Java-Interface. Ein Interface ist eine spezielle Art von Klasse, bei der die Methoden nur deklariert werden. Die Implementierung ist komplett dem Entwickler überlassen. Für eine Schnittstelle wie SAX ist das ideal.

Die Begeisterung über SAX schwappte aber schnell auf die Perl-Gemeinde über, und erste Implementierungen tauchten auf CPAN auf. Allerdings gab es hier ein Problem: Perl kennt keinen ähnlich rigorosen Zwang zur Einhaltung von Vorgaben wie Java. Typsicherheit ist in Perl fast gar nicht vorhanden, und die Sprache vergibt nahezu jede Art von Inkonsistenz. Java vergleicht die Typen der Argumente von Funktionen mit denen der Schnittstelle, und zwar zur Kompilierzeit, wenn also noch alles in den Händen des Programmierers liegt. Perl akzeptiert beliebige Argumente, und das gilt bereits, bevor das Programm die Obhut des Programmierers verlassen hat, erst recht also danach. Die Definition eines Standards in Perl ist also in erster Linie eine verbale Angelegenheit. Die Implementierung hängt viel mehr vom Verständnis, der Erfahrung und Wachsamkeit des Programmieres ab.

Eine der ersten SAX-Implementierung in Perl war das Modul XML::Parser::PerlSAX von Ken McLeod. Dabei handelt es sich um eine Subklasse von XML::Parser, die den von Expat erzeugten Eventstrom in einen Strom von SAX-Events umwandelt.

  

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Perl & XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2003 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Perl & XML" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de