Umsetzung mit XSLT-Formatvorlagen

Die Standardmethode zum Umsetzen von XML-Daten in andere Formate ist die Verwendung von XSLT (Extensible Stylesheet Language Transformation). Sie können die integrierte Funktion XSLTRANSFORM verwenden, um XML-Dokumente in HTML, einfachen Text oder andere XML-Schemata zu konvertieren.

XSLT verwendet Formatvorlagen (Style-Sheets), um XML-Daten in andere Datenformate umzusetzen. Sie können ein XML-Dokument entweder ganz oder teilweise umwandeln und die Daten auswählen oder neu anordnen, indem Sie die Abfragesprache XPath und die integrierten Funktionen von XSLT verwenden. XSLT wird normalerweise verwendet, um XML in HTML umzuwandeln. Es ist jedoch auch möglich, XML-Dokumente, die einem bestimmten XML-Schema entsprechen, in Dokumente umzusetzen, die einem anderen Schema entsprechen. Darüber hinaus können XML-Daten mithilfe von XSLT auch in nicht zugehörige Formate wie beispielsweise durch Kommata begrenzten Text oder Formatierungssprachen wie beispielsweise Troff umgewandelt werden. XSLT hat zwei Hauptanwendungsgebiete:
  • Formatierung (Umsetzung von XML in HTML oder Formatierungssprachen wie beispielsweise FOP)
  • Datenaustausch (Abfragen von Daten, Reorganisieren von Daten und Umsetzen von Daten aus einem XML-Schema in ein anderes XML-Schema oder in ein Datenaustauschformat wie beispielsweise SOAP)
In beiden Fällen kann es erforderlich sein, entweder ein ganzes XML-Dokument oder nur ausgewählte Teile desselben umzusetzen. XSLT umfasst die XPath-Spezifikation, sodass beliebige Daten aus dem XML-Quellendokument abgefragt und abgerufen werden können. Eine XSLT-Schablone kann unter Umständen auch zusätzliche Informationen enthalten oder erstellen. Hierzu gehören beispielsweise Headerdaten für Filter und Anweisungsblöcke, die der Ausgabedatei hinzugefügt werden.

Funktionsweise von XSLT

XSLT-Formatvorlagen sind in XSL (Extensible Stylesheet Language), einem XML-Schema, geschrieben. XSL ist keine algorithmische Sprache (wie beispielsweise C oder Perl), sondern vielmehr eine Schablonensprache. Daher ist die Leistung von XSL einerseits zwar begrenzt, andererseits ist XSL aber gerade dadurch einzigartig für den beabsichtigten Zweck geeignet. XSL-Formatvorlagen enthalten mindestens ein Element vom Typ template (Schablone), das beschreibt, welche Aktion ausgeführt werden soll, wenn ein bestimmtes XML-Element oder eine bestimmte Abfrage in der Zieldatei gefunden wird. Ein XSLT-Schablonenelement beginnt üblicherweise mit der Angabe des Elements, für das es gilt. Beispiel:
<xsl:template match="product">
Dieses Element deklariert, dass der Inhalt dieser Schablone verwendet wird, um den Inhalt einer beliebigen Markierung vom Typ <product> zu ersetzen, die in der XML-Zieldatei gefunden wird. Eine XSLT-Datei besteht aus einer Liste solcher Schablonen in beliebiger Reihenfolge.
Das nachstehende Beispiel zeigt typische Elemente einer XSLT-Schablone. In diesem Fall besteht das Ziel aus XML-Dokumenten, die Inventarinformationen enthalten wie beispielsweise den folgenden Eintrag zu einem Eiskratzer (Ice Scraper):
<?xml version="1.0"?>
<product pid="100-201-01">
   <description>
      <name>Ice Scraper, Windshield 4 inch</name>
      <details>Basic Ice Scraper 4 inches wide, foam handle</details>
      <price>3.99</price>
   </description>
</product>
Dieser Eintrag enthält Informationen wie beispielsweise die Teilenummer (pid), eine Beschreibung (description) und den Preis (price) eines Eiskratzers für die Windschutzscheibe. Einige dieser Informationen sind in Elementen wie beispielsweise <name> enthalten. Andere Informationen wie beispielsweise die Teilenummer sind in Attributen (in diesem Fall dem Attribut pid des Elements <product>) enthalten. Um diese Informationen als Webseite anzuzeigen, könnten Sie die folgende XSLT-Schablone anwenden:
<?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"/>
   <xsl:template match="/">
       <html>
            <body>
                <h1><xsl:value-of select="/product/description/name"/></h1>
                <table border="1">
                        <th>
       <xsl:apply-templates select="product"/>
                        </th>
                     </table>
            </body>
       </html>
   </xsl:template>
     <xsl:template match="product">
        <tr>
                   <td width="80">product ID</td>
                   <td><xsl:value-of select="@pid"/></td>
              </tr>
              <tr>
                   <td width="200">product name</td>
                   <td><xsl:value-of select="/product/description/name"/></td>
              </tr>
              <tr>
                   <td width="200">price</td>
                   <td>$<xsl:value-of select="/product/description/price"/></td>
              </tr>
              <tr>
                   <td width="50">details</td>
                   <td><xsl:value-of select="/product/description/details"/></td>
              </tr>
  </xsl:template>
</xsl:stylesheet>
Wenn ein XSLT-Prozessor sowohl die oben dargestellte Schablone als auch die oben dargestellten Zieldokumente als Eingabe erhält, wird das folgende HTML-Dokument ausgegeben:
<html>
<body>
<h1>Ice Scraper, Windshield 4 inch</h1>
<table border="1">
<th>
<tr>
<td width="80">product ID</td><td>100-201-01</td>
</tr>
<tr>
<td width="200">product name</td><td>Ice Scraper, Windshield 4 inch</td>
</tr>
<tr>
<td width="200">price</td><td>$3.99</td>
</tr>
<tr>
<td width="50">details</td><td>Basic Ice Scraper 4 inches wide, foam handle</td>
</tr>
</th>
</table>
</body>
</html>

Der XSLT-Prozessor prüft das eingehende XML-Dokument auf bestimmte Bedingungen (normalerweise eine Bedingung pro Schablone). Wenn eine Bedingung 'true' (wahr) ist, wird der Schabloneninhalt in die Ausgabe eingefügt. Ist der Wert der Bedingung 'false' (falsch), wird die Schablone vom Prozessor nicht berücksichtigt. Möglicherweise fügt die Formatvorlage der Ausgabe eigene Daten hinzu wie beispielsweise Markierungen und Zeichenfolge (z. B. "product ID") in der HTML-Tabelle.

XPath kann sowohl zum Definieren von Schablonenbedingungen wie in <xsl:template match="product"> als auch zum Auswählen und Einfügen von Daten aus einer beliebigen Position im XML-Datenstrom wie in <h1><xsl:value-of select="/product/description/name"/></h1>verwendet werden.

Verwendung von XSLTRANSFORM

Sie können die Funktion XSLTRANSFORM verwenden, um XSLT-Formatvorlagen auf XML-Daten anzuwenden. Wenn Sie der Funktion den Namen eines XML-Dokuments und ein XSLT-Style-Sheet bereitstellen, wendet die Funktion das Style-Sheet auf das Dokument an und gibt das Ergebnis zurück.

Falls Sie die Dokumentfunktion (document) von XSLT in Ihrer XSLT-Formatvorlage angeben, stellen Sie sicher, dass in der Registry-Variable DB2_XSLT_ALLOWED_PATH die Verzeichnisse festgelegt sind, von denen Sie weitere XML-Dokumente herunterladen können.