5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language...

21
5.6.2002 XSL und XSLT 1 XSL und XSLT eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation

Transcript of 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language...

Page 1: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 1

XSL und XSLT

eXstensible Stylesheet Language

und

eXstensible Stylesheet Language Transformation

Page 2: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 2

Wozu XSL und XSLT?

Transformation: Umwandlung eines XML-Dokumentes in ein Dokument einer anderen Form.

Der Inhalt (spezifische Werte von Elementen und Attributen) soll dabei erhalten bleiben.

XML: Ein Standard zum Erzeugen von Daten-Dokumenten.

Das ‚X‘: Die Daten können verschieden interpretiert werden, mit der Folge, dass man früher oder später das Datenformat ändern muss.

Page 3: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 3

XSL-Überblick

XSL Umfasst drei Technologien:

XPathXSLTXSL-FO

HeuteAm 26.6.

XSL ist eine Sprache, um Style Sheets auszudrücken. Ein Style Sheet ist ein Dokument, das beschreibt, wie eine bestimmte Klasse von XML-Dokumenten dargestellt werden soll.

Page 4: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 4

XSLT-Überblick

XSLT ist eine Sprache zur Spezifikation von Transformationen von XML-Dokumenten. XSLT ist deklarativ: man deklariert seine Ziele, indem man Regeln, sogenannte Templates, aufstellt, die ein Muster im Quelldokument betreffen. Wenn der Prozessor auf ein Muster im Quelldokument trifft, führt er die Aktionen aus, die ebenfalls im Template aufgelistet sind, um etwas auszugeben oder den Fluss der Transformation zu kontrollieren.

Ein XSLT-Stylesheet besteht also aus einer Serie von Templates.

Ein Template besteht aus einem Muster, das XML-Elemente im Quelldokument selektiert, und einem Körper, der spezifiziert, was für eine Ausgabe generiert werden soll, wenn dieses Muster im Quelldokument angetroffen wird.

Page 5: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 5

XSLT-Überblick: ElementeXSLT ist selbst ein XML-Vokabular.XSLT ist „klein“: es gibt nur 35 Elemente.XSLT ist sogar „sehr klein“: die meisten Transformationen kann man sogar mit noch weniger Elementen ausführen.

Die XSLT-Elemente:

xsl:apply-imports xsl:apply-templates xsl:attribute xsl:attribute-setxsl:call-template xsl:choose xsl:comment xsl:copyxsl:copy-of xsl:decimal-format xsl:element xsl:fallbackxsl:for-each xsl:if xsl:import xsl:includexsl:key xsl:message xsl:namespace-alias xsl:numberxsl:otherwise xsl:output xsl:param xsl:preserve-spacexsl:processing-instruction xsl:sort xsl:strip-spacexsl:stylesheet xsl:template xsl:text xsl:transformxsl:value-of xsl:variable xsl:when xsl:with-param

top-level-elements:

Page 6: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 6

XSLT: Ablauf der Transformation

Page 7: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 7

Vorsicht!

Beispiel:

<xsl:text>geht&nbsp;nicht</xsl:text>

gibt die Fehlermeldung:

Verweis auf eine nicht definierte Entität 'nbsp'.

Lösung:

<xsl:text>geht&#160;nicht</xsl:text>

Anderes Beispiel:

Nicht geschlossene Tags in HTML.

Page 8: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 8

XSLT: Beispiel

<catalog> <cd> <title>Mercury Falling</title> <artist>Sting</artist> </cd></catalog>

<xsl:stylesheet> <xsl:template match="/"> <html><body> <h1>- <xsl:apply-templates select="/catalog/cd/title"/> </h1> </body> </html> </xsl:template> </xsl:stylesheet>

XSL-Prozessor

<html><body><h1> Mercury Falling</h1></body></html>

bsp_cd_catalog

Page 9: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 9

XSLT-Elemente<xsl:stylesheet> und <xsl:transform> (Synonyme)

Obligatorisches Element; wird gebraucht, um anzuzeigen, dass das Dokument ein XSLT-Stylesheet ist. Hat zwei wichtige Attribute: version und namespace (xmlns).

Beispiel:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform " >...</xsl:stylesheet>

Aktuelle VersionNamespace-deklaration für W3C XSLT namespace

Page 10: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 10

XSLT-Elemente

<xsl:template> Um irgend etwas machen zu können, muss ein Stylesheet ein Template enthalten. Jedes Stylesheet muss ein Template enthalten, das die Form der Wurzel des Quelldokuments beschreibt (match the node of the root node). Hat als wichtigstes attribut: match="XPath-Ausdruck". Das Template wird ausgeführt, wenn der Kontext-Knoten den so selektierten Knoten matched. Anderes wichtiges Attribut: Name (String).

Beispiel:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> ... </xsl:template> ...</xsl:stylesheet>

"/" ist XPath-Ausdruck für den Wurzelknoten.

Page 11: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 11

XSLT-Elemente

<xsl:apply-templates>

Ohne Attribute benutzt, fordert es den XSLT-Prozessor zu dem Versuch auf, die Templates im Stylesheet gegen den momentanen Kontext-Knoten im Quelldokument zu matchen.

Wichtiges Attribut: select. Mit diesem Attribut können wir eine Menge von Knoten auswählen. Der XSLT-Prozessor greift auf alle Templates im Stylesheet zu und versucht, sie mit der Knotenmenge zu matchen. Gelingt dies, werden die Templates, die die Knotenmenge matchen, ausgeführt.

Page 12: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 12

XSLT-Elemente

<xsl:apply-templates> (Skizze)

<catalog> <cd> <title>Mercury Falling</title> <artist>Sting</artist> </cd> .....</catalog>

<xsl:stylesheet>

</xsl:stylesheet>

<xsl:template match="artist">... </xsl:template>

<xsl:template match="/"> <xsl:apply-templates select="/catalog/cd/title"/></xsl:template>

<xsl:template match="title"> <xsl:value-of select="/title" /> </xsl:template>

Anderes Beispiel: Seite 8

Page 13: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 13

XSLT-Elemente

<xsl:call-template>

Kann nur innerhalb eines Templates benutzt werden. Attribut: name. Kann auch das Template, in dem es steht, aufrufen, und dabei Parameter übergeben; Rekursion! (Es gibt keine for-Schleifen! Für Rekursive XSLT- Programmierung wird oft noch <xsl:with-param> und <xsl:param> gebraucht, ausserdem, für eine Abbruchbedingung:)

<xsl:if>

Sehr einfache Form von einem „Conditional Test“; es gibt kein „else“. Hat ein Attribut, test. (XPath-Ausdruck).

Beispiel: <xsl:if test = "artist = 'Sting'"> .....</xsl:if>

Page 14: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 14

XSLT-Elemente<xsl:value-of>

Wird gebraucht, wenn wir einen Wert oder ein Attribut aus einem Knoten auslesen wollen. Kann nur innerhalb eines Templates benutzt werden und hat immer ein select-Attribut. Der Wert dieses Attributs ist ein XPath-Ausdruck. Der Wert der durch diesen Ausdruck definierten Knoten wird in das Ausgabe- Dokument in Textform kopiert.

<?xml version="1.0" encoding="ISO-... "><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/..."><xsl:template match="/"> <html><body><h1> <xsl:value-of select="/catalog/cd/artist" /> </h1></body></html></xsl:template></xsl:stylesheet>

Beispiel:

<html><body><h1> Sting </h1></body></html>

Wenn der XPath-Ausdruck mehrereKnoten im Quelldokument anspricht,wird nur der Wert des ersten Knotens ausgegeben!

Page 15: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 15

XSLT-Elemente<xsl:for-each>

Operiert auf einer Menge von Knoten. Diese ist durch den Wert des select-Attributes definiert. Die Inhalte des <xsl:for-each>-Elementes werden einmal für jeden Knoten in dieser Menge ausgeführt.

bsp_cd_catalog

Page 16: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 16

XSLT-Elemente: Abstrakter Zugang.Man kann zwei Zugänge zum Stylesheet-Design finden:

Pulling the input data: "Das Stylesheet 'zieht' Information".

Bekannte Quell-Struktur, d.h. die Hierarchie des Quelldokuments ist dem Stylesheet- Programmierer bekannt.Das Stylesheet "zieht" Information von bekannten Orten im Quellknoten-Baum:

<xsl:value-of select="XPath-expression"/> für Extraktion oder Berechnung

<xsl:for-each select="XPath-node-set-expression"/> für Iteration über eine Knotensammlung.

Kurz: der Ergebnisbaum wird vom Stylesheet aufgebaut, indem jede Ergebnis- komponente vom Quelldokument "gezogen" wird und jede solche Komponente vom Stylesheet mit markup eingerahmt wird.

Page 17: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 17

XSLT-Elemente: Abstrakter Zugang.Zweiter Zugang:

Pushing the input data: "Das Stylesheet 'drückt' Information".

Oft bei unbekannter oder beliebiger Struktur des Quelldokuments.Das Stylesheet "drückt "Information, indem es bekannte oder unbekannte Quellbaum- Knoten besucht:

<xsl:apply-templates select="XPath-Node-Expression">

und die Template-Regeln sind für Quellbaum-knoten-besuche vorbereitet:

<xsl:template match="XPath-Pattern">

Die Ordnung des Ergebnisbaumes wird also erst durch die Hierarchie der Quelle festgelegt! Es wird event-getriebene Transformation implementiert: <xsl:template> als Event-Handler, <xsl:apply-templates> als Event-Generator.

Page 18: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 18

XSLT-Elemente Für wirkliche Transformation:

<xsl:element> Element zum Erzeugen von neuen Elementen,das immer ein name- Attribut hat, das den Namen des neuen Elementes angibt. Optionales Attribut: namespace, das als Wert eine URI annimt, die den Namespace des Elements identifiziert.

Ähnlich:

<xsl:attribute> Mit dem Attribut name (optional: namespace).

Beispiel: <xsl:element name="peter"> Peter</xsl:element>

<peter> Peter</peter>

Page 19: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 19

Der andere Weg:

Page 20: 5.6.2002XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.

5.6.2002 XSL und XSLT 20

Xalan-JavaVollständige Implementierung von XSLT und Xpath (beides: Version 1.0).Benutzt als default-Parser: Xerces-Java. Transformationen können verkettet sein.Kann in einem Servlet benutzt werden, um XML-Dokumente in HTML zu transformieren und das Resultat einem client nutzbar zu machen.

C:\jdk1.3.1_03\bin\java -cp "C:\...\xalan.jar; C:\...\xerces.jar" org.apache.xalan.xslt.Process -IN cd_katalog.xml -XSL cd_katalog.xsl -OUT katalog.html

Beispiel:

bsp_cd_katalog_to_html