- XML-Parser
-
Ein XML-Prozessor ist eine Software zum Einlesen und Verarbeiten von XML-Dokumenten. Häufig wird auch der Begriff XML-Parser synonym verwendet, obwohl dieser eher ein Modul im Software-Baustein „XML-Prozessor“ ist, welches das Einlesen durchführt.
Inhaltsverzeichnis
Allgemeines
Ein XML-Prozessor besitzt im Wesentlichen drei Komponenten:
- den Parser - er bildet das Frontend zu den zu verarbeitenden Dokumenten
- die Verarbeitungskomponente - sie implementiert die eigentliche Geschäftslogik im Sinne einer Modelltransformation
- den Ausgabeprozessor - er sorgt für die Persistierung der Zieldokumente im geeigneten Format
Dabei ist eigentlich nur Parser und Ausgabeprozessor XML-spezifisch. Die Verarbeitungskomponente kann eigentlich beliebige Modelle verarbeiten, weist aber durchaus auch XML-spezifische Merkmale auf z. B.
- indem sie den Zugriff auf das sogenannte Post Schema Validation Info Set PSVI erlaubt.
- indem XML-Konstrukte in der Verarbeitungssprache konzeptualisiert sind (node, element, entity …)
XML-Parser
XML-Parser in den Prozessoren können anhand zweier Kriterien unterschieden werden:
- validierend oder nichtvalidierend
- Art der Schnittstelle für den Zugriff auf das Dokument (als Baum ähnlich wie DOM oder sequentiell z. B. SAX)
Im Grunde können auch Parser eingesetzt werden, die andere Formate einlesen oder gar Datenbanken abfragen. Das ist hilfreich für Migrationen von Altdaten nach XML.
Nichtvalidierende Parser kontrollieren lediglich, ob das Dokument wohlgeformt ist, sprich ob es den Spezifikationen des W3C entspricht. Validierende Prozessoren hingegen prüfen zusätzlich die Konformität gegenüber einer DTD oder einer Schemasprache, wie z.B. XML-Schema oder RelaxNG.
Verarbeitungskomponente
Die Verarbeitungskomponente implementiert in der Regel eine eigene, auf das Verarbeitungsparadigma optimierte Programmiersprache (z. B. DSSSL, xslt). Dabei ist zu unterscheiden:
- sequentielle Verarbeitung - Man kann Regeln für das betreten/verlassen eines Knotens angeben. In diesen Regeln wird die spezifische Verarbeitung formuliert. Der Inhalt des Dokumentes steht nur so weit zur Verfügung, wie es bislang eingelesen bzw. verarbeitet ist.
- baumorientierte Verarbeitung - Die Verarbeitungskomponente traversiert automatisch den (bzw. die) Dokumentbäume und konstruiert den Baum für das Ausgabedokument. Die Traversierung kann dabei auf dem Quellbaum (z. B. bei XSLT) erfolgen oder im Zielbaum (MetaMorphosis). Man spricht daher von „sourcedriven“ bzw. „targetdriven“ Prozessoren. Zielgetriebene Prozessoren sind nicht ganz so einfach zu durchdringen, bieten jedoch wesentlich mehr Flexibilität.
Besonders vorteilhaft in dem Ansatz ist es allerdings, die Verarbeitung (Transformation) weitgehend unabhängig von der konkreten Syntax des Ausgabeformates zu formulieren. Die Spezifika des gewünschten Ausgabeformates (z. B. Zeilenaufteilung, Einrückungen usw.) können im Ausgabeprozessor behandelt werden. Damit wird es zuweilen möglich, mit einer Transformation mehrere Ausgabeformate zu bedienen.
Dem Wesen nach handelt es sich bei XML-Prozessoren also um ein ähnliches (wenn auch schon vor dem MDA-Hype definiertes) Vorgehen wie bei der MDD, bei der ebenfalls eine formal beschriebene Modelltransformation stattfindet und das Einlesen bzw. Serialiseren des Modells in eigenen Prozessoren stattfindet. Daher ist durchaus eine Sprachverwandtschaft zwischen XML-Prozessoren und Modelltransformatoren zu erkennen. Die Rolle der Metamodelle wird dabei von der DTD bzw. dem XML-Schema wahrgenommen. Die Modellpersistierung erfolgt in XML.
Ausgabekomponente
Die Ausgabekomponente serialisert den von der Verarbeitungskomponente bereitgestellten Dokumentenbaum nach XML oder in ein anderes gewünschtes Textformat (z. B. TeX). XML-Spezifika wie Handhabung von Sonderzeichen, Leerzeichenbehandlung usw. kann der Ausgabeprozessor übernehmen. Bei leistungsfähigen XML-Prozessoren ist diese Ausgabekomponente flexibel konfigurierbar bzw. programmierbar.
Implementierungen
- XSLT
- MetaMorphosis
- JADE
Literatur
- Meike Klettke, Holger Meyer: XML & Datenbanken Konzepte, Sprachen und Systeme. 2003, ISBN 3-89864-148-1.
Wikimedia Foundation.