Transformationen
XML und XSLT
Großprojekt Zeitschrift
Als drittes Beispiel wagen wir uns an eine stark vereinfachte Anwendung für die Realisierung einer Zeitschrift in XML; die DTD finden Sie in Listing 5.
Hier gibt es einige Besonderheiten zu beachten: Das Element absatz (Zeile 10) kann sowohl Text vom Typ #PCDATA sein als auch die Elemente listing und begriff enthalten, damit der Autor eines Artikels in einem Absatz auch Listings und Glossareinträge markieren kann.
Alle anderen Elemente werden wie gewohnt definiert, das Wurzel-Element heißt zeitschrift.
Listing 5
Zeitschriften-DTD
1 <!ELEMENT zeitschrift (artikel)*> 2 <!ELEMENT artikel (rubrik,titel,autor,vorspann,text)*> 3 <!ELEMENT rubrik (#PCDATA)> 4 <!ELEMENT titel (#PCDATA)> 5 <!ELEMENT autor (#PCDATA)> 6 <!ELEMENT vorspann (#PCDATA)> 7 <!ELEMENT text (zwischenueberschrift | erklaerung | absatz )> 8 <!ELEMENT zwischenueberschrift (#PCDATA)*> 9 <!ELEMENT erklaerung (#PCDATA)> 10 <!ELEMENT absatz (#PCDATA | listing | begriff)*> 11 <!ELEMENT listing (#PCDATA)> 12 <!ELEMENT begriff (#PCDATA)>
Eine XML-Datei für eine – zugegeben sehr rudimentäre – Zeitschrift, die aus genau einem Artikel besteht, finden Sie in Listing 6. In Zeile 14 sehen Sie, wie das listing-Element innerhalb eines <absatz /> verwendet wird.
Listing 6
Rudimentäre Zeitschrift
1 <?xml version = '1.0' encoding="iso-8859-1" ?> 2 <!DOCTYPE zeitschrift SYSTEM "zeitschrift.dtd"> 2 <?xml-stylesheet type="text/xsl" href="zeitschrift.xsl" ?> 3 <zeitschrift> 4 <artikel> 5 <rubrik>Programmierung</rubrik> 6 <titel>BASIC für Anfänger</titel> 7 <autor>Kalle Schlaumeier</autor> 8 <vorspann>BASIC ist wieder groß in Mode.</vorspann> 9 10 <absatz> 11 BASIC ist schon uralt. Bereits in der PC-Steinzeit haben 12 Programmierer in dieser Sprache Programme geschrieben. Das 13 berühmte Hallo-Welt-Beispiel sieht in BASIC so aus: 14 <listing>15 print "Hallo, Welt!"</listing> 15 </absatz> 16 <zwischenueberschrift>Geschichte</zwischenueberschrift> 17 <absatz> 18 Selbst in der Zeit von modernen <begriff>GUI</begriff>- 19 Toolkits hat eine Sprache wie BASIC durchaus noch ihre Daseinsberechtigung. 20 </absatz> 21 <erklaerung> GUI: Graphical User Interface - Grafische Benutzerschnittstelle. 22 </erklaerung> 23 24 </artikel> 25 </zeitschrift>
Das Listing eines Stylesheets für die Online-Ausgabe unserer imaginären Zeitschrift ist zu umfangreich, um es hier abdrucken zu können. Sie finden es daher auf der Heft-CD.Die Formatierung des Root-Elements erfolgt wie inzwischen gewohnt. Um die Verschachtelung der Tags umzusetzen, verwenden wir den XSL-Befehl <xsl:apply-templates />:
<xsl:template match="/">
<html><head><title>Zeitschrift</title>
</head><body bgcolor="ffffff">
<xsl:apply-templates />
</body></html>
</xsl:template>Mit diesem Befehl weisen Sie den Parser an, Vorlagen zu verwenden, die außerhalb dieser <apply-templates />-Anweisung stehen. Der Parser durchsucht daraufhin das Stylesheet nach einer passenden template-Definition und verwendet die passende Vorlage.
Für das Element rubrik etwa findet sich folgende Definition:
<xsl:template match="rubrik"> <h4><xsl:value-of select="." /></h4> </xsl:template>
Immer, wenn der Parser innerhalb der XML-Datei auf ein Element dieses Namens trifft, wird er es entsprechend dieser Definition umwandeln.
Bei einteiligen HTML-Tags innerhalb von XSL, wie z. B. <hr> zum Einfügen einer Linie oder <img> zum Einbinden von Grafiken, gilt es für HTML-Gewöhnte, sich etwas umzustellen:
<xsl:template match="erklaerung"> <p> <hr />[…] </p> </xsl:template>
Derartige Tags müssen – anders als in alten HTML-Versionen – stets von einem Ende-Tag abgeschlossen werden, da es in XML keine "offenen" Tags geben darf. Selbstverständlich ist dabei auch die XML-Kurzschreibweise für leere Tags (also <hr /> oder <img />) erlaubt.
Wozu das Ganze?
Auf diese Mühsal folgt die Ernüchterung: All diese Beispiele ließen sich mit weniger Aufwand direkt in HTML realisieren. Warum also die Umstände? Mit XML/XSLT trennen Sie Daten und Formatierung so mühelos wie vollständig. Statt in einer komplexen, mit Formatierungsinformationen überfüllten einfachen HTML-Datei herumzustochern, um deren Aussehen im Browser zu ändern, passen Sie lediglich das Stylesheet an und lassen die Daten in Ruhe. Zudem ist es mit XSLT möglich, aus einer Datenquelle verschiedene Ausgabeformate – nicht nur HTML – zu erzeugen.
Diesen Vorteil nutzt etwa das KDE-Projekt. Statt für die Programmdokumentation PDF- und HTML-Versionen getrennt zu pflegen, wird die in einem XML-Format geschrieben: DocBook. Die Konvertierung dieser Texte nach HTML oder PDF übernimmt der Prozessor Jade, der, anders als Saxon, neben der Transformation von XML in HTML auch noch andere Formate erzeugen kann, aber dafür wesentlich schwieriger zu bedienen ist.
Eine Anleitung zum Schreiben von Dokumentation für KDE finden Sie unter [5], während [6] beschreibt, welche Programme Sie zum Transformieren der XML-Daten in Dokumente für die KDE-Online-Hilfe benötigen.
Um aus einer DocBook-Datei eine Sammlung von HTML-Dateien zu machen, steht Ihnen das Programm docbook2html zur Verfügung, das im Paket kdelibs enthalten ist. Der Befehl
docbook2html \ -c /usr/share/apps/ksgmltools/catalog \ -d /usr/share/apps/ksgmltools/stylesheets/kde.dsl#html \IhreDatei.docbook
ruft das Konvertierungsprogramm auf, das aus der XML-Datei IhreDatei.docbook eine Reihe von HTML-Dateien erzeugt. Der Parameter -c verweist auf das Verzeichnis, das die DTD enthält, -d sagt dem Parser, in welchem Verzeichnis die Stylesheets zu finden sind.
Unter [7] und [8] finden Sie übrigens eine ausführliche Einführung in XSLT, die auch Aspekte wie Links und Einbindung von Grafiken bespricht. Ausführliche Informationen über XPath liefert [9] – genügend Stoff, der Sie bei Ihrer nunmehr bereits fortgeschrittenen Beschäftigung mit XML begleiten kann.
Glossar
XML
"EXtensible Markup Language". Eine auf SGML basierende Auszeichnungssprache, mit der Möglichkeit, eigene Tags zu definieren.
DTD
"Document Type Definition". In einer DTD werden XML-Tags und ihre Eigenschaften definiert.
XHTML
Die neueste, auf XML basierende Version der "HyperText Markup Language", der Seitenbeschreibungssprache des World Wide Webs.
JavaScript
Eine in HTML eingebettete Skriptsprache, mit der interaktive Elemente innerhalb von Web-Seiten realisiert werden können.
CSS
"Cascading Style Sheets" ermöglichen die Formatierung von HTML-Elementen.
Pfad
Der "Weg" zu einer Datei auf einem lokalen Dateisystem, also die Angabe aller Verzeichnisse, über die man "gehen" muss, um zu ihr zu gelangen.
Parser
Ein XSL-Parser ist ein Programm, das XSL-Dateien einlesen und auf Richtigkeit überprüfen kann.
Java Virtual Machine
Ein Programm, das vorkompilierte Java-Programme ausführen kann. Neben der JVM aus dem "Java Runtime Environment" (JRE) der Firma Sun gibt es als freie Alternativen Kaffe und Blackdown.
CLASSPATH
Diese Variable, der Java-Classpath, enthält die Verzeichnisse, in denen Java-Klassen, Programme und Bibliotheken abgelegt werden.
URL
"Uniform Resource Locator", die eindeutige Adressenangabe für eine Datei im Internet.
PDF
"Portable Document Format". Ein von der Firma Adobe entwickeltes Dateiformat zur Weitergabe formatierten Textes.
Infos
[1] Frank Wieduwilt: "Schachtelhelfer", LinuxUser 11/2001, S. 44 ff.
[2] Frank Wieduwilt: "Typenfrage", LinuxUser 12/2001, S. 94 f., http://www.linux-user.de/ausgabe/2001/12/094-xml/dtd-5.html
[3] http://users.iclway.co.uk/mhkay/saxon/
[4] http://www.wieduwilt.org/xml/xslt-artikel.zip
[6] http://i18n.kde.org/teams/de/
[7] http://selfhtml.teamone.de/xml/darstellung/xslgrundlagen.htm
[8] http://www.melonfire.com/community/columns/trog/article.php3?id=82
[9] http://www.melonfire.com/community/columns/trog/article.php3?id=83



