Abstract

Weil eine XML-Sprache ein bestimmtes Vokabular repräsentiert, kommt oft der Wunsch auf, verschiedene Vokabulare in etwas anderes zu transformieren. Dies kann entweder ein anderes XML-Vokabular sein (zum Beispiel beim Datenaustausch), oder beispielsweise auch HTML (zum Publizieren von Daten im Web). Mit XSL Transformations (XSLT) können solche Abbildungen leicht erstellt werden. XSLT macht sich die Mächtigkeit von XPath zunutze und setzt es in der recht einfach zu verwendenden Programmiersprache ein. Die Programme in XSLT werden oft auch Stylesheets genannt. Einfache Aufgaben können mit XSLT ohne viel Programmierarbeit erledigt werden. Es wird ausschließlich spezifiziert, wie die Bestandteile einer Ausgangssprache in die Bestandteile einer Zielsprache abgebildet werden sollen. Dennoch stellt XSLT eine Turing-vollständige Programmiersprache dar.

Inhalt (XSLT)

  1. XSLT [32]

XSLT - eine Übersicht

XSLT - eine funktionale Programmiersprache

Man unterscheidet üblicherweise zwei Programmierparadigmen.

Die objektorientierte Programmierung läßt sich nicht in diese Klassifizierung einordnen, sie ist hierzu orthogonal (vgl. Einführung in die Informatik von Barbara König ). Es gibt sowohl imperative objektorientierte Sprachen (z.B. Java, C++) als auch deklarative objektorientierte Sprachen (z.B. OCaml).

Die funktionale Programmierung ist der deklarativen Programmierung zuzuordnen.
Als Grundlage dient der Begriff der Funktion , der stark auf dem Funktionsbegriff der Mathematik basiert. Eine Funktion besitzt einen Definitionsbereich, einen Wertebereich, sowie eine Abbildungsvorschrift (Aufzählung von Wertepaaren oder Funktionsgleichung). Eine Funktionsgleichung besitzt auf der linken Seite Variablen, die mit Werten aus dem Definitionsbereich belegt werden können. Auf der rechten Seite steht ein Ausdruck mit Konstanten (z.B. e, Pi) und Funktionen. Beispiel: K(r) = pi * r 2 . In einer funktionalen Programmiersprache kann diese Funktion auf die gleiche Art und Weise definiert und benutzt werden wie in der Mathematik. (Quelle: Martin Erwig: Grundlagen funktionaler Programmierung, Oldenbourg Verlag, ISBN 3-486-25100-7)

XSLT - eine funktionale Programmiersprache

Eigenschaften funktionaler Programmiersprachen

XSLT - Verarbeitungsmodell

Quelle: XML-Vorlesung von Erik Wilde

Ein erstes XSLT-Programm

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>

Ein erstes XSLT-Programm - Ausführen

Ein erstes XSLT-Programm - Das Ergebnis

XSLT - Transformationsschablonen

Ein zweites XSLT-Programm

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="Person">
  <xsl:text>Person gefunden!</xsl:text>
 </xsl:template>
 
</xsl:transform>

XSLT - Anweisungen

Ein drittes XSLT-Programm

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/ | *">
  <xsl:text>( Element: </xsl:text>
  <xsl:value-of select="local-name()"/>
  <xsl:apply-templates select="@* | *"/>
  <xsl:text>)
  </xsl:text>
 </xsl:template>

 <xsl:template match="@*">
  <xsl:text>Attribute: </xsl:text>
  <xsl:value-of select="local-name()"/>
 </xsl:template>

</xsl:stylesheet>

Eine Variante des dritten XSLT-Programms

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/ | *">
  (Element: <xsl:value-of select="local-name()"/><xsl:apply-templates select="@* | *"/>)
 </xsl:template>

 <xsl:template match="@*">
  Attribute: <xsl:value-of select="local-name()"/>
 </xsl:template>

</xsl:stylesheet>

XSLT - Erzeugen einer XML-Ausgabe

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="Person">
 <Mitarbeiter/>
</xsl:template>

</xsl:transform>

XSLT - Übernehmen von textuellen Werten aus dem Quelldokument ( xsl:value-of )

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="Person">
 <Mitarbeiter>
  <xsl:value-of select="self::*"/>
 </Mitarbeiter>
</xsl:template>

</xsl:transform>

XSLT - Übernehmen vollständiger Elemente aus dem Quelldokument ( xsl:copy-of )

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="//Person">
 <Mitarbeiter>
  <xsl:copy-of select="child::*"/>
 </Mitarbeiter>
</xsl:template>

</xsl:transform>

Wie funktionieren Abbildungen?

Schablonenauswahl

Konfliktauflösung (1/5)

Konfliktauflösung (2/5)

Konfliktauflösung (3/5)

Konfliktauflösung (4/5)- Beispiel

<?xml version="1.0" encoding="UTF-8"?>
<c>
 <b>
  <a/>
 </b>
</c>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:apply-templates select="descendant::a"/>
 </xsl:template>
 <xsl:template match="*"/>
 <xsl:template match="a"/>
 <xsl:template match="b/a"/>
 <xsl:template match="c/b/a"/>
</xsl:stylesheet>
F:\bsz\webseite\src\vorlesung>java net.sf.saxon.Transform -s conflict-resolution.xml -o conflictresult.xml conflict-resolution.xsl
Error on line 4 of file:/F:/bsz/webseite/src/vorlesung/conflict-resolution.xsl:
  XTRE0540: Ambiguous rule match for /c/b[1]/a[1]
Matches both "c/b/a" on line 9 of file:/F:/bsz/webseite/src/vorlesung/conflict-resolution.xsl
and "b/a" on line 8 of file:/F:/bsz/webseite/src/vorlesung/conflict-resolution.xsl

Konfliktauflösung (5/5)- manuelle Angabe von Prioritäten

Tracing-Information

shallow copy von Elementen

Steuerung der Transformationsreihenfolge durch apply-templates

Benannte Ersetzungsschablonen und Parameterübergabe

Beispiel Parameterübergabe

Bedingte Verarbeitung (1/2) - xsl:if

Bedingte Verarbeitung (2/2) - xsl:choose

Ein umfangreiches Beispiel - Erzeugen eines XHTML-Reports aus der erweiterten Projektverwaltung

Ein umfangreiches Beispiel - komplettes Listing

XSLT und XSL-FO