13.02.2013 Aufrufe

Ihre Speaker Tobias Kieninger Christian Dedek - Orientation in ...

Ihre Speaker Tobias Kieninger Christian Dedek - Orientation in ...

Ihre Speaker Tobias Kieninger Christian Dedek - Orientation in ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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 &lt; 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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!