Ihre Speaker Tobias Kieninger Christian Dedek - Orientation in ...
Ihre Speaker Tobias Kieninger Christian Dedek - Orientation in ...
Ihre Speaker Tobias Kieninger Christian Dedek - Orientation in ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
XSLT<br />
<strong>Tobias</strong> <strong>Kien<strong>in</strong>ger</strong><br />
<strong>Christian</strong> <strong>Dedek</strong><br />
Thomas Bayer<br />
kien<strong>in</strong>ger@oio.de<br />
<strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
We<strong>in</strong>heimer Str. 68<br />
68309 Mannheim<br />
www.oio.de<br />
<strong>Ihre</strong> <strong>Speaker</strong><br />
<strong>Tobias</strong> <strong>Kien<strong>in</strong>ger</strong> <strong>Christian</strong> <strong>Dedek</strong><br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
1<br />
2
Organisatorisches<br />
• Unterlagen<br />
• Ke<strong>in</strong> Rechner benötigt<br />
• http://www.oio.de/public<br />
Überblick<br />
XSLT<br />
• XSLT E<strong>in</strong>führung<br />
• Stylesheets<br />
• XPath<br />
• Advanced XSLT<br />
• Anwendungen<br />
• PDF Erzeugung<br />
• Erzeugung von Grafiken<br />
• XSLT Praxis Techniken und Beispiele<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
3<br />
4
"Als Antwort der Industrie auf den Welthunger hat XML Java,<br />
Entwurfsmuster und die Objekttechnologie ersetzt... Trotzdem ist die<br />
Industrie im Moment dabei, alles, was gut und teuer ist, bezüglich<br />
XML umzukrempeln, ob dies S<strong>in</strong>n macht oder nicht..."<br />
Die Quelle als XML<br />
XSLT<br />
<br />
<br />
..<br />
<br />
Music<br />
Madonna<br />
BMG<br />
<br />
<br />
Music<br />
4:35<br />
<br />
<br />
Impressive Instant<br />
5:10<br />
<br />
<br />
...<br />
<br />
XSLT<br />
Don Box, Essential XML<br />
www.develop.com/books/essentialXML<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
5<br />
6
XSL - eXtensible Stylesheet Language<br />
• Bestand aus zwei Teilen:<br />
– Der Transformationssprache XSLT<br />
• Ändern der Struktur<br />
• H<strong>in</strong>zufügen von Formatierungsanweisungen<br />
– XML Vokabular für Formatierungen<br />
• Darstellungsform<br />
XML-Quellbaum<br />
XSL im Browser<br />
Server<br />
XML<br />
XSL<br />
XSL Transformation<br />
XML-Zielbaum<br />
XSLT<br />
XSLT<br />
XSL Formatierer<br />
PDF<br />
...<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
7<br />
8
XSL im Browser<br />
Vorteile:<br />
• Trennung von Content und Style<br />
• Suchmasch<strong>in</strong>en könnten XML Daten auswerten<br />
• XML Daten können von Fremdsystemen e<strong>in</strong>gelesen und<br />
verwertet werden<br />
Nachteile:<br />
• Menge der übertragenen Informationen<br />
• Browser muss XSL unterstützen<br />
Von XSL zu XSLT<br />
XSLT<br />
XSLT<br />
eXtensible Stylesheet Language for Transformation<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
XPath<br />
Transformationsanweisungen Adressierung<br />
Formatierung<br />
XSL-FO<br />
eXtensible Stylesheet Language - Formatt<strong>in</strong>g Objects<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
9<br />
10
XSLT Prozessor + Transformationen<br />
news.xml<br />
html.xsl<br />
txt.xsl<br />
XSLT<br />
Prozessor<br />
docbook.xsl<br />
(Xalan, Saxon, ..)<br />
csv.xsl<br />
XSLT<br />
XML-Transformationen mit Bäumen<br />
XML Datei<br />
Quelle<br />
Stylesheet Datei<br />
Stylesheet<br />
XSLT<br />
Prozessor<br />
XSLT<br />
Output<br />
news.html<br />
news.txt<br />
news.csv<br />
docbook.xml<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
11<br />
Output Datei<br />
12
Transformation <strong>in</strong> verschiedene Formate<br />
Überblick<br />
HTML<br />
Text<br />
CSV<br />
XML<br />
XSLT<br />
• XSLT E<strong>in</strong>führung<br />
• Stylesheets<br />
• XPath<br />
• Advanced XSLT<br />
• Anwendungen<br />
• PDF Erzeugung<br />
• Erzeugung von Grafiken<br />
• XSLT Praxis Techniken und Beispiele<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
13<br />
14
XSLT im Detail<br />
• Was ist XSLT (nicht)?<br />
– XSLT ist e<strong>in</strong>e funktionale Sprache, um XML-Dokumente zu<br />
transformieren<br />
– XSLT ist erweiterbar<br />
– „XSLT makes XML useful for non-programmers“ (James Clark)<br />
• E<strong>in</strong> XSLT-Dokument ist<br />
– selbst e<strong>in</strong> XML-Dokument<br />
– E<strong>in</strong>e Anleitung zur Transformation <strong>in</strong> e<strong>in</strong> Ergebnisdokument<br />
XSLT<br />
Aufbau des ersten Stylesheets<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
15<br />
16
Namespace<br />
• Deklariert e<strong>in</strong>en Namensraum für Elemente<br />
• Wird durch URI gekennzeichnet<br />
• XSLT hat Namespace xmlns:xsl="http://www.w3.org/1999/XSL/Transform“<br />
• XSLT-Prozessor wertet nur Elemente diesen Namespaces aus<br />
<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
• Befehle werden <strong>in</strong> e<strong>in</strong>er Schleife abgehandelt<br />
• Schleife läuft für jedes Element der select-Anweisung<br />
• Gebräuchlich für Listen<br />
• In jedem Durchlauf wird der Knoten zum Kontextknoten<br />
<br />
mache dies<br />
mache das<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
17<br />
18
Die erste Schleife<br />
<br />
,<br />
<br />
<br />
Inhalt des Context<br />
<br />
XSLT<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
Context = cd<br />
Context = track<br />
Context = cd<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
19<br />
20
Zweite Schleife<br />
<br />
<br />
<br />
<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
• gibt die Möglichkeit e<strong>in</strong>e Bed<strong>in</strong>gung abzuprüfen.<br />
• Ist der Test erfolgreich, werden die Anweisungen ausgeführt.<br />
<br />
mache dies<br />
tue das<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
21<br />
22
• Dient zum Überprüfen auf mehrere Kriterien<br />
• Der Choose Befehl hat zwei Unterelemente:<br />
– <br />
– <br />
• Die when-Anweisung kann beliebig oft <strong>in</strong> “choose” auftauchen,<br />
otherwise jedoch nur e<strong>in</strong>mal<br />
<br />
Beispiel:<br />
XSLT<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
<br />
tue dies <br />
tue das <br />
mach was anderes <br />
<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
23<br />
24
Conditions<br />
<br />
Preis: DM <br />
<br />
Überblick<br />
XSLT<br />
• XSLT E<strong>in</strong>führung<br />
• Stylesheets<br />
• XPath<br />
• Advanced XSLT<br />
• Anwendungen<br />
• PDF Erzeugung<br />
• Erzeugung von Grafiken<br />
• XSLT Praxis Techniken und Beispiele<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
25<br />
26
XPath<br />
• Spezifiziert Adressierung e<strong>in</strong>es XML-Dokumentes<br />
• Enthält 13 Achsenbezeichner (AxisName)<br />
• es existieren Kurz- und Langformen zur Adressierung<br />
• W3C Recommendation seit 16. November 1999<br />
• Geme<strong>in</strong>same Syntax für Funktionalitäten, die sich XSLT und<br />
Xpo<strong>in</strong>ter( www.w3c.org/tr/xptr ) teilen<br />
NodeSet<br />
XSLT<br />
• E<strong>in</strong>e Menge von Knoten des Dokumentes<br />
• Listet Knoten e<strong>in</strong>es XPath-Ausdruckes auf<br />
node set<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
27<br />
28
Axis Names -<br />
e<strong>in</strong>e kle<strong>in</strong>e “Baumschule”<br />
<br />
14.01.2001<br />
OIO CD-Liste<br />
Diese CD-Liste ist...<br />
<br />
<br />
Music<br />
Madonna<br />
BMG<br />
19.99<br />
<br />
<br />
<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
29<br />
30
Achsen (Auszug)<br />
cdliste<br />
preceed<strong>in</strong>g-sibl<strong>in</strong>g follow<strong>in</strong>g-sibl<strong>in</strong>g<br />
cd cd cd<br />
Location step<br />
tracks<br />
track track track<br />
parent<br />
child<br />
XSLT<br />
titel<br />
E<strong>in</strong> Step besteht aus Achsennamen und Knotentest<br />
AxisName::NodeTest<br />
parent::cdliste<br />
parent::node()<br />
XSLT<br />
cdliste<br />
titel <strong>in</strong>terpret<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
cd cd cd<br />
tracks<br />
track track track<br />
titel<br />
titel <strong>in</strong>terpret<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
preis<br />
31<br />
preis<br />
32
Location step II<br />
E<strong>in</strong> Step besteht aus Achsennamen und Knotentest<br />
AxisName::NodeTest<br />
follow<strong>in</strong>g-sibl<strong>in</strong>g::cd<br />
follow<strong>in</strong>g-sibl<strong>in</strong>g::node()<br />
XSLT<br />
cdliste<br />
cd cd cd<br />
tracks<br />
track track track<br />
Location step und Location path<br />
Location step<br />
titel<br />
Location step<br />
XSLT<br />
titel <strong>in</strong>terpret<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
Location path<br />
<br />
<br />
<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
preis<br />
33<br />
34
Verschiedene Pfade<br />
XSLT<br />
Adressierung <strong>in</strong>nerhalb e<strong>in</strong>es Knotens<br />
Namespace<br />
Attribute1<br />
Node<br />
Attribute2<br />
XSLT<br />
Attribute3<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
Text<br />
Das Sem...<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
35<br />
36
Beispiel bei text()<br />
• Die Quelle:<br />
Hier stehen wichtigeInformationen!<br />
• Das Stylesheet:<br />
<br />
<br />
<br />
• Das Resultat:<br />
Hier stehen<br />
Beispiele<br />
XSLT<br />
mes<br />
Hier stehen Informationen<br />
b<br />
wichtige<br />
<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
37<br />
38
Prädikate<br />
Gefiltertes Node Set<br />
cd[<strong>in</strong>terpret=‘Madonna‘]<br />
Node Set des NodeTestes<br />
Kontext <strong>in</strong> e<strong>in</strong>em Prädikat<br />
XSLT<br />
Menge aller CD Elemente<br />
mit Interpret Madonna<br />
Menge aller CD Elemente<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
//cd[<strong>in</strong>terpret=‘Madonna‘]<br />
Context<br />
=<br />
gesamter<br />
Baum<br />
Context = aktuelle cd<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
39<br />
40
Prädikate üben<br />
• //cd[preis]<br />
• //cd[@jahr < 1997] bzw. //cd[@jahr < 1997]<br />
• //cd[@jahr > 1997 and @jahr
Funktionen (Auszug)<br />
Funktion Zweck<br />
position() Knoten auf Position prüfen<br />
last() Gibt den letzten Knoten zurück<br />
count(node-set) Anzahl der Knoten ermitteln<br />
sum(node-set) Summiert alle Knoten auf<br />
substr<strong>in</strong>g-after(‘Hallo‘,‘a‘) Gibt e<strong>in</strong>en Teilstr<strong>in</strong>g zurück (->‘llo‘)<br />
sum(node-set) Summiert alle Knoten auf<br />
<br />
Euro-E<strong>in</strong>führung<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
EUR <br />
Der Durchschnittspreis ist:<br />
DM <br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
43<br />
44
Überblick<br />
• XSLT E<strong>in</strong>führung<br />
• Stylesheets<br />
• XPath<br />
• Advanced XSLT<br />
• Anwendungen<br />
• PDF Erzeugung<br />
• Erzeugung von Grafiken<br />
• XSLT Praxis Techniken und Beispiele<br />
XSLT<br />
Document Order - Leserichtung<br />
1<br />
2 3<br />
4<br />
5 6 7<br />
8<br />
XSLT<br />
9<br />
10 11<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
12<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
45<br />
46
• Es taucht als child von auf<br />
• Besteht aus zwei Bestandteilen<br />
– E<strong>in</strong> Pattern, welches auf Knoten des Sourcetrees angewandt wird<br />
– E<strong>in</strong> Template, welches <strong>in</strong>stanziiert werden kann, damit es<br />
Bestandteil des Resulttrees wird<br />
Matchpattern<br />
<br />
E<strong>in</strong> Hersteller<br />
<br />
Ausgabe<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
• Anweisung für Prozessor mit Transformation fort zu fahren<br />
• Andere Regeln werden gesucht und abgearbeitet<br />
• Danach wird <strong>in</strong> der ursprünglichen Regel weiter gemacht<br />
<br />
<br />
<br />
<br />
<br />
<br />
E<strong>in</strong> Hersteller<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
47<br />
48
• Anweisung für Prozessor mit Transformation fort zu fahren<br />
• Attribut select=“xyz” wählt die Child-Knoten aus<br />
• Danach wird <strong>in</strong> der ursprünglichen Regel weiter gemacht<br />
<br />
<br />
<br />
<br />
<br />
<br />
E<strong>in</strong> Hersteller<br />
<br />
Build-In Template Rules<br />
<br />
<br />
<br />
XSLT<br />
<br />
<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
49<br />
50
Bestehende Anwendung modularisieren 1<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Bestehende Anwendung modularisieren 2<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
<br />
<br />
...<br />
<br />
<br />
<br />
<br />
<br />
Preis: DM <br />
<br />
<br />
Sonderpreis: DM <br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
51<br />
52
Bestehende Anwendung modularisieren 3<br />
<br />
<br />
...<br />
<br />
<br />
<br />
<br />
<br />
Preis: DM <br />
<br />
<br />
Sonderpreis: DM <br />
<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
• Def<strong>in</strong>iert globale und lokale Variablen<br />
• Lokale Variablen s<strong>in</strong>d nur im jeweiligen Template sichtbar<br />
• Anwendung erfolgt über “$Name”.<br />
Def<strong>in</strong>ition:<br />
London<br />
Anwenden:<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
53<br />
54
• Als Top-Level-Element def<strong>in</strong>iert es globale Parameter<br />
• Innerhalb e<strong>in</strong>es Templates deklariert es lokale Parameter<br />
• “name” kennzeichnet den Namen des Parameters<br />
• Anwenden erfolgt über “$Name”.<br />
XSLT-Proz<br />
Def<strong>in</strong>ition:<br />
<br />
London<br />
<br />
Template<br />
Anwenden:<br />
<br />
<br />
XSLT<br />
Template<br />
Stylesheet<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
• Übergabe e<strong>in</strong>es Parameters bei<br />
– oder<br />
– <br />
• Kann nur als Child von o.g. template-Aufrufen auftreten<br />
<br />
London<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
55<br />
56
• Attribute können auch dynamisch angelegt werden<br />
<br />
<br />
<br />
.jpg<br />
<br />
<br />
<br />
<br />
Attribute Value Templates<br />
• Beispiel: Die Quelldatei<br />
<br />
blume.jpg<br />
<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
• Das zugehörige Stylesheet:<br />
/images<br />
...<br />
<br />
<br />
<br />
• Ergebnis:<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
57<br />
58
Anwendung<br />
<br />
orange<br />
<br />
Überblick<br />
XSLT<br />
• XSLT E<strong>in</strong>führung<br />
• Stylesheets<br />
• XPath<br />
• Advanced XSLT<br />
• Anwendungen<br />
• PDF Erzeugung<br />
• Erzeugung von Grafiken<br />
• XSLT Praxis Techniken und Beispiele<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
59<br />
60
BME-Cat<br />
<br />
<br />
<br />
<br />
GTH 0015208<br />
<br />
Injektionspflaster, 1,2cm<br />
Gothaplast<br />
1,2cm * 4cm<br />
<br />
<br />
Paket<br />
<br />
<br />
<br />
18.0<br />
<br />
<br />
<br />
...<br />
61<br />
XSLT<br />
Erzeugen mehrerer Outputfiles<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
• Outputmöglichkeiten mittels :<br />
– XML<br />
– HTML<br />
– re<strong>in</strong>er Text (Str<strong>in</strong>gwerte aller Knoten)<br />
• Erzeugen mehrerer Outputfiles mittels ,<br />
wobei href den Pfad angibt (absolut oder relativ), wo das Dokument<br />
gespeichert werden soll<br />
• Es exisitiert e<strong>in</strong> Hauptdokument, jeder mit e<strong>in</strong>geleitete Abschnitt stellt e<strong>in</strong> untergeordnetes<br />
Dokument dar, es ensteht e<strong>in</strong>e Baumstruktur<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
62
Mehrere Outputs<br />
<br />
<br />
<br />
<br />
....<br />
<br />
<br />
<br />
<br />
XSLT<br />
Verl<strong>in</strong>kung der Detailansichten<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
<br />
<br />
<br />
vorheriger<br />
<br />
<br />
<br />
<br />
nächster<br />
<br />
<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
63<br />
64
Verschiedene Outputs<br />
Idee: XSLT im Servlet<br />
XML<br />
XSL XSL<br />
Dokument<br />
Sheets<br />
Web Server<br />
XSLT<br />
Servlet Eng<strong>in</strong>e<br />
XSLT Prozessor<br />
XSLT<br />
XSL<br />
XSL XSL<br />
Sheets<br />
Sheets<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
65<br />
66
Generierung im Batch<br />
Vorteile:<br />
• Schnelle Bearbeitung von Abrufen<br />
• Konventioneller Web Server ist ausreichend<br />
• Robuster im Betrieb<br />
Nachteile:<br />
• Ke<strong>in</strong>e dynamische Seitengenerierung<br />
Gruppieren <strong>in</strong> XSLT<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
<br />
<br />
Madonna<br />
Music<br />
Madonna<br />
Ray of light<br />
Em<strong>in</strong>em<br />
Marshall Mathers<br />
Madonna<br />
Frozen<br />
Britney Spears<br />
Baby one more..<br />
Em<strong>in</strong>em<br />
Em<strong>in</strong>em<br />
Madonna<br />
Music<br />
Ray of light<br />
Frozen<br />
XSLT<br />
Em<strong>in</strong>em<br />
Marshall Mathers<br />
Em<strong>in</strong>em<br />
Britney Spears<br />
Baby one more..<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
67<br />
68
CD-Liste gruppieren<br />
Keys: Key-Tabellen def<strong>in</strong>ieren<br />
Quelldokument<br />
XSLT<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
<br />
Stylesheet<br />
“cds“ Schlüsseltabelle<br />
Schlüssel Knoten<br />
Madonna cd<br />
Madonna cd<br />
Em<strong>in</strong>em cd<br />
Em<strong>in</strong>em cd<br />
Britney Spears cd<br />
Em<strong>in</strong>em cd<br />
... cd<br />
documentorder<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
69<br />
70
Verwendung von Key-Tabellen<br />
Beispiel: Schleife über Nodeset<br />
<br />
...<br />
<br />
CD-Liste gruppieren<br />
Nodeset mit allen<br />
Knoten zum Schlüssel<br />
Name der Key-Tabelle gesuchter Str<strong>in</strong>g<br />
XSLT<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
71<br />
72
Identifikation: generate-id()<br />
• generate-id() weist e<strong>in</strong>em Knoten e<strong>in</strong>e e<strong>in</strong>deutige ID zu.<br />
<br />
• Ausgabe bei Saxon:<br />
Music(b1b1b2)<br />
Ray of light(b1b1b4)<br />
Marshall Mathers(b1b1b6)<br />
Em<strong>in</strong>em(b1b1b8)<br />
baby one more time(b1b1c10)<br />
XSLT<br />
Identifikation: Erstes Element f<strong>in</strong>den<br />
• Bilden der eigenen id<br />
• Vergleich mit E<strong>in</strong>trag aus der Key-Tabelle<br />
• Nur erster E<strong>in</strong>trag wird angezeigt<br />
cd[generate-id(.)=generate-id(key('cds',<br />
<strong>in</strong>terpret))]<br />
id von Context-Knoten erste id aus Key-Tabelle<br />
XSLT<br />
cd<br />
<strong>in</strong>terpret titel<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
<strong>in</strong>terpret<br />
cdliste<br />
cd<br />
titel<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
73<br />
cd<br />
74
Gruppieren nach Muench: Beispiel<br />
...<br />
<br />
...<br />
<br />
<br />
<br />
<br />
Titel: <br />
Hersteller: <br />
<br />
<br />
<br />
<br />
...<br />
XSLT<br />
Muench´sche Methode: Ausgabe<br />
Madonna<br />
Titel: Music<br />
Hersteller: BMG<br />
Titel: Ray of light<br />
Hersteller: BMG<br />
Em<strong>in</strong>em<br />
Titel: Marshall Mathers<br />
Hersteller: Sony<br />
Titel: Em<strong>in</strong>em<br />
Hersteller: Sony<br />
Britney Spears<br />
Titel: Baby one more time<br />
Hersteller: Sony<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
75<br />
76
XSLT-Performance<br />
• Wozu wird XSLT genutzt ?<br />
• Kle<strong>in</strong>er Input<br />
• Stylesheets vorher übersetzen<br />
• Prozessor<strong>in</strong>itialisierung<br />
Faustregeln<br />
XSLT<br />
• Ke<strong>in</strong> //item<br />
• mehrfache Nutzung von Nodesets<br />
• <br />
• preced<strong>in</strong>g, follow<strong>in</strong>g axes<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
77<br />
78
XSLT-Performance<br />
20 sec/Mb<br />
5 sec/Mb<br />
1 sec/Mb<br />
XSLT-Performance<br />
Simple<br />
optimization<br />
To day<br />
XSLT<br />
• Verschiedene Implementierungen<br />
• MSXML http://msdn.microsoft.com/xml/general/xmlparser.asp<br />
• Sablotron http://www.g<strong>in</strong>gerall.com/charlie-b<strong>in</strong>/get/webGA/act/sablotron.act<br />
• Saxon http://saxon.sourceforge.net/<br />
• TransforMiiX http://www.mozilla.org/projects/xslt/<br />
• Xalan-Java http://xml.apache.org/xalan/<br />
• Xalan-C++ http://xml.apache.org/xalan-c/<br />
• XT http://xml.apache.org/xalan-c/<br />
• Oracle Java http://technet.oracle.com/tech/xml/parser_java2/<strong>in</strong>dex.htm<br />
• Four Thought http://www.fourthought.com/4SuiteServer/<strong>in</strong>dex.html<br />
• Sun's XSLTC : http://www.sun.com/xml/developers/xsltc/<br />
• LibXSLT http://xmlsoft.org/<br />
• jd.xslt http://www.aztecrider.com/xslt/download.html<br />
• Infoteria iXSLT http://www.<strong>in</strong>foteria.com/en/contents/product/ixslt/<strong>in</strong>dex.html<br />
• Benchmark<strong>in</strong>g<br />
• http://www.datapower.com/XSLTMark/<br />
XSLT<br />
Advanced<br />
optimization<br />
Quelle: Michael Kay:“Inside an XSLT Processor“ 19.5.2000<br />
http://www9.org/devday-xml/session3/kay.ppt<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
Quelle:Eugne Kuznetzov, Curys Dolph<br />
http://www.datapower.com/XSLTMark/res_2001_04_01.html<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
79<br />
80
Inkludieren von Stylesheets<br />
• Erfolgt über
Modularisierung von Stylesheets<br />
<br />
<br />
A<br />
B C<br />
XYZ<br />
XYZ<br />
D E F<br />
XSLT<br />
XYZ<br />
XYZ XYZ XYZ<br />
Transformation mehrerer Dokumente<br />
Stylesheet<br />
Template<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
• Zugriff auf andere XML-Dokumente mittels der Funktion document(...)<br />
• Als Argument wird e<strong>in</strong> XML-Dokument übergeben, das die<br />
e<strong>in</strong>zufügenden Knoten enthält<br />
• E<strong>in</strong>e Erweiterung der XPath-Funktionen<br />
• Reihenfolge der Knoten abhängig von Implementierung<br />
...<br />
<br />
<br />
<br />
...<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
83<br />
84
E<strong>in</strong>fügen e<strong>in</strong>es Menues<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Überblick<br />
XSLT<br />
• XSLT E<strong>in</strong>führung<br />
• Stylesheets<br />
• XPath<br />
• Advanced XSLT<br />
• Anwendungen<br />
• PDF Erzeugung<br />
• Erzeugung von Grafiken<br />
• XSLT Praxis Techniken und Beispiele<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
85<br />
86
XSL Formatt<strong>in</strong>g Objects<br />
• XSL-FO stellt die zweite Hälfte der XSL Spec.<br />
• F<strong>in</strong>al Recommondation seit 15.Oktober 2001<br />
• besteht aus 56 def<strong>in</strong>ierten FO-Elementen und über 100<br />
Attributen<br />
• Formatt<strong>in</strong>g Objects beheben die Nachteile e<strong>in</strong>er<br />
Bildschirmausgabe, die vom Browser o.ä. abhängt und liefert für<br />
die Druckausgabe optimierte Dokumente<br />
• FOP ist e<strong>in</strong>e Implementierung der ASF<br />
Aufbau e<strong>in</strong>es FO-Dokuments<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Hier steht Text...<br />
<br />
<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
87<br />
88
Ausgabe <strong>in</strong> PDF<br />
Überblick<br />
XSLT<br />
• XSLT E<strong>in</strong>führung<br />
• Stylesheets<br />
• XPath<br />
• Advanced XSLT<br />
• Anwendungen<br />
• PDF Erzeugung<br />
• Erzeugung von Grafiken<br />
• XSLT Praxis Techniken und Beispiele<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
89<br />
90
Was ist SVG - Scalable Vector Graphics?<br />
• Standardisiertes Grafikformat<br />
• Aktueller Stand:<br />
– SVG 1.0 W3C 4. September 2001<br />
• 2D Vektor und mixed Vektor/Raster Grafik<br />
• XML Anwendung<br />
• SVG Grafiken können animiert, <strong>in</strong>teraktiv und dynamisch se<strong>in</strong><br />
SVG Viewer & Editoren<br />
• Adobe<br />
– www.adobe.de/svg<br />
XSLT<br />
• IBM SVG View<br />
– http://www.alphaworks.ibm.com/tech/svgview<br />
• Apache Batik Project<br />
– http://xml.apache.org/batik<br />
• Jasc WebDraw<br />
– http://www.jasc.com/products/webdraw<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
91<br />
92
Hello World als SVG<br />
• Beispiel ist e<strong>in</strong>e SVG Grafik<br />
• Ausrichtung e<strong>in</strong>es Textes an e<strong>in</strong>em Pfad<br />
Sourcecode zu „Hello World“<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
<br />
<br />
<br />
<br />
<br />
<br />
Hello World<br />
<br />
<br />
<br />
Hello Scalable Vector Graphics<br />
<br />
<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
93<br />
94
Dynamisches SVG<br />
Überblick<br />
XSLT<br />
• XSLT E<strong>in</strong>führung<br />
• Stylesheets<br />
• XPath<br />
• Advanced XSLT<br />
• Anwendungen<br />
• PDF Erzeugung<br />
• Erzeugung von Grafiken<br />
• XSLT Praxis Techniken und Beispiele<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
95<br />
96
Stylesheet Design-Ansätze nach Kay<br />
• Fill-<strong>in</strong>-the-blanks Stylesheet<br />
• Navigational Stylesheet<br />
• Rule-Based Stylesheet<br />
• Computational Stylesheet<br />
(Siehe Michael Kay „XSLT Programmer‘s Reference“ Kapitel 8)<br />
Fill-<strong>in</strong>-the-blanks Stylesheet<br />
XSLT<br />
• E<strong>in</strong>fach<br />
• HTML mit XSLT Befehlen<br />
• Stylesheet gleicht <strong>in</strong> der Struktur dem Output<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
97<br />
98
Fill-<strong>in</strong>-the-blanks Stylesheet: Beispiel<br />
<br />
<br />
CD Liste<br />
<br />
<br />
<br />
<br />
:<br />
<br />
<br />
<br />
XSLT<br />
Fill-<strong>in</strong>-the-blanks Stylesheet: Ausgabe<br />
Ausgabe mit cdliste.xml:<br />
Madonna: Music<br />
Madonna: Ray of light<br />
Em<strong>in</strong>em: Marshall Mathers<br />
Em<strong>in</strong>em: Em<strong>in</strong>em<br />
Britney Spears: baby one more time<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
99<br />
100
Navigational Stylesheet<br />
• Fortführung des Fill-<strong>in</strong>-the-blanks Stylesheet<br />
• Output orientiert<br />
• Kann enthalten<br />
– Named Templates, Variablen, keys, Conditionals, ...<br />
• Gleicht prozeduralem Programm<br />
• Enthält xsl:stylesheet und xsl:template Tags<br />
• Es wird vorgegeben, wo die Knoten im Source gefunden werden<br />
können<br />
• Erfordert starre Struktur des Inputs<br />
XSLT<br />
Navigational Stylesheet: Beispiel<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
101<br />
102
Rule-Based Stylesheet<br />
• Besteht vorwiegend aus Regeln, wie bestimmte D<strong>in</strong>ge aus der<br />
Quelle verarbeitet werden sollen<br />
• Macht nur wenige Vermutungen über Quelle und Output<br />
• Anwendung: Bei wenig bekannter oder flexibler Struktur der<br />
Quelle<br />
• Teile können gut wiederverwendet werden<br />
Rule-Based Stylesheet<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
103<br />
104
Computational Stylesheet<br />
• Struktur der Quelle stimmt nicht mit Output übere<strong>in</strong><br />
• Anwendung:<br />
– Umformatierung, Aggregation<br />
• Verwendet Anteile der funktionalen Programmierung<br />
XSLT<br />
Exkurs: Funktionale Programmierung<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
• Ohne Zuweisungen<br />
• Zuweisungen erzw<strong>in</strong>gen bestimmten Programmablauf<br />
• Seiteneffekte werden vermieden<br />
• Rekursionen ersetzen Schleifen<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
105<br />
106
Computational Stylesheet: Beispiel<br />
Quelle:<br />
XML XSLT XPath XPo<strong>in</strong>ter<br />
Output:<br />
XML<br />
XSLT<br />
XPath<br />
XPo<strong>in</strong>ter<br />
Computational Stylesheet: Beispiel Ablauf<br />
Ausgabe<br />
XSLT<br />
tokenToElement(“XML XSLT XPath XPo<strong>in</strong>ter “)<br />
Ausgabe<br />
XML XSLT XPath XPo<strong>in</strong>ter<br />
tokenToElement(“XSLT XPath XPo<strong>in</strong>ter “)<br />
Ausgabe<br />
XSLT XPath XPo<strong>in</strong>ter<br />
tokenToElement(“XPath XPo<strong>in</strong>ter “)<br />
Ausgabe<br />
XPath XPo<strong>in</strong>ter<br />
tokenToElement(“XPo<strong>in</strong>ter “)<br />
XSLT<br />
XPo<strong>in</strong>ter<br />
tokenToElement(“ “)<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
Abbruch<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
107<br />
108
Computational Stylesheet: Beispiel<br />
Rekursives Template<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
XSLT<br />
Aufgabe: CDs mit Preis kennzeichnen<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
109<br />
110
Lösung: Condition & Variable<br />
<br />
<br />
<br />
orange<br />
lightgrey<br />
<br />
<br />
<br />
<br />
<br />
<br />
Lösung: Condition<br />
<br />
<br />
<br />
background:<br />
<br />
orange<br />
lightgrey<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
XSLT<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
111<br />
112
Aufgabe: Zusätzlicher Knopf<br />
Lösung: Mehrere Conditions<br />
<br />
<br />
<br />
background:<br />
<br />
orange<br />
lightgrey<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
XSLT<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
113<br />
114
Lösung: Overloaded Matchtemplates<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Best Practise: Schleifen<br />
Mit Condition:<br />
XSLT<br />
<br />
<br />
<br />
<br />
<br />
Besser mit Predikat:<br />
<br />
<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
115<br />
116
Best Practise: Dynamische Attribute<br />
Mit Variable:<br />
<br />
<br />
<br />
<br />
<br />
L<strong>in</strong>k<br />
<br />
XSLT<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
117<br />
118
Fragen?<br />
Quellen<br />
? ? ?<br />
?<br />
http://www.oio.de/public<br />
• Specification XSLT 1.0 (recommendation)<br />
http://www.w3.org/TR/xslt.html<br />
• Specification XPath 1.0 (recommendation)<br />
http://www.w3.org/TR/xpath.html<br />
• Michael Key, XSLT - Programmer´s Reference<br />
WROX<br />
• XSLT-Tutorial ZVON.org<br />
http://www.zvon.org<br />
• XSL Frequently Asked Questions<br />
http://www.dpawson.co.uk/xsl/xslfaq.html<br />
• XSLT-Tutorial N.Walsh<br />
http://www.nwalsh.com/docs/tutorials/xsl/xsl/frames.html<br />
XSLT<br />
XSLT<br />
?<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
© 2002 <strong>Orientation</strong> <strong>in</strong> Objects GmbH<br />
119<br />
120