Back To Top

Beispielanwendung mit XSLT


Beispiel einer XML-Anwendung

Comelio-Blog XSLT BeispielanwendungUm einen allgemeinen und allerersten Eindruck von XSLT und den zusammenspielenden Komponenten aus XML-Instanzdokument, XML-Schema-Dokument mit Modellierungsregeln und natürlich dem XSLT-Transformationsdokument zu gewinnen, stellen wir eine sehr einfache Beispieltransformation vor. Es wird ganz klassisch eine XML- in eine HTML-Datei umgewandelt. Sofern man einen konkreten Parser oder eine Entwicklungsumgebung verwendet, erhält man normalerweise tatsächlich eine handfeste Datei, die man speichern könnte. Öffnet man die XML-Datei mit der verknüpften XSLT-Datei allerdings in einem Browser, so täuscht der Browser vor, eine HTML-Seite anzuzeigen. Wechselt man dagegen in den zugehörigen Quelltext, sieht man, dass der Browser in Wirklichkeit tatsächlich nur eine HTML-Ansicht und keine neue Datei in HTML-Format erzeugt.

Folgende XML-Datei enthält eine Liste mit Mitarbeitern, die bei der RuhrFon GmbH arbeiten. Es gibt in dieser Datei zwei Verknüpfungen zu externen Dateien. Die wichtigste von ihnen ist die Prozessoranweisung, die über das href-Attribut eine XSLT-Datei mit der Endung .xslt aufruft. Die Verknüpfung erfolgt entweder absolut oder relativ. So, wie sich der Link nun in der Datei präsentiert, muss die Datei sich im gleichen Ordner befinden. Möchte man einen absoluten Pfad angeben, wäre dies für die gerade verwendete Datei und für den gerade verwendeten Rechner C:\..\XSLT. Das zusätzliche type-Attribut könnte Ihnen aus HTML bekannt vorkommen. Es verknüpft dort ein CSS-Dokument mit dem Wert text/css. Im XSLT-Fall dagegen ist der Wert text/xsl.

Mehr Besonderheiten oder gar Ungewöhnlichkeiten sind in dieser Datei nicht zu vermelden. Sie enthält mehrere Mitarbeiter-Elemente, die wiederum ein Name- und ein Funktion-Element mit Kind- und Attributknoten wie im Fall Name oder nur einen Textknoten wie im Fall Funktion besitzen.

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="132_01.xslt"?>
<Mitarbeiterliste xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="132_01.xsd">
  <Mitarbeiter>
    <Name Anrede="Frau">
      <Vorname>Birte</Vorname>
      <Nachname>Sonnenschein</Nachname>
    </Name>
    <Funktion>Buchhaltung</Funktion>
  </Mitarbeiter>
  <Mitarbeiter>
    <Name Anrede="Frau">
      <Vorname>Susanne</Vorname>
      <Nachname>Rollstein</Nachname>
    </Name>
    <Funktion>Kundenberater</Funktion>
  </Mitarbeiter>
...

Mitarbeiterliste

Sie wird durch die nachfolgende XML-Schema-Datei beschrieben.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified" 
 xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Mitarbeiterliste">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Mitarbeiter" 
         type="MitarbeiterType" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="NameType">
    <xs:sequence>
      <xs:element name="Vorname" type="xs:string"/>
      <xs:element name="Nachname" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="Anrede" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Frau"/>
          <xs:enumeration value="Herr"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="MitarbeiterType">
    <xs:sequence>
      <xs:element name="Name" type="NameType"/>
      <xs:element name="Funktion">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="Buchhaltung"/>
            <xs:enumeration value="Geschäftsführer"/>
            <xs:enumeration value="Kundenberater"/>
            <xs:enumeration value="Marketing"/>
            <xs:enumeration value="Sekretariat"/>
            <xs:enumeration value="Technik"/>
            <xs:enumeration value="Webseite"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Mitarbeiterliste

Dokumentbaum Mitarbeiterliste

Um eine HTML-Datei zu erhalten, lässt sich folgende XSLT einsetzen. Ohne auf die genaue Syntax eingehen zu wollen, erkennt man vielleicht jetzt schon den grundsätzlichen Aufbau einer solchen Datei. Es handelt sich, wie bereits kurz erwähnt, ebenfalls um eine XML-Datei. Sie besteht aus mehreren template-Elementen, die unterschiedliche Bezeichner – nämlich Mitarbeiterliste und Name – aus dem Quelldokument aufrufen. Weiter erkennt man die Verwendung von HTML-Elementen für das Erzeugen des eigentlichen Dokuments und der Listenpunkte. Neben weiteren Elementen aus der XSLT-Syntax sind noch ungewöhnlich kryptische Zeichen zu identifizieren, die möglicherweise an Pfadangaben in einem Dateisystem erinnern. Das sind die für jede Transformation sehr wichtigen XPath-Ausdrücke, die Elemente und Attribute lokalisieren.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" version="1.0" 
   encoding="ISO-8859-1" indent="yes"/>
  <xsl:template match="/Mitarbeiterliste">
    <html>
      <head>
        <title>
          <xsl:value-of select="local-name(/*)"/>
        </title>
      </head>
      <body>
        <h1>
          <xsl:value-of select="local-name(/*)"/>
        </h1>
        <ul>
          <xsl:for-each select="Mitarbeiter">
            <li>
              <xsl:apply-templates select="Name"/>
              <br/>
              <xsl:text>Funktion: </xsl:text>
              <xsl:value-of select="Funktion"/>
            </li>
          </xsl:for-each>
        </ul>
      </body>
    </html>
  </xsl:template>
  <!-- Vorlage für Element Name -->
  <xsl:template match="Name">
    <xsl:value-of select="@Anrede"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="Vorname"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="Nachname"/>
  </xsl:template>
</xsl:stylesheet>

Umwandlung mit XSLT

Man erhält als Ergebnis ein HTML-Dokument, in dem die Mitarbeiterliste tatsächlich auch eine formatierte Liste in HTML ist. Die Inhalte wie Vor- und Nachname werden aus den Elementen und Attributen genommen. Zusätzlich liest man den Namen des Elements Mitarbeiterliste aus und schreibt diese Zeichenkette in das Zieldokument.

<html>
  <head>
    <title>Mitarbeiterliste</title>
  </head>
  <body>
    <h1>Mitarbeiterliste</h1>
    <ul>
      <li>Frau Birte Sonnenschein<br />Funktion:
          Buchhaltung</li>
      <li>Frau Susanne Rollstein<br />Funktion:
          Kundenberater</li>
      <li>Herr Martin Dünn<br />Funktion: Kundenberater</li>
...
    </ul>
  </body>
</html>

Ergebnisdokument

Die genaue Betrachtung des HTML-Quelltextes ist in diesem Fall genauso wichtig wie bei Webprogrammierung mit (Skript-)Sprachen, da die Browser ja relativ nachsichtig sind, was falsches HTML anbetrifft.

Ergebnis im Browser