Der Verwandlungskünstler

(Montero Pineda, Manuel: Der Verwandlungskünstler, in: technische kommunikation, Heft 2, 2018).

Um XML-Dateien in andere Formate umzuwandeln, zum Beispiel PDF oder HTML, werden bestimmte Regeln gebraucht. Diese lassen sich mit XSLT definieren.

Bei XSLT handelt es sich um eine Programmiersprache, die zur Transformation von XML-Dokumenten verwendet wird. Die Abkürzung steht für eXtensible Stylesheet Language Transformation und ist eine Untermenge von XSL. Zu dieser Untermenge gehören auch XPath und XSL-FO. Das W3C veröffentlichte die Programmiersprache 1999 und entwickelte sie seitdem ständig weiter. Die aktuelle Version ist die Version 3.0. Am häufigsten wird allerdings Version 2.0 verwendet.

Wozu dient XSLT?

XSLT baut auf der logischen Baumstruktur von XML-Dokumenten auf und dient dazu, Umwandlungsregeln zu definieren. Damit ist es möglich, XML-Dokumente neu zu ordnen oder Datenmigration vollautomatisch durchzuführen. Ein weiterer, sehr wichtiger Einsatzbereich ist das automatisierte Publishing von XML-Daten. Mittels XSLT lässt sich aus XML zum Beispiel HTML, PDF, EPUB oder HTML-Help produzieren.

Vereinfacht dargestellt, läuft XSLT folgendermaßen ab: XML-Dokumente werden mittels XSLT und XPath zu XHTML umgewandelt. Das Programm, das die Verarbeitung durchführt, nennt man einen XSLT-Prozessor. Auf dem Markt gibt es eine Reihe von XSLT-Prozessoren, die alle kostenlos sind. Zu den bekanntesten Prozessoren gehören MSXML, Xalan und Saxon.

Die Verarbeitungsweise von XSLT soll ein Beispiel veranschaulichen (siehe die folgende Abbildung). Zu sehen sind eine XML-Datei und ein XSLT-Stylesheet, das Gedichte verarbeitet und in HTML umwandelt.

Beispiel für die Transformation von XML zu HTML

Abbildung: Beispiel für die Transformation von XML zu HTML.

Wenn wir die XML-Datei im Editor betrachten, ist erkennbar, dass sie verschiedene Gedichte mit dem Element <Gedicht> enthält: Unter anderem eines von Rainer Maria Rilke. Weiter unten folgt eines von Goethe, eines von Brecht und eines von Wilhelm Busch. Der jeweilige Autor (<Autor>) ist mit Vornamen (<Vorname>) und Nachnamen (<Nachname>) angegeben. Darüber hinaus gibt es einen Titel (<Titel>), einen optionalen Untertitel (<Untertitel>) und Strophen (<Strophe>) mit diversen Versen (<Vers>) – siehe das folgende Code-Beispiel.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Gedichtsammlung SYSTEM "Gedicht.dtd">
 <Gedichtsammlung>
  <Gedicht Erscheinungsjahr="1905" Sprache="de">
    <Autor>
      <Vorname>Rainer Maria</Vorname>
      <Nachname>Rilke</Nachname>
    </Autor>
    <Titel>Der Panther</Titel>
    <Untertitel>Im Jardin des Plantes, Paris</Untertitel>
    <Strophe>
      <Vers>Sein Blick ist vom Vorübergehn der Stäbe</Vers>
      <Vers>so müd geworden, daß er nichts mehr hält.</Vers>
      <Vers>Ihm ist, als ob es tausend Stäbe gäbe</Vers>
      <Vers> und hinter tausend Stäben keine Welt.</Vers>
    </Strophe>
 
    <Strophe>
      <Vers>Der weiche Gang geschmeidig starker Schritte,</Vers>
      <Vers> der sich im allerkleinsten Kreise dreht,</Vers>
      <Vers> ist wie ein Tanz von Kraft um eine Mitte,</Vers>
      <Vers>in der betäubt ein großer Wille steht.</Vers>
    </Strophe>
    <Strophe>
      <Vers> Nur manchmal schiebt der Vorhang der <Fett>Pupille</Fett></Vers>
      <Vers>sich lautlos auf -. Dann geht ein Bild hinein,</Vers>
      <Vers> geht durch der <Fett>Glieder</Fett> angespannte Stille -</Vers>
      <Vers>und hört im <Fett>Herzen</Fett> auf zu sein.</Vers>
    </Strophe>
  </Gedicht>
 
  <Gedicht Erscheinungsjahr="1799" Sprache="de">
    <Autor>
      <Vorname>Johann Wolfgang</Vorname>
      <Nachname> von Goethe</Nachname>
    </Autor>
    <Titel>Der Zauberlehrling</Titel>
    <Strophe>
      <Vers>Hat der alte Hexenmeister</Vers>
      <Vers>Sich doch einmal wegbegeben!</Vers>
      <Vers>Und nun sollen seine Geister</Vers>
      <Vers>Auch nach meinem Willen leben.</Vers>
      <Vers>Seine Wort und Werke</Vers>
      <Vers>Merkt ich und den Brauch,</Vers>
      <Vers>Und mit Geistesstärke</Vers>
      <Vers>Tu ich Wunder auch.</Vers>
    </Strophe>
    ...

  </Gedicht>
</Gedichtsammlung>

Code-Beispiel: Die XML-Datei der Gedichtsammlung mit den verschiedenen Elementen.

Wenn wir uns im nächsten Schritt das XSLT-Stylesheet ansehen, werden wir die eben genannten Elementnamen wiederfinden. Dazu befassen wir uns zunächst aber mit der Funktionsweise von XSLT.

Wie funktioniert XSLT?

Mit XSLT kann man Inhalte suchen und ersetzen. Auf diese Weise können wir beispielsweise das Element <Autor> durch einen <br/>-Tag und ein <h4> ersetzen (siehe das folgende Code-Beispiel).

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output encoding="iso-8859-1" version="1.0"/>
  <xsl:template match="Gedichtsammlung">
    <html>
      <body><h1>Gedichtsammlung</h1> 
        <xsl:apply-templates/>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="Autor">
    <br/>
    <h4>
      <xsl:apply-templates/>
    </h4>
  </xsl:template>
  <xsl:template match="Vorname">
    <xsl:apply-templates/>
    <xsl:text> </xsl:text>
  </xsl:template>
  <xsl:template match="Nachname">
    <xsl:apply-templates/>
  </xsl:template>
  <xsl:template match="Titel">
    <h2>
      <xsl:apply-templates/>
    </h2>
  </xsl:template>
  <xsl:template match="Strophe">
    <p>
      <xsl:apply-templates/>
    </p>
  </xsl:template>
  <xsl:template match="Vers">
    <xsl:apply-templates/>
    <br/>
  </xsl:template>
  <xsl:template match="Gedicht">
    <xsl:apply-templates/>
  </xsl:template>
  <xsl:template match="Fett">
    <b>
      <xsl:apply-templates/>
    </b>
  </xsl:template>
  <xsl:template match="Untertitel">
    <h4>
      <xsl:apply-templates/>
    </h4>
  </xsl:template>
</xsl:stylesheet>

Code-Beispiel: Ein Beispiel dafür, wie das Element <Autor> mittels einer XSLT-Regel ersetzt werden kann.

Im weiteren Verlauf wird aus einem <Titel>-Element ein <h2> gemacht und aus <Strophe> ein <p>-Element, aus jedem <Vers> ein <br/>, aus <Fett> ein <b> oder aus <Untertitel> ein <h4>.

Wie genau funktioniert nun die Verarbeitung? Der XSLT-Prozessor durchläuft die Datei und sucht nach einer Regel für das jeweilige Element, zum Beispiel <Titel>. Wenn es eine Regel in Form eines Templates gibt, dann führt der Prozessor sie aus. Im Stylesheet wurde in diesem Fall für <Titel> die Regel hinterlegt: Mache ein <h2> daraus (siehe das folgende Code-Beispiel).

<xsl:template match="Titel">
  <h2>
    <xsl:apply-templates/>
  </h2>
</xsl:template>

Code-Beispiel: Die Umwandlungsregel für <Titel> im Stylesheet.

Wenn wir das Ganze ausprobieren wollen, müssen wir dem Prozessor die XML-Datei und das Stylesheet bekannt geben. Im oxygen XML Editor funktioniert das wie folgt: Man muss eine neue Transformation anlegen, das Stylesheet öffnen und die entsprechende XML-Datei auswählen. Über den Reiter Ausgabedatei kann noch festgelegt werden, dass die Datei im Editor geöffnet werden soll. Jetzt muss die Verarbeitung nur noch gestartet werden.

Das Ergebnis der Verarbeitung erscheint in einer neuen Datei (siehe die folgende Abbbildung).

Das Ergebnis der Transformation

Abbildung: Das Ergebnis der Transformation.

Wenn wir das Ergebnis betrachten, dann erkennen wir, dass aus dem <Titel>-Element ein <h2>-Element, aus dem <Untertitel>-Element ein <h4> und aus der <Strophe> ein <p> geworden ist. Genauso, wie es im Stylesheet definiert wurde. Die Ansicht im Internetbrowser zeigt die folgende Abbildung.

Die Browser-Ansicht der Beispiel-Datei

Abbildung: Die Browser-Ansicht der Beispiel-Datei.

Um XML-Dateien in andere Formate umzuwandeln, hat sich XSLT zum Standardweg etabliert. Technische Redakteure haben dazu kaum eine Alternative, allerdings funktioniert der Weg auch sehr gut.

   

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2018 tcworld GmbH
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieser Artikel aus der Fachzeitschrift "technische kommunikation" (Heft 2, 2018) 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.

tcworld GmbH, Rotebühlstraße 64, 70178 Stuttgart, info@tekom.de, www.tekom.de