Ihre Speaker Tobias Kieninger Christian Dedek

Werbung
XSLT
Tobias Kieninger
Christian Dedek
Thomas Bayer
[email protected]
Orientation in Objects GmbH
Weinheimer Str. 68
68309 Mannheim
www.oio.de
1
Ihre Speaker
Tobias Kieninger
Christian Dedek
2
XSLT
© 2002 Orientation in Objects GmbH
1
Organisatorisches
• Unterlagen
• Kein Rechner benötigt
• http://www.oio.de/public
3
XSLT
© 2002 Orientation in Objects GmbH
Überblick
•
•
•
•
•
•
•
•
XSLT Einführung
Stylesheets
XPath
Advanced XSLT
Anwendungen
PDF Erzeugung
Erzeugung von Grafiken
XSLT Praxis Techniken und Beispiele
4
XSLT
© 2002 Orientation in Objects GmbH
2
"Als Antwort der Industrie auf den Welthunger hat XML Java,
Entwurfsmuster und die Objekttechnologie ersetzt... Trotzdem ist die
Industrie im Moment dabei, alles, was gut und teuer ist, bezüglich
XML umzukrempeln, ob dies Sinn macht oder nicht..."
Don Box, Essential XML
www.develop.com/books/essentialXML
5
XSLT
© 2002 Orientation in Objects GmbH
Die Quelle als XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<cdliste>
..
<cd id="65" jahr="2000">
<titel>Music</titel>
<interpret>Madonna</interpret>
<hersteller>BMG</hersteller>
<preis/>
<track id="01">
<titel>Music</titel>
<laenge>4:35</laenge>
</track>
<track id="02">
<titel>Impressive Instant</titel>
<laenge>5:10</laenge>
</track>
</cd>
...
</cdliste>
6
XSLT
© 2002 Orientation in Objects GmbH
3
XSL - eXtensible Stylesheet Language
• Bestand aus zwei Teilen:
– Der Transformationssprache XSLT
• Ändern der Struktur
• Hinzufügen von Formatierungsanweisungen
– XML Vokabular für Formatierungen
• Darstellungsform
XSL Transformation
XSL Formatierer
PDF
...
XML-Quellbaum
XML-Zielbaum
7
XSLT
© 2002 Orientation in Objects GmbH
XSLT
© 2002 Orientation in Objects GmbH
XSL im Browser
Server
XML
XSL
8
4
XSL im Browser
Vorteile:
• Trennung von Content und Style
• Suchmaschinen könnten XML Daten auswerten
• XML Daten können von Fremdsystemen eingelesen und
verwertet werden
Nachteile:
• Menge der übertragenen Informationen
• Browser muss XSL unterstützen
9
XSLT
© 2002 Orientation in Objects GmbH
Von XSL zu XSLT
XSLT
eXtensible Stylesheet Language for Transformation
Transformationsanweisungen
XPath
Adressierung
Formatierung
XSL-FO
eXtensible Stylesheet Language - Formatting Objects
10
XSLT
© 2002 Orientation in Objects GmbH
5
XSLT Prozessor + Transformationen
csv.xsl
html.xsl
txt.xsl
news.html
docbook.xsl
news.txt
XSLT
Prozessor
news.xml
news.csv
(Xalan, Saxon, ..)
docbook.xml
11
XSLT
© 2002 Orientation in Objects GmbH
XML-Transformationen mit Bäumen
Stylesheet Datei
Stylesheet
XSLT
Prozessor
XML Datei
Quelle
Output Datei
Output
12
XSLT
© 2002 Orientation in Objects GmbH
6
Transformation in verschiedene Formate
HTML
Text
CSV
XML
13
XSLT
© 2002 Orientation in Objects GmbH
Überblick
•
•
•
•
•
•
•
•
XSLT Einführung
Stylesheets
XPath
Advanced XSLT
Anwendungen
PDF Erzeugung
Erzeugung von Grafiken
XSLT Praxis Techniken und Beispiele
14
XSLT
© 2002 Orientation in Objects GmbH
7
XSLT im Detail
• Was ist XSLT (nicht)?
– XSLT ist eine funktionale Sprache, um XML-Dokumente zu
transformieren
– XSLT ist erweiterbar
– „XSLT makes XML useful for non-programmers“ (James Clark)
• Ein XSLT-Dokument ist
– selbst ein XML-Dokument
– Eine Anleitung zur Transformation in ein Ergebnisdokument
15
XSLT
© 2002 Orientation in Objects GmbH
Aufbau des ersten Stylesheets
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html><body>
<h1><xsl:value-of select="/cdliste/listentitel"/></h1>
<p><xsl:value-of select="/cdliste/erstelldatum"/></p>
<p><xsl:value-of select="/cdliste/beschreibung"/></p>
</body></html>
</xsl:template>
</xsl:stylesheet>
16
XSLT
© 2002 Orientation in Objects GmbH
8
Namespace
• Deklariert einen Namensraum für Elemente
• Wird durch URI gekennzeichnet
• XSLT hat Namespace xmlns:xsl="http://www.w3.org/1999/XSL/Transform“
• XSLT-Prozessor wertet nur Elemente diesen Namespaces aus
<... xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
17
XSLT
© 2002 Orientation in Objects GmbH
<xsl:for-each select=“xyz”>
•
•
•
•
Befehle werden in einer Schleife abgehandelt
Schleife läuft für jedes Element der select-Anweisung
Gebräuchlich für Listen
In jedem Durchlauf wird der Knoten zum Kontextknoten
<xsl:for-each select="cdliste/cd">
mache dies
mache das
</xsl:for-each>
18
XSLT
© 2002 Orientation in Objects GmbH
9
Die erste Schleife
<xsl:for-each select="//cd">
<xsl:value-of select="titel"/>,
<xsl:value-of select="interpret"/><br/>
</xsl:for-each>
19
XSLT
© 2002 Orientation in Objects GmbH
Inhalt des Context
<xsl:for-each select="//cd">
<xsl:value-of select="titel"/>
Context = cd
<xsl:for-each select="tracks/track">
<xsl:value-of select="laenge"/>
<xsl:value-of select="titel"/>
Context = track
</xsl:for-each>
<xsl:value-of select="preis"/>
Context = cd
</xsl:for-each>
20
XSLT
© 2002 Orientation in Objects GmbH
10
Zweite Schleife
<xsl:for-each select="tracks/track" >
<xsl:value-of select="laenge"/>
<xsl:value-of select="titel"/><br/>
</xsl:for-each>
21
XSLT
© 2002 Orientation in Objects GmbH
<xsl:if test=“xyz”>
• <xsl:if> gibt die Möglichkeit eine Bedingung abzuprüfen.
• Ist der Test erfolgreich, werden die Anweisungen ausgeführt.
<xsl:if test="position()=last()">
mache dies
tue das
</xsl:if>
22
XSLT
© 2002 Orientation in Objects GmbH
11
<xsl:choose>
• Dient zum Überprüfen auf mehrere Kriterien
• Der Choose Befehl hat zwei Unterelemente:
– <xsl:when test="xyz">
– <xsl:otherwise>
• Die when-Anweisung kann beliebig oft in “choose” auftauchen,
otherwise jedoch nur einmal
23
XSLT
© 2002 Orientation in Objects GmbH
<xsl:choose>
Beispiel:
<xsl:choose>
<xsl:when test="Bedingung1"> tue dies </xsl:when>
<xsl:when test="Bedingung2"> tue das </xsl:when>
<xsl:otherwise> mach was anderes </xsl:otherwise>
</xsl:choose>
24
XSLT
© 2002 Orientation in Objects GmbH
12
Conditions
<xsl:if test="preis">
Preis: DM <xsl:value-of select="preis"/><br/>
</xsl:if>
25
XSLT
© 2002 Orientation in Objects GmbH
Überblick
•
•
•
•
•
•
•
•
XSLT Einführung
Stylesheets
XPath
Advanced XSLT
Anwendungen
PDF Erzeugung
Erzeugung von Grafiken
XSLT Praxis Techniken und Beispiele
26
XSLT
© 2002 Orientation in Objects GmbH
13
XPath
•
•
•
•
•
Spezifiziert Adressierung eines XML-Dokumentes
Enthält 13 Achsenbezeichner (AxisName)
es existieren Kurz- und Langformen zur Adressierung
W3C Recommendation seit 16. November 1999
Gemeinsame Syntax für Funktionalitäten, die sich XSLT und
Xpointer( www.w3c.org/tr/xptr ) teilen
27
XSLT
© 2002 Orientation in Objects GmbH
NodeSet
• Eine Menge von Knoten des Dokumentes
• Listet Knoten eines XPath-Ausdruckes auf
node set
<xsl:for-each select="cd">
28
XSLT
© 2002 Orientation in Objects GmbH
14
Axis Names eine kleine “Baumschule”
<cdliste>
<erstelldatum>14.01.2001</erstelldatum>
<listentitel>OIO CD-Liste</listentitel>
<beschreibung>Diese CD-Liste ist...
</beschreibung>
<cd id="65" jahr="2000">
<titel>Music</titel>
<interpret>Madonna</interpret>
<hersteller>BMG</hersteller>
<preis>19.99</preis>
<track id="01“>
<titel>Music</titel>
<laenge>4:35</laenge>
</track>
...
</cd>
...
29
XSLT
© 2002 Orientation in Objects GmbH
Anwendung von XPathausdrücken
•
Ausdrücke werden immer angegeben wenn es um die Adressierung in
der Quelle geht
<xsl:template match=“titel">
<xsl:apply-templates select="/cdliste/cd"/>
<xsl:value-of select="/cdliste/cd/titel"/>
<xsl:for-each select="following-sibling::cd">
30
XSLT
© 2002 Orientation in Objects GmbH
15
Achsen (Auszug)
cdliste
parent
cd
preceeding-sibling
tracks
track
track
cd
following-sibling
child
titel
titel
cd
interpret
preis
track
31
XSLT
© 2002 Orientation in Objects GmbH
Location step
Ein Step besteht aus Achsennamen und Knotentest
AxisName::NodeTest
cdliste
parent::cdliste
parent::node()
cd
cd
tracks
track
track
cd
titel
titel
interpret preis
track
XSLT
32
© 2002 Orientation in Objects GmbH
16
Location step II
Ein Step besteht aus Achsennamen und Knotentest
AxisName::NodeTest
cdliste
following-sibling::cd
following-sibling::node()
cd
cd
tracks
track
track
cd
titel
titel
interpret preis
track
XSLT
33
© 2002 Orientation in Objects GmbH
Location step und Location path
Location step
Location path
Location step
<xsl:value-of select="/cdliste/cd/hersteller"/>
<xsl:value-of select="/cdliste/child::cd/child::hersteller"/>
<xsl:value-of select="/descendant::hersteller"/>
34
XSLT
© 2002 Orientation in Objects GmbH
17
Verschiedene Pfade
35
XSLT
© 2002 Orientation in Objects GmbH
Adressierung innerhalb eines Knotens
Node
Namespace
Attribute1
Text
Attribute2
Attribute3
<oio:seminar von="1" bis="2" mit="3">Das Sem...</oio:seminar>
36
XSLT
© 2002 Orientation in Objects GmbH
18
Beispiel bei text()
• Die Quelle:
<mes>Hier stehen <b>wichtige</b>Informationen!</mes>
• Das Stylesheet:
<xsl:template match="mes">
<xsl:value-of select="text()"/>
</xsl:template>
• Das Resultat:
mes
Hier stehen
Informationen
b
Hier stehen
wichtige
37
XSLT
© 2002 Orientation in Objects GmbH
Beispiele
<xsl:value-of select="//cd/attribute::jahr"/>
<xsl:value-of select="//cd/titel/child::text()"/>
38
XSLT
© 2002 Orientation in Objects GmbH
19
Prädikate
Menge aller CD Elemente
mit Interpret Madonna
Gefiltertes Node Set
cd[interpret=‘Madonna‘]
Menge aller CD Elemente
Node Set des NodeTestes
39
XSLT
© 2002 Orientation in Objects GmbH
Kontext in einem Prädikat
//cd[interpret=‘Madonna‘]
Context
=
gesamter
Baum
Context = aktuelle cd
40
XSLT
© 2002 Orientation in Objects GmbH
20
Prädikate üben
• //cd[preis]
• //cd[@jahr < 1997] bzw. //cd[@jahr < 1997]
• //cd[@jahr > 1997 and @jahr <= 2000]/titel
• Wie bekommt man alle cd´s die billiger sind als DM 20?
• Wie bekomme ich alle cd´s die ein Lied mit der Länge 4:23
enthalten?
41
XSLT
© 2002 Orientation in Objects GmbH
Rechnen und Vergleichen
Funktion
=,<,<=,>,>=,!=
and, or, not(ausdruck)
+, -, *, div
Zweck
Vergleiche
Boolsche Operatoren
Numerische Operatoren
42
XSLT
© 2002 Orientation in Objects GmbH
21
Funktionen (Auszug)
Funktion
Zweck
position()
Knoten auf Position prüfen
last()
Gibt den letzten Knoten zurück
count(node-set)
Anzahl der Knoten ermitteln
sum(node-set)
Summiert alle Knoten auf
substring-after(‘Hallo‘,‘a‘) Gibt einen Teilstring zurück (->‘llo‘)
sum(node-set)
Summiert alle Knoten auf
<xsl:value-of select="count(//cd)"/>
43
XSLT
© 2002 Orientation in Objects GmbH
Euro-Einführung
EUR <xsl:value-of select="preis div 1.95583"/><br/>
<h2>Der Durchschnittspreis ist:
DM <xsl:value-of select="format-number(sum(//preis)
div count(//preis), '0.00')"/>
</h2>
44
XSLT
© 2002 Orientation in Objects GmbH
22
Überblick
•
•
•
•
•
•
•
•
XSLT Einführung
Stylesheets
XPath
Advanced XSLT
Anwendungen
PDF Erzeugung
Erzeugung von Grafiken
XSLT Praxis Techniken und Beispiele
45
XSLT
© 2002 Orientation in Objects GmbH
Document Order - Leserichtung
1
2
9
3
4
5
6
8
10
11
12
7
46
XSLT
© 2002 Orientation in Objects GmbH
23
<xsl:template match=“xyz” >
• Es taucht als child von <xsl:stylesheet> auf
• Besteht aus zwei Bestandteilen
– Ein Pattern, welches auf Knoten des Sourcetrees angewandt wird
– Ein Template, welches instanziiert werden kann, damit es
Bestandteil des Resulttrees wird
Matchpattern
<xsl:template match="hersteller">
<b>Ein Hersteller</b>
</xsl:template>
Ausgabe
47
XSLT
© 2002 Orientation in Objects GmbH
<xsl:apply-templates/>
• Anweisung für Prozessor mit Transformation fort zu fahren
• Andere Regeln werden gesucht und abgearbeitet
• Danach wird in der ursprünglichen Regel weiter gemacht
<xsl:template match="cd">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="hersteller">
<b>Ein Hersteller</b>
</xsl:template>
48
XSLT
© 2002 Orientation in Objects GmbH
24
<xsl:apply-templates select=“xyz”/>
• Anweisung für Prozessor mit Transformation fort zu fahren
• Attribut select=“xyz” wählt die Child-Knoten aus
• Danach wird in der ursprünglichen Regel weiter gemacht
<xsl:template match="cd">
<p>
<xsl:apply-templates select="hersteller"/>
</p>
</xsl:template>
<xsl:template match="hersteller">
<b>Ein Hersteller</b>
</xsl:template>
49
XSLT
© 2002 Orientation in Objects GmbH
Build-In Template Rules
<xsl:template match="* | /">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text() | @*">
<xsl:value-of select="."/>
</xsl:template>
50
XSLT
© 2002 Orientation in Objects GmbH
25
Bestehende Anwendung modularisieren 1
<xsl:template match="/">
<html><body>
<xsl:apply-templates/>
</body></html>
</xsl:template>
<xsl:template match="listentitel">
<h1><xsl:value-of select="."/></h1>
</xsl:template>
<xsl:template match="erstelldatum | beschreibung">
<p><xsl:value-of select="."/></p>
</xsl:template>
51
XSLT
© 2002 Orientation in Objects GmbH
Bestehende Anwendung modularisieren 2
<xsl:template match="cd">
<xsl:apply-templates select="titel | interpret | preis"/>
...
</xsl:template>
<xsl:template match="titel | interpret">
<h2><xsl:value-of select="."/><br/></h2>
</xsl:template>
<xsl:template match="preis">
Preis: DM <xsl:value-of select="."/><br/>
</xsl:template>
<xsl:template match="preis[. < 20]">
Sonderpreis: DM <xsl:value-of select="."/><br/>
</xsl:template>
52
XSLT
© 2002 Orientation in Objects GmbH
26
Bestehende Anwendung modularisieren 3
<xsl:template match="cd">
<xsl:apply-templates select="titel | interpret | preis"/>
...
</xsl:template>
<xsl:template match="titel | interpret">
<h2><xsl:value-of select="."/><br/></h2>
</xsl:template>
<xsl:template match="preis">
Preis: DM <xsl:value-of select="."/><br/>
</xsl:template>
<xsl:template match="preis[. < 20]">
Sonderpreis: DM <xsl:value-of select="."/><br/>
</xsl:template>
53
XSLT
© 2002 Orientation in Objects GmbH
<xsl:variable name=“xyz”>
• Definiert globale und lokale Variablen
• Lokale Variablen sind nur im jeweiligen Template sichtbar
• Anwendung erfolgt über “$Name”.
Definition:
<xsl:variable name="city">London</xsl:variable>
Anwenden:
<xsl:value-of select="$city"/>
54
XSLT
© 2002 Orientation in Objects GmbH
27
<xsl:param name=“xyz”>
•
•
•
•
Als Top-Level-Element definiert es globale Parameter
Innerhalb eines Templates deklariert es lokale Parameter
“name” kennzeichnet den Namen des Parameters
Anwenden erfolgt über “$Name”.
XSLT-Proz
Definition:
<xsl:param name="city">
London
</xsl:param>
Template
Anwenden:
<xsl:value-of select="$city"/>
Template
Stylesheet
55
XSLT
© 2002 Orientation in Objects GmbH
<xsl:with-param name=“..”>
• Übergabe eines Parameters bei
– <xsl:call-template> oder
– <xsl:apply-templates>
• Kann nur als Child von o.g. template-Aufrufen auftreten
<xsl:call-template name="Hauptstadt">
<xsl:with-param name="city">London</xsl:with-param>
</xsl:call-template>
56
XSLT
© 2002 Orientation in Objects GmbH
28
<xsl:attribute name="xyz">
• Attribute können auch dynamisch angelegt werden
<xsl:template match="cd">
<img>
<xsl:attribute name="src">
<xsl:value-of select="titel"/>.jpg
</xsl:attribute>
</img>
</xsl:template>
<img src="Music.jpg"/>
57
XSLT
© 2002 Orientation in Objects GmbH
Attribute Value Templates
•
Beispiel: Die Quelldatei
<bild>
<href>blume.jpg</href>
<size width="300"/>
</bild>
•
Das zugehörige Stylesheet:
<xsl:variable name="bild-dir">/images</xsl:variable>
...
<xsl:template match="bild">
<img src="{$bild-dir}/{href}" width="{size/@width}"/>
</xsl:template>
•
Ergebnis:
<img src="/images/blume.jpg" width="300"/>
58
XSLT
© 2002 Orientation in Objects GmbH
29
Anwendung
<xsl:variable name="farbe">
<xsl:if test="position() mod 2 = 1">orange</xsl:if>
</xsl:variable>
59
XSLT
© 2002 Orientation in Objects GmbH
Überblick
•
•
•
•
•
•
•
•
XSLT Einführung
Stylesheets
XPath
Advanced XSLT
Anwendungen
PDF Erzeugung
Erzeugung von Grafiken
XSLT Praxis Techniken und Beispiele
60
XSLT
© 2002 Orientation in Objects GmbH
30
BME-Cat
<?xml version="1.0" encoding="iso-8859-1"?>
<BMECAT version="1.2">
<T_NEW_CATALOG>
<ARTICLE>
<SUPPLIER_AID>GTH 0015208</SUPPLIER_AID>
<ARTICLE_DETAILS>
<DESCRIPTION_SHORT>Injektionspflaster, 1,2cm</DESCRIPTION_SHORT>
<MANUFACTURER_NAME>Gothaplast</MANUFACTURER_NAME>
<REMARKS>1,2cm * 4cm</REMARKS>
</ARTICLE_DETAILS>
<ARTICLE_ORDER_DETAILS>
<ORDER_UNIT>Paket</ORDER_UNIT>
</ARTICLE_ORDER_DETAILS>
<ARTICLE_PRICE_DETAILS>
<ARTICLE_PRICE type="Festpreis">
<PRICE_AMOUNT>18.0</PRICE_AMOUNT>
</ARTICLE_PRICE>
</ARTICLE_PRICE_DETAILS>
</ARTICLE>
...
61
XSLT
© 2002 Orientation in Objects GmbH
Erzeugen mehrerer Outputfiles
•
Outputmöglichkeiten mittels <xsl:output method="...">:
– XML
– HTML
– reiner Text (Stringwerte aller Knoten)
•
•
Erzeugen mehrerer Outputfiles mittels <xsl:document href="...">,
wobei href den Pfad angibt (absolut oder relativ), wo das Dokument
gespeichert werden soll
Es exisitiert ein Hauptdokument, jeder mit <xsl:document
href="..."> eingeleitete Abschnitt stellt ein untergeordnetes
Dokument dar, es ensteht eine Baumstruktur
62
XSLT
© 2002 Orientation in Objects GmbH
31
Mehrere Outputs
<xsl:for-each select="//ARTICLE" >
<redirect:write file="{generate-id(.)}.html">
<html>
<body>
....
</body>
</html>
</redirect:write>
</xsl:for-each>
63
XSLT
© 2002 Orientation in Objects GmbH
Verlinkung der Detailansichten
<tr style="background:lightgrey">
<td>
<a href="{generate-id(preceeding-sibling::ARTICLE[1])}.html">
vorheriger
</a>
</td>
<td>
<a href="{generate-id(following-sibling::ARTICLE[1])}.html">
nächster
</a>
</td>
</tr>
64
XSLT
© 2002 Orientation in Objects GmbH
32
Verschiedene Outputs
65
XSLT
© 2002 Orientation in Objects GmbH
Idee: XSLT im Servlet
Web Server
Servlet Engine
XSLT Prozessor
XML
XSL
XSL
Dokument
Sheets
Sheets
XSL
XSL
XSL
Sheets
Sheets
Sheets
XSLT
66
© 2002 Orientation in Objects GmbH
33
Generierung im Batch
Vorteile:
• Schnelle Bearbeitung von Abrufen
• Konventioneller Web Server ist ausreichend
• Robuster im Betrieb
Nachteile:
• Keine dynamische Seitengenerierung
67
XSLT
© 2002 Orientation in Objects GmbH
Gruppieren in XSLT
<xsl:for-each select="//interpret[not(.=
preceding::interpret)]">
<xsl:for-each select="//CD[interpret=current()]">
Madonna
Madonna
Music
Music
Madonna
Ray of light
Ray of light
Frozen
Eminem
Eminem
Marshall Mathers
Marshall Mathers
Madonna
Eminem
Frozen
Britney Spears
Britney Spears
Baby one more..
Baby one more..
Eminem
Eminem
68
XSLT
© 2002 Orientation in Objects GmbH
34
CD-Liste gruppieren
69
XSLT
© 2002 Orientation in Objects GmbH
Keys: Key-Tabellen definieren
Quelldokument
<xsl:key name="cds" match="cd" use="interpret"/>
Stylesheet
“cds“ Schlüsseltabelle
documentorder
Schlüssel
Knoten
Madonna
cd
Madonna
cd
Eminem
cd
Eminem
cd
Britney Spears
cd
Eminem
cd
...
cd
70
XSLT
© 2002 Orientation in Objects GmbH
35
Verwendung von Key-Tabellen
Beispiel: Schleife über Nodeset
Nodeset mit allen
Knoten zum Schlüssel
<xsl:for-each select="key('cds', 'Madonna')">
...
</xsl:for-each>
Name der Key-Tabelle
gesuchter String
71
XSLT
© 2002 Orientation in Objects GmbH
XSLT
© 2002 Orientation in Objects GmbH
CD-Liste gruppieren
72
36
Identifikation: generate-id()
• generate-id() weist einem Knoten eine eindeutige ID zu.
<xsl:value-of select="generate-id(.)"/>
• Ausgabe bei Saxon:
Music(b1b1b2)
Ray of light(b1b1b4)
Marshall Mathers(b1b1b6)
Eminem(b1b1b8)
baby one more time(b1b1c10)
73
XSLT
© 2002 Orientation in Objects GmbH
Identifikation: Erstes Element finden
• Bilden der eigenen id
• Vergleich mit Eintrag aus der Key-Tabelle
• Nur erster Eintrag wird angezeigt
cdliste
cd
interpret
cd
titel
interpret
cd
titel
cd[generate-id(.)=generate-id(key('cds',
interpret))]
id von Context-Knoten
erste id aus Key-Tabelle
74
XSLT
© 2002 Orientation in Objects GmbH
37
Gruppieren nach Muench: Beispiel
...
<xsl:key name="cds" match="cd" use="interpret"/>
...
<xsl:template match="/">
<xsl:for-each select="//cd[generate-id(.)=
generate-id(key('cds', interpret)[1])]">
<xsl:value-of select="interpret"/><br/>
<xsl:for-each select="key('cds', interpret)">
Titel: <xsl:value-of select="titel"/><br/>
Hersteller: <xsl:value-of select="hersteller"/><br/>
</xsl:for-each>
<br/>
</xsl:for-each>
</xsl:template>
...
75
XSLT
© 2002 Orientation in Objects GmbH
Muench´sche Methode: Ausgabe
Madonna
Titel: Music
Hersteller: BMG
Titel: Ray of light
Hersteller: BMG
Eminem
Titel: Marshall Mathers
Hersteller: Sony
Titel: Eminem
Hersteller: Sony
Britney Spears
Titel: Baby one more time
Hersteller: Sony
76
XSLT
© 2002 Orientation in Objects GmbH
38
XSLT-Performance
•
•
•
•
Wozu wird XSLT genutzt ?
Kleiner Input
Stylesheets vorher übersetzen
Prozessorinitialisierung
77
XSLT
© 2002 Orientation in Objects GmbH
Faustregeln
• Kein //item
• mehrfache Nutzung von Nodesets
• <xsl:number...>
• preceding, following axes
78
XSLT
© 2002 Orientation in Objects GmbH
39
XSLT-Performance
20 sec/Mb
Simple
optimization
Advanced
optimization
5 sec/Mb
1 sec/Mb
Quelle: Michael Kay:“Inside an XSLT Processor“ 19.5.2000
To day
http://www9.org/devday-xml/session3/kay.ppt
79
XSLT
© 2002 Orientation in Objects GmbH
XSLT-Performance
• Verschiedene Implementierungen
•
•
•
•
•
•
•
•
•
•
•
•
•
MSXML http://msdn.microsoft.com/xml/general/xmlparser.asp
Sablotron http://www.gingerall.com/charlie-bin/get/webGA/act/sablotron.act
Saxon http://saxon.sourceforge.net/
TransforMiiX http://www.mozilla.org/projects/xslt/
Xalan-Java http://xml.apache.org/xalan/
Xalan-C++ http://xml.apache.org/xalan-c/
XT http://xml.apache.org/xalan-c/
Oracle Java http://technet.oracle.com/tech/xml/parser_java2/index.htm
Four Thought http://www.fourthought.com/4SuiteServer/index.html
Sun's XSLTC : http://www.sun.com/xml/developers/xsltc/
LibXSLT http://xmlsoft.org/
jd.xslt http://www.aztecrider.com/xslt/download.html
Infoteria iXSLT http://www.infoteria.com/en/contents/product/ixslt/index.html
• Benchmarking
•
http://www.datapower.com/XSLTMark/
Quelle:Eugne Kuznetzov, Curys Dolph
http://www.datapower.com/XSLTMark/res_2001_04_01.html
80
XSLT
© 2002 Orientation in Objects GmbH
40
Inkludieren von Stylesheets
•
•
•
•
Erfolgt über <xsl:include href=“xyz.xsl">
Ist ein top-level Element
Besitzt ein href-Attribut mit der entsprechenden URI
Bei Inkludierte Template-Rules gibt es keine Unterscheidung nach
Prioritäten (im Gegensatz zu Importierten)
<xsl:stylesheet version="1.0“ xmlns:xsl=“...">
<xsl:include href="article.xsl"/>
<xsl:include href="bigfont.xsl"/>
...
</xsl:stylesheet>
81
XSLT
© 2002 Orientation in Objects GmbH
Importieren von Stylesheets
•
•
•
•
•
Ist ein top-level Element
Besitzt ein href-Attribut mit der entsprechenden URI
Beim Import mehrerer Stylesheets formt sich ein Importbaum
Später importierte Stylesheets haben eine höhere Priorität
Selber geschriebene Templates überschreiben importierte
<xsl:stylesheet version="1.0“ xmlns:xsl=“...">
<xsl:import href="article.xsl"/>
<xsl:import href="bigfont.xsl"/>
...
</xsl:stylesheet>
82
XSLT
© 2002 Orientation in Objects GmbH
41
Modularisierung von Stylesheets
<xsl:include href="a.xsl"/>
<xsl:import href="b.xsl"/>
Stylesheet
Template
A
XYZ
B
C
XYZ
XYZ
D
E
F
XYZ
XYZ
XYZ
83
XSLT
© 2002 Orientation in Objects GmbH
Transformation mehrerer Dokumente
•
•
•
•
Zugriff auf andere XML-Dokumente mittels der Funktion document(...)
Als Argument wird ein XML-Dokument übergeben, das die
einzufügenden Knoten enthält
Eine Erweiterung der XPath-Funktionen
Reihenfolge der Knoten abhängig von Implementierung
...
<xsl:template match="/">
<xsl:value-of select="document('CDListe.xml')"/>
</xsl:template>
...
84
XSLT
© 2002 Orientation in Objects GmbH
42
Einfügen eines Menues
<html><body>
<table>
<tr>
<td valign="top">
<xsl:apply-templates
select="document('navigation.xml')/navigation"/>
</td>
<td>
<xsl:apply-templates/>
</td>
</tr>
</table>
</body></html>
85
XSLT
© 2002 Orientation in Objects GmbH
Überblick
•
•
•
•
•
•
•
•
XSLT Einführung
Stylesheets
XPath
Advanced XSLT
Anwendungen
PDF Erzeugung
Erzeugung von Grafiken
XSLT Praxis Techniken und Beispiele
86
XSLT
© 2002 Orientation in Objects GmbH
43
XSL Formatting Objects
• XSL-FO stellt die zweite Hälfte der XSL Spec.
• Final Recommondation seit 15.Oktober 2001
• besteht aus 56 definierten FO-Elementen und über 100
Attributen
• Formatting Objects beheben die Nachteile einer
Bildschirmausgabe, die vom Browser o.ä. abhängt und liefert für
die Druckausgabe optimierte Dokumente
• FOP ist eine Implementierung der ASF
87
XSLT
© 2002 Orientation in Objects GmbH
Aufbau eines FO-Dokuments
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="my-page">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="my-page">
<fo:flow flow-name="xsl-region-body">
<fo:block>Hier steht Text...</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
88
XSLT
© 2002 Orientation in Objects GmbH
44
Ausgabe in PDF
89
XSLT
© 2002 Orientation in Objects GmbH
Überblick
•
•
•
•
•
•
•
•
XSLT Einführung
Stylesheets
XPath
Advanced XSLT
Anwendungen
PDF Erzeugung
Erzeugung von Grafiken
XSLT Praxis Techniken und Beispiele
90
XSLT
© 2002 Orientation in Objects GmbH
45
Was ist SVG - Scalable Vector Graphics?
• Standardisiertes Grafikformat
• Aktueller Stand:
– SVG 1.0 W3C 4. September 2001
• 2D Vektor und mixed Vektor/Raster Grafik
• XML Anwendung
• SVG Grafiken können animiert, interaktiv und dynamisch sein
91
XSLT
© 2002 Orientation in Objects GmbH
SVG Viewer & Editoren
• Adobe
– www.adobe.de/svg
• IBM SVG View
– http://www.alphaworks.ibm.com/tech/svgview
• Apache Batik Project
– http://xml.apache.org/batik
• Jasc WebDraw
– http://www.jasc.com/products/webdraw
92
XSLT
© 2002 Orientation in Objects GmbH
46
Hello World als SVG
• Beispiel ist eine SVG Grafik
• Ausrichtung eines Textes an einem Pfad
93
XSLT
© 2002 Orientation in Objects GmbH
Sourcecode zu „Hello World“
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20001102//EN"
"http://www.w3.org/TR/2000/CR-SVG-20001102/DTD/svg-20001102.dtd">
<svg width="10cm" height="3cm" viewBox="0 0 1000 300">
<defs>
<path id="MyPath"
d="M 100 200 C 200 100 300
0 400 100
C 500 200 600 300 700 200 C 800 100 900 100 900 100"/>
</defs>
<desc>Hello World</desc>
<use xlink:href="#MyPath" style="fill:none; stroke:red" />
<text style="font-family:Verdana; font-size:60; fill:blue">
<textPath xlink:href="#MyPath">
Hello Scalable Vector Graphics
</textPath>
</text>
</svg>
94
XSLT
© 2002 Orientation in Objects GmbH
47
Dynamisches SVG
95
XSLT
© 2002 Orientation in Objects GmbH
Überblick
•
•
•
•
•
•
•
•
XSLT Einführung
Stylesheets
XPath
Advanced XSLT
Anwendungen
PDF Erzeugung
Erzeugung von Grafiken
XSLT Praxis Techniken und Beispiele
96
XSLT
© 2002 Orientation in Objects GmbH
48
Stylesheet Design-Ansätze nach Kay
•
•
•
•
Fill-in-the-blanks Stylesheet
Navigational Stylesheet
Rule-Based Stylesheet
Computational Stylesheet
(Siehe Michael Kay „XSLT Programmer‘s Reference“ Kapitel 8)
97
XSLT
© 2002 Orientation in Objects GmbH
Fill-in-the-blanks Stylesheet
• Einfach
• HTML mit XSLT Befehlen
• Stylesheet gleicht in der Struktur dem Output
98
XSLT
© 2002 Orientation in Objects GmbH
49
Fill-in-the-blanks Stylesheet: Beispiel
<html xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xsl:version="1.0">
<head>
<title>CD Liste</title>
</head>
<body>
<xsl:for-each select="cdliste/cd">
<b><xsl:value-of select="interpret"/></b>
:<xsl:value-of select="titel"/><br/>
</xsl:for-each>
</body>
</html>
99
XSLT
© 2002 Orientation in Objects GmbH
Fill-in-the-blanks Stylesheet: Ausgabe
Ausgabe mit cdliste.xml:
Madonna: Music
Madonna: Ray of light
Eminem: Marshall Mathers
Eminem: Eminem
Britney Spears: baby one more time
100
XSLT
© 2002 Orientation in Objects GmbH
50
Navigational Stylesheet
• Fortführung des Fill-in-the-blanks Stylesheet
• Output orientiert
• Kann enthalten
– Named Templates, Variablen, keys, Conditionals, ...
• Gleicht prozeduralem Programm
• Enthält xsl:stylesheet und xsl:template Tags
• Es wird vorgegeben, wo die Knoten im Source gefunden werden
können
• Erfordert starre Struktur des Inputs
101
XSLT
© 2002 Orientation in Objects GmbH
Navigational Stylesheet: Beispiel
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html><body>
<xsl:for-each select="cdliste/cd">
<br/><b><xsl:value-of select="interpret"/></b>
<xsl:call-template name="getTitel">
<xsl:with-param name="id" select="@id"/>
</xsl:call-template>
</xsl:for-each>
</body></html>
</xsl:template>
<xsl:template name="getTitel">
<xsl:param name="id"/>
<xsl:text> </xsl:text><xsl:value-of select="//cd[@id=$id]/titel"/>
</xsl:template>
</xsl:stylesheet>
102
XSLT
© 2002 Orientation in Objects GmbH
51
Rule-Based Stylesheet
• Besteht vorwiegend aus Regeln, wie bestimmte Dinge aus der
Quelle verarbeitet werden sollen
• Macht nur wenige Vermutungen über Quelle und Output
• Anwendung: Bei wenig bekannter oder flexibler Struktur der
Quelle
• Teile können gut wiederverwendet werden
103
XSLT
© 2002 Orientation in Objects GmbH
Rule-Based Stylesheet
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<html><body>
<xsl:apply-templates/>
</body></html>
</xsl:template>
<xsl:template match="interpret">
<b><xsl:value-of select="."/></b><br/>
</xsl:template>
<xsl:template match="titel">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
104
XSLT
© 2002 Orientation in Objects GmbH
52
Computational Stylesheet
• Struktur der Quelle stimmt nicht mit Output überein
• Anwendung:
– Umformatierung, Aggregation
• Verwendet Anteile der funktionalen Programmierung
105
XSLT
© 2002 Orientation in Objects GmbH
Exkurs: Funktionale Programmierung
•
•
•
•
Ohne Zuweisungen
Zuweisungen erzwingen bestimmten Programmablauf
Seiteneffekte werden vermieden
Rekursionen ersetzen Schleifen
106
XSLT
© 2002 Orientation in Objects GmbH
53
Computational Stylesheet: Beispiel
Quelle:
<keywords>XML XSLT XPath XPointer</keywords>
Output:
<keyword>XML</keyword>
<keyword>XSLT</keyword>
<keyword>XPath</keyword>
<keyword>XPointer</keyword>
107
XSLT
© 2002 Orientation in Objects GmbH
Computational Stylesheet: Beispiel Ablauf
tokenToElement(“XML XSLT XPath XPointer “)
Ausgabe
XML
XSLT XPath XPointer
tokenToElement(“XSLT XPath XPointer “)
XSLT
Ausgabe
XPath XPointer
tokenToElement(“XPath XPointer “)
XPath
Ausgabe
XPointer
tokenToElement(“XPointer “)
XPointer
Ausgabe
tokenToElement(“ “)
Abbruch
108
XSLT
© 2002 Orientation in Objects GmbH
54
Computational Stylesheet: Beispiel
Rekursives Template
<xsl:template match="keywords" name="tokenToElement">
<xsl:param name="words" select="concat(.,' ')"/>
<xsl:choose>
<xsl:when test="string-length($words) > 1">
<keyword>
<xsl:value-of select="substring-before($words,' ')"/>
</keyword>
<xsl:call-template name="tokenToElement">
<xsl:with-param name="words"
select="substring-after($words,' ')"/>
</xsl:call-template>
</xsl:when>
</xsl:choose>
</xsl:template>
109
XSLT
© 2002 Orientation in Objects GmbH
Aufgabe: CDs mit Preis kennzeichnen
110
XSLT
© 2002 Orientation in Objects GmbH
55
Lösung: Condition & Variable
<xsl:template match="cd">
<xsl:variable name="farbe">
<xsl:choose>
<xsl:when test="preis">orange</xsl:when>
<xsl:otherwise>lightgrey</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<tr style="background: {$farbe}">
<td><xsl:value-of select="titel"/></td>
</tr>
</xsl:template>
111
XSLT
© 2002 Orientation in Objects GmbH
Lösung: Condition
<xsl:template match="cd">
<tr>
<xsl:attribute name="style">
background:
<xsl:choose>
<xsl:when test="preis">orange</xsl:when>
<xsl:otherwise>lightgrey</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<td>
<xsl:value-of select="titel"/>
</td>
</tr>
</xsl:template>
112
XSLT
© 2002 Orientation in Objects GmbH
56
Aufgabe: Zusätzlicher Knopf
113
XSLT
© 2002 Orientation in Objects GmbH
Lösung: Mehrere Conditions
<xsl:template match="cd">
<tr>
<xsl:attribute name="style">
background:
<xsl:choose>
<xsl:when test="preis">orange</xsl:when>
<xsl:otherwise>lightgrey</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<td>
<xsl:value-of select="titel"/>
<xsl:if test="preis">
<input type="button" value="bestellen"/>
</xsl:if>
</td>
</tr>
</xsl:template>
114
XSLT
© 2002 Orientation in Objects GmbH
57
Lösung: Overloaded Matchtemplates
<xsl:template match="cd">
<tr style="background: lightgrey">
<td><xsl:value-of select="titel"/></td>
</tr>
</xsl:template>
<xsl:template match="cd[preis]">
<tr style="background: orange">
<td>
<xsl:value-of select="titel"/>
<input type="button" value="bestellen"/>
</td>
</tr>
</xsl:template>
115
XSLT
© 2002 Orientation in Objects GmbH
Best Practise: Schleifen
Mit Condition:
<xsl:for-each select="cd">
<xsl:if test="@jahr=2000">
<xsl:value-of select="titel"/><br/>
</xsl:if>
</xsl:for-each>
Besser mit Predikat:
<xsl:for-each select="cd[@jahr=2000]">
<xsl:value-of select="titel"/><br/>
</xsl:for-each>
116
XSLT
© 2002 Orientation in Objects GmbH
58
Best Practise: Dynamische Attribute
Mit Variable:
<xsl:variable name=“path“>
<xsl:call-template name="getDirPath">
<xsl:with-param name="node“
select="key('seiten',@name)"/>
</xsl:call-template>
</xsl:variable>
<a href=“{$path}“>Link</a>
117
XSLT
© 2002 Orientation in Objects GmbH
Best Practise: Dynamische Attribute
Besser mit Attribut-Tag:
<a>
<xsl:attribute name="href">
<xsl:call-template name="getDirPath">
<xsl:with-param name="node“ select="key('seiten',@name)"/>
</xsl:call-template>
</xsl:attribute>
Link
</a>
118
XSLT
© 2002 Orientation in Objects GmbH
59
Fragen?
? ? ?
?
?
http://www.oio.de/public
119
XSLT
© 2002 Orientation in Objects GmbH
Quellen
• Specification XSLT 1.0 (recommendation)
http://www.w3.org/TR/xslt.html
• Specification XPath 1.0 (recommendation)
http://www.w3.org/TR/xpath.html
• Michael Key, XSLT - Programmer´s Reference
WROX
• XSLT-Tutorial ZVON.org
http://www.zvon.org
• XSL Frequently Asked Questions
http://www.dpawson.co.uk/xsl/xslfaq.html
• XSLT-Tutorial N.Walsh
http://www.nwalsh.com/docs/tutorials/xsl/xsl/frames.html
120
XSLT
© 2002 Orientation in Objects GmbH
60
Herunterladen