XSLT
(Auszug aus "Perl & XML" von Erik T. Ray & Jason McIntosh)
Wenn Sie sich XPath als Syntax zur Formulierung regulärer Ausdrücke vorstellen, dann ist XSLT das Analogon zur Ersetzung von Pattern. XSLT ist eine Programmiersprache, die selbst auf XML basiert und die Transformation eines Eingabedokuments in ein Ausgabedokument beschreibt. Man kann einige erstaunliche Dinge mit XSLT anfangen, zum Beispiel eine XML-Datei in HTML umwandeln oder Spalten einer Tabelle summieren. Tatsächlich macht es XSLT in manchen Fällen überflüssig, auch nur eine einzige Zeile Code in Perl zu schreiben. Man benötigt lediglich XSLT und eine der zahlreichen Transformationsmaschinen, die für die Arbeit mit XSLT zur Verfügung stehen.
Ein XSLT-Transformationsskript ist selbst ein XML-Dokument. Es besteht vor allem aus einer Liste von Regeln, die als Templates bezeichnet werden und die Behandlung je eines bestimmten Knotentyps beschreiben. Ein Template hat zwei Aufgaben: Es beschreibt einen Teil der zu generierenden Ausgabe sowie die weitere Verarbeitung des Dokuments.
Die Ursprünge von XSLT
XSLT steht für »Extensible Stylesheet Language[:] Transformations«. Der Name will sagen, daß es sich um eine Komponente der »Extensible Stylesheet Language« (XSL) handelt, die sich die Konvertierung eines eingegebenen XML-Dokuments zur Aufgabe gesetzt hat. Die andere Komponente ist XSL-FO (FO steht für »Formatting Objects«), eine spezielle XML-Variante, die sehr stark präsentationsorientiert ist. Ein XSL-FO-Dokument enthält üblicherweise den ursprünglichen Inhalt des Eingabedokuments und zusätzlich eine Reihe von sehr detaillierten Anweisungen für die Darstellung dieses Inhalts.
Obwohl XSLT an den Namen XSL gebunden ist, kann man XSLT für weit mehr einsetzen als für die Formatierung zwecks letztendlicher Ausgabe. XSLT ist ein sehr wichtiges XML-Werkzeug, das die Konvertierung eines XML-Dokuments in ein anderes XML-Dokument recht einfach macht. Aus diesem Grund hat sich das W3C auch dafür entschieden, die diesbezügliche Empfehlung frühzeitig zu verabschieden, d. h. einige Jahre bevor der Rest von XSL soweit war.
Die Spezifikation sowie einige Links auf Tutorien über XSLT finden Sie auf der W3C-Homepage.
Schauen wir uns das Skript im folgenden Beispiel an.
Beispiel: Ein XSLT-Stylesheet
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="html">
<xsl:text>Titel: </xsl:text>
<xsl:value-of select="head/title"/>
<xsl:apply-templates select="body"/>
</xsl:template>
<xsl:template match="body">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="h1 | h2 | h3 | h4">
<xsl:text>Kopfzeile: </xsl:text>
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="p | blockquote | li">
<xsl:text>Inhalt: </xsl:text>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
Das Transformationsskript liest ein HTML-Dokument und konvertiert es in einen ASCII-Text mit zusätzlichen Markierungen. Jedes Element <xsl:template> ist eine Regel, die auf einen Teil des XML-Dokuments paßt. Sein Inhalt besteht aus Instruktionen an den XSLT-Prozessor über den auszugebenden Text. Anweisungen wie <xsl:apply-templates> übergeben die Kontrolle an andere Elemente und deren Templates, in den meisten Fällen handelt es sich um die Kindelemente. Wir wollen die Syntax von XSLT nicht im Detail behandeln, da es ganze Bücher zu diesem Thema gibt. Von Bedeutung ist dagegen, wie man XSLT und Perl kombinieren kann, um die geballte Kraft beider Technologien bei der Verarbeitung von XML einzusetzen.
Vielleicht stellt sich Ihnen die Frage: »Warum sollte ich noch eine andere Sprache benutzen, wenn ich dasselbe doch mit Perl tun kann?« Das ist insofern richtig, als Ihnen XSLT keine prinzipiell neuen Möglichkeiten gibt. Ihr Wert liegt in der Einfachheit der Sprache und ihrem spezifischen Zweck. Man kann die Grundzüge von XSLT in einigen Stunden erlernen, in Perl würde selbst ein erfahrener Programmierer in derselben Zeit vielleicht das Analogon zu einem komplizierten Template entwickeln, das mit XSLT in einigen Minuten hingeschrieben ist. Unsere Erfahrung mit dem Schreiben von Software für XML besagt, daß XSLT vor allem dann zweckmäßig ist, wenn eine Datei später von Leuten weiterbetreut werden soll, die nicht selbst Programmierer sind. Man tut also gut daran, XSLT nicht als Konkurrent von Perl zu sehen, sondern als wertvolle Ergänzung, die man von Perl aus nach Belieben einsetzt.
Wie baut man als Perl-Hacker nun XSLT in ein eigenes Programm ein? Das nächste Beispiel zeigt, wie man die XSLT-Transformation eines Dokuments mit XML::LibXSLT durchführt. Dieses Modul von Matt Sergeant ist eine Schnittstelle zu der superschnellen GNOME-Bibliothek LibXSLT und eine von mehreren XSLT-Lösungen, die man im CPAN-Werkzeugkasten findet.
Anmerkung: Andere Module sind zum Beispiel das in Perl geschriebene Modul XML::XSLT oder XML::Sablotron, das auf den C-Bibliotheken Expat und Sablotron basiert (letzteres ist eine XSLT-Bibliothek von der Ginger Alliance).
Beispiel: Ein Programm zur Durchführung einer XSLT-Transformation
use XML::LibXSLT;
use XML::LibXML;
# Kommandozeilenargumente sind das Stylesheet und die Eingabedatei
my( $style_file, @source_files ) = @ARGV;
# Initialisierung des Parsers und des XSLT-Prozessors
my $parser = XML::LibXML->new( );
my $xslt = XML::LibXSLT->new( );
my $stylesheet = $xslt->parse_stylesheet_file( $style_file );
# Für alle Eingabedateien: parsen, transformieren und Ergebnis ausgeben
foreach my $file ( @source_files ) {
my $source_doc = $parser->parse_file( $source_file );
my $result = $stylesheet->transform( $source_doc );
print $stylesheet->output_string( $result );
}
Beachten Sie, daß das Stylesheet in diesem Programm nur einmal gelesen wird. Es verbleibt anschließend im Hauptspeicher, um immer wieder verwendet werden zu können. Darüber hinaus gibt Ihnen das die Möglichkeit, das Stylesheet und das zu bearbeitende Dokument an Ihre eigenen Bedürfnisse anzupassen:
- Vor- oder Nachbearbeitung des Textes mit Suche-Ersetze-Funktionen.
- Die Transformation auf einen Teil des Dokuments einschränken.
- Die Anwendung eines Iterators auf den Baum, um einige Knoten einer Sonderbehandlung zu unterwerfen, die in XSLT zu umständlich wäre.
Die Möglichkeiten sind endlos, und wie immer gilt das Motto von Perl: Es gibt mehr als einen Weg, etwas zu tun. (TMTOWTDI, There’s more than one way to do it.)
<< 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