xsl:template - Business Informatics Group
xsl:template - Business Informatics Group
xsl:template - Business Informatics Group
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
M7: XSLT<br />
Inhalt<br />
Einführung<br />
Verarbeitungsmodell<br />
Stylesheets<br />
Template Rules<br />
Sprachumfang<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
1
Einführung<br />
1/10: Motivation für Stylesheets<br />
Aufgaben: Transformation<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
Layout<br />
Extraktion von Informationen<br />
Stylesheet = Datei, die Regeln für die Strukturierung und<br />
Formatierung von Elementen einer Quelldatei enthält<br />
keine feste Kodierung der Regeln in Applikationen (wie z.B.<br />
Darstellungsregeln in HTML Browser) → generische Prozessoren<br />
Ein und derselbe Inhalt wird dadurch<br />
unterschiedlich strukturierbar (umordnen, erweitern,<br />
einschränken, etc.)<br />
unterschiedlich formatierbar (verschiedene<br />
Ausgabeformate - HTML, PDF, WML, etc. - und Ausgabegeräte<br />
- PC, Handhelds, etc.)<br />
Content-Provider müssen sich nicht um Layoutfragen kümmern!<br />
2
Einführung<br />
2/10: Sprachen zur Erstellung von Stylesheets<br />
• DSSSL (Document Style Semantics and Specification Language)<br />
für SGML<br />
• CSS (Cascading Style Sheets)<br />
für HTML und X(HT)ML<br />
• XSL (Extensible Stylesheet Language)<br />
für X(HT)ML<br />
CSS vs. XSL:<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
CSS XSL<br />
Anwendbar auf HTML-Dokumente ja nein<br />
Anwendbar auf XML-Dokumente ja ja<br />
Transformation nein ja<br />
Syntax proprietär XML<br />
Dokument als Baum repräsentiert nein ja<br />
Anwendungsbereich einfach komplex<br />
3
Einführung<br />
3/10: XSL - Transformation und Formatierung<br />
XSLT: XSL Transformations<br />
Sprache zur Transformation der Struktur eines XML-Dokuments<br />
XML-Syntax<br />
Ausgabe in XML (primäres Ziel des W3C), aber auch in HTML<br />
oder beliebigem anderen ASCII-Format<br />
Adressierung von Dokumentteilen durch XPath<br />
W3C-REC "XSL Transformations (XSLT) 1.0", 16. Nov. 1999<br />
XSL-FO: XSL Formatting Objects<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
XSLT<br />
XPath<br />
XSL<br />
XSL-FO<br />
XML-Vokabular zur Spezifikation von Formatierungssemantik,<br />
unabhängig von konkreten Ausgabeformaten<br />
W3C-REC "Extensible Stylesheet Language (XSL) 1.0", 15. Oct.<br />
2001<br />
4
Einführung<br />
4/10: XSL Beispiel<br />
<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
<br />
XSLT <br />
XSL-FO<br />
<br />
<br />
XPath<br />
5
Einführung<br />
5/10: Wozu Transformieren?<br />
Beispiel Datenaustausch:<br />
falls kein gemeinsames Schema verwendet<br />
wird - Umstrukturierung der XML-<br />
Dokumente<br />
falls Empfänger-Applikation kein XML<br />
versteht - Transformation z.B. in<br />
comma separated list<br />
Beispiel Multi-Delivery:<br />
XML muss in entsprechendes Format des<br />
Ausgabegerätes transformiert werden<br />
(HTML, WML, etc.)<br />
Beispiel Datenintegration:<br />
Extraktion von XML-Dokument-Teilen und<br />
Integration in anderen XML-Dokumenten<br />
(z.B. Kundenadresse aus Kundenliste<br />
extrahieren und in Rechnung integrieren)<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
XML<br />
(Schema A)<br />
XML<br />
XML<br />
XML<br />
XML<br />
(Schema B)<br />
Anything<br />
6<br />
HTML<br />
WML<br />
XML<br />
Fragment
Einführung<br />
6/10: Wann/Wo Transformieren?<br />
Request<br />
(Pull)<br />
Änderung<br />
(Push)<br />
Zeitpunkt<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
Kategorien von XSLT Prozessoren:<br />
Teil des Web Browsers: z.B. IE6<br />
Teil des Web (Application) Servers: z.B.<br />
http://xml.apache.org/cocoon<br />
Standalone: z.B.<br />
http://users.iclway.co.uk/mhkay/saxon<br />
http://xml.apache.org/xalan-j/<br />
Server Client<br />
Lokation<br />
7
Einführung<br />
7/10: Sprachcharakteristika<br />
XSLT basiert auf XML-Syntax<br />
XSLT Stylesheet ist ein wohlgeformtes XML-Dokument<br />
Wiederverwendung von XML-Prozessoren zum Parsen<br />
XSLT erlaubt die Einbindung anderer<br />
Programmiersprachen (Java, Javascript, etc.)<br />
XSLT ist demnach berechnungsvollständig<br />
XSLT ist regelbasiert<br />
ein Stylesheet enthält eine Menge von "Template Rules"<br />
wenn ein bestimmtes Muster ("Pattern") - definiert durch XPath -<br />
im Input auftaucht ("Kontext"), wird bestimmter Output<br />
produziert ("Action")<br />
XSLT ist ressourcenintensiv<br />
gesamtes Dokument im Hauptspeicher<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
8
Einführung<br />
8/10: XSLT und XML Prozessoren/APIs<br />
XSLT-Prozessoren verwenden XML-Prozessoren<br />
XML-Prozessoren konvertieren das XML-Dokument in eine<br />
Baumstruktur - das XPath-Datenmodell<br />
XSLT navigiert, selektiert und manipuliert die Knoten in<br />
diesem Baum<br />
Transformationen deklarativ spezifizierbar<br />
Transformationen können als Menge von Regeln angegeben<br />
werden, anstatt einer Sequenz prozeduraler API-<br />
Instruktionen<br />
der XSLT-Prozessor entscheidet über das WIE<br />
(kann jedoch beeinflußt werden) - XSLT ist frei von<br />
Seiteneffekten<br />
ein einzelnes XSLT-Stylesheet kann daher oftmals für<br />
unterschiedlich strukturierte Dokumente herangezogen<br />
werden, anstatt jedesmal eine neue Anwendung schreiben zu<br />
müssen (hohe Wiederverwendbarkeit)<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
9
Einführung<br />
9/10: XSLT und XPath<br />
XSLT verwendet XPath<br />
zur Selektion von Elementen, die verarbeitet werden<br />
sollen<br />
zum Kopieren von Werten aus dem Quelldokument in<br />
das Ergebnisdokument<br />
für numerische Berechnungen<br />
zur Stringmanipulation<br />
zum Testen boolescher Bedingungen<br />
XSLT erweitert XPath um zusätzliche Funktionen<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
10
Einführung<br />
10/10: XSLT und SQL<br />
"XSLT ist das SQL des Web"<br />
Datenselektion<br />
Abgeschlossenheit<br />
Zusammengesetzte<br />
Operationen<br />
Built-In Operationen<br />
Semi-prozedurale<br />
Mechanismen<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
SQL Standard<br />
SELECT Statement<br />
Tabellen<br />
Views und<br />
Subqueries<br />
XSLT Standard<br />
XPath Expression<br />
Bäume<br />
Template Rules und<br />
mehrere Stylesheets<br />
Arithmetik, Vergleiche, Stringmanipulation<br />
Beeinflussung der Verarbeitungsreihenfolge,<br />
Einbindung von Programmiersprachen<br />
11
Inhalt<br />
Einführung<br />
Verarbeitungsmodell<br />
Stylesheets<br />
Template Rules<br />
Sprachumfang<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
12
Verarbeitungsmodell<br />
1/7: Überblick<br />
Quelldokument<br />
(XML)<br />
XML Prozessor<br />
Stylesheet Baum<br />
Quellbaum<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
Stylesheet<br />
(XML)<br />
XML Prozessor<br />
Transformationsprozeß<br />
(XSLT-Prozessor)<br />
Ergebnisbaum<br />
Output<br />
Dokumente<br />
HTML<br />
XML<br />
Text<br />
....<br />
13
Verarbeitungsmodell<br />
2/7: Der Transformationsprozess<br />
Mehrere Quelldokumente<br />
können im Stylesheet über die document() Funktion<br />
geladen werden<br />
Mehrere Stylesheets<br />
durch oder einbindbar<br />
Mehrere Output-Dokumente<br />
nicht Teil des XSLT-Standards<br />
von einigen Prozessoren jedoch unterstützt<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
14
Verarbeitungsmodell<br />
3/7: Der Transformationsprozess<br />
Im Transformationsprozess wird das Quelldokument<br />
beginnend an der Dokumentwurzel ("root node")<br />
traversiert<br />
Das Stylesheet wird nach einer Template Rule<br />
durchsucht, welche auf diesen Knoten anwendbar ist<br />
Die Template Rule wird abgearbeitet ("instanziert"),<br />
indem der der Template Rule entsprechende Teilbaum<br />
im Stylesheet traversiert wird<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
15
Verarbeitungsmodell<br />
4/7: Der Transformationsprozess<br />
Eine Template Rule ist nicht vollständig abgearbeitet, solange ihr End-Tag<br />
nicht erreicht ist<br />
Mehrere Template Rules können dadurch zur gleichen Zeit offen sein<br />
(1) select <strong>template</strong> rule for B<br />
B<br />
complete <strong>template</strong> rule for B<br />
Für jedes Element i.d. aktuellen Template Rule prüft der Prozessor, ob es<br />
sich um ein XSLT-Element handelt, d.h. über den XSLT-Namensraum<br />
definiert wurde<br />
falls ja, wird der Output entsprechend der Template Rule aufbereitet<br />
falls nein, wird das Element (z.B. ein HTML-Tag) unverändert in das<br />
Ergebnisdokument geschrieben ("Literales Ergebniselement")<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
(2) select <strong>template</strong> rule for C<br />
C<br />
D<br />
complete <strong>template</strong> rule for C<br />
(3) select <strong>template</strong> rule for D<br />
complete <strong>template</strong> rule for D<br />
16
Verarbeitungsmodell<br />
5/7: Beispiel<br />
<br />
<br />
<br />
Nigel Rees<br />
Sayings of the Century<br />
8.95<br />
<br />
<br />
Evelyn Waugh<br />
Sword of Honour<br />
12.99<br />
<br />
<br />
Herman Melville<br />
Moby Dick<br />
8.99<br />
<br />
<br />
J. R. R. Tolkien<br />
The Lord of the Rings<br />
22.99<br />
<br />
<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
17
Verarbeitungsmodell<br />
6/7: Beispiel - XPath Datenmodell<br />
Darstellung als UML Objektdiagramm<br />
<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
books:Element<br />
book:Element category:Attribute book:Element<br />
author:Element title:Element<br />
:Text<br />
Nigel Rees<br />
reference<br />
:Text<br />
Sayings of the Century<br />
:root<br />
....<br />
price:Element<br />
:Text<br />
8.95<br />
category:Attribute<br />
fiction<br />
Legende:<br />
Knotenname: Knotentyp<br />
Knotenwert<br />
: besteht aus<br />
18<br />
..
Verarbeitungsmodell<br />
7/7: Beispiel - Stylesheet<br />
<br />
<br />
<br />
<br />
A list of books<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
Template Rule<br />
Literale Ergebniselemente<br />
Anwenden weiterer<br />
Template Rules<br />
auf Kindknoten von <br />
Fortlaufende Nummerierung<br />
gemäß Position der <br />
Knoten im Quelldokument<br />
Ausgabe des<br />
Inhalts der<br />
aktuellen<br />
, u. Knoten<br />
19
Inhalt<br />
Einführung<br />
Verarbeitungsmodell<br />
Stylesheets<br />
Template Rules<br />
Sprachumfang<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
20
Stylesheets<br />
1/3: Grundsätzlicher Aufbau<br />
Stylesheet-Element<br />
(= Elementwurzel) muss<br />
Versions-Attribut aufweisen (1.0)<br />
Zweck: Vorwärtskompatibilität<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
XSLT-Namensraum muss<br />
immer angegeben werden<br />
Standardpräfix ist „<strong>xsl</strong>:“<br />
<br />
<br />
<br />
.....<br />
<br />
Definiert, in welcher Form der Baum<br />
des Ergebnisdokuments serialisiert<br />
werden soll - optional<br />
(XML = default, HTML, Text)<br />
21
Stylesheets<br />
2/3: Einbindung in XML-Dokumente<br />
Externes referenziertes Stylesheet<br />
Referenz im XML-Dokument auf ein externes Stylesheet<br />
<br />
Einbindung über XML Processing Instruction<br />
type: Sprache, in der das Stylesheet geschrieben ist<br />
href: URI des zu verarbeitenden Stylesheets<br />
Externes nicht-referenziertes Stylesheet<br />
es gibt keine Beziehung zwischen XML Dokument und<br />
Stylesheet<br />
beide werden unabhängig voneinander an den XSLT-<br />
Prozessor übergeben<br />
Eingebettetes Stylesheet<br />
direkt im XML-Dokument<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
22
Stylesheets<br />
3/3: Modularisierung<br />
Ein Stylesheet kann mittels oder <br />
andere Stylesheets referenzieren<br />
deren Inhalt wird an der Stelle der Referenzierung expandiert<br />
müssen als Subelemente von spezifiziert<br />
werden<br />
direkte oder indirekte Rekursion ist nicht erlaubt<br />
Einsatz: unverändert inkludieren vs. Importiertes überschreiben<br />
Inkludieren <br />
importierte Stylesheets haben gleiche Priorität wie importierendes<br />
bei Konflikt aufgrund gleicher Template Rules - Fehler<br />
Importieren <br />
bei Konflikt: importierendes Stylesheet hat<br />
Vorrang gegenüber importiertem<br />
falls mehrere importiert werden, hat das<br />
als letztes Importierte Vorrang, usw.<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
A<br />
import<br />
import<br />
B<br />
import<br />
D<br />
import E<br />
C<br />
import<br />
A → C → F → B → E → D<br />
23<br />
F
Inhalt<br />
Einführung<br />
Verarbeitungsmodell<br />
Stylesheets<br />
Template Rules<br />
Sprachumfang<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
24
Definition von Template Rules<br />
1/2: <strong>xsl</strong>:<strong>template</strong><br />
<br />
<br />
<br />
<br />
attribute und descendent-or-self<br />
Oder-Verknüpfung durch | realisierbar<br />
name (optional): benanntes Template<br />
Aufruf über <br />
(Alternative zu pattern matching)<br />
das match-Attribut kann, muss aber in diesem Fall nicht<br />
angegeben werden<br />
Template Rule ist damit unabhängig von bestimmten<br />
Knoten<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
25
Definition von Template Rules<br />
2/2: <strong>xsl</strong>:<strong>template</strong> (cont´d)<br />
priority (optional)<br />
falls mehrere Template Rules zu einem Knoten matchen,<br />
wird nur jene mit der höchsten priority verwendet<br />
(beliebige Number-Werte)<br />
Defaultpriorität wird automatisch berechnet gemäß des<br />
Spezialisierungsgrades von match<br />
Defaultprioritätswerte: -0,5 (generell - z.B. "*") bis +0,5<br />
(speziell - z.B. person[name="Harold"])<br />
beliebiges Ändern der Defaultpriorität möglich<br />
Fehler bei gleicher Priorität<br />
mode (optional)<br />
ermöglicht die Definition mehrerer Template Rules für<br />
einen Knoten, wobei jedoch nur eine - je nach mode -<br />
abgearbeitet wird<br />
Beispiel: mode="color" bzw. mode="b/w"<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
26
Anwenden von Template Rules<br />
1/5: <strong>xsl</strong>:apply-<strong>template</strong>s<br />
Kindknoten des aktuellen<br />
Knotens werden nicht<br />
automatisch verarbeitet!<br />
Dies muß explizit über<br />
<strong>xsl</strong>:apply-<strong>template</strong>s spezifiziert werden.<br />
Einfachste Form ist ein leeres Element<br />
agiert nur als Platzhalter<br />
bestimmt den Punkt, an dem der Prozessor alle<br />
Kindknoten des aktuellen Knotens mit weiteren passenden<br />
Template Rules verarbeiten und gegebenenfalls den<br />
entsprechenden Output ausgeben soll<br />
<br />
<br />
<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
<br />
<br />
<br />
27
Anwenden von Template Rules<br />
2/5: <strong>xsl</strong>:apply-<strong>template</strong>s (cont´d)<br />
select (optional)<br />
Template Rule wird nur auf ausgewählte Kindknoten<br />
angewendet<br />
spezifiziert durch XPath-Ausdruck, der Knotenmenge liefert<br />
die Reihenfolge der Verarbeitung der Kindknoten kann durch<br />
<strong>xsl</strong>:sort spezifiziert werden<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
mode (optional)<br />
wende nur Template Rules mit z.B mode="b/w" an<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
28
Anwenden von Template Rules<br />
3/5: <strong>xsl</strong>:call-<strong>template</strong><br />
Verarbeitet eine Template Rule<br />
mit dem spezifizierten Namen name<br />
steuert daher explizit den<br />
Traversierungsprozeß, ähnlich wie <strong>xsl</strong>:for-each<br />
(das über die Knotenliste iteriert)<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
Anwenden von Template Rules<br />
4/5: Exkurs: Auswertungskontext im<br />
XSLT-Prozessor<br />
Eine Template Rule wird immer in einem Kontext<br />
instanziert<br />
Der Kontext besteht aus zwei Komponenten:<br />
Aktueller Knoten (current node)<br />
Knoten des Quelldokuments, den der XSLT-Prozessor<br />
gerade verarbeitet und<br />
Aktuelle Knotenliste (current node list)<br />
Knoten, die sich aus einer Selektion durch<br />
<strong>xsl</strong>:apply-<strong>template</strong>s oder <strong>xsl</strong>:for-each ergeben haben<br />
Aus diesem Kontext ergibt sich der<br />
Auswertungskontext für XPath-Ausdrücke<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
30
Anwenden von Templates<br />
5/5: Exkurs: Verarbeitungsformen<br />
Push-basierter (Pattern-Matching) Ansatz<br />
Kindknoten werden nicht in der Template Rule des<br />
Vaterknoten behandelt<br />
die Verarbeitung dieser Kindknoten wird durch<br />
an passende Template Rules<br />
delegiert<br />
Pull-basierter Ansatz<br />
Kindknoten werden explizit selektiert und im Vaterknoten<br />
behandelt<br />
<br />
<br />
<br />
Beide Ansätze können gemeinsam angewendet werden<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
31
Parameterisierung<br />
1/2: Definition von Parametern<br />
Globale und lokale Parameter (name)<br />
mit Defaultwerten (select –optional)<br />
Global: Definition direkt unterhalb<br />
der Elementwurzel<br />
(als „Top-Level Elemente“)<br />
Lokal: Definition innerhalb einer<br />
Template Rule<br />
<br />
<br />
<br />
<br />
Übergabe eines Wertes für einen lokalen Parameter<br />
über <strong>xsl</strong>:with-param erfolgt bei<br />
<strong>xsl</strong>:apply-<strong>template</strong>s oder<br />
<strong>xsl</strong>:call-<strong>template</strong><br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
Parameterisierung<br />
2/2: Übergabe von Parameterwerten<br />
<strong>xsl</strong>:with-param Elemente müssen<br />
direkte Subelemente sein von<br />
oder<br />
<br />
name (obligatorisch)<br />
erhält den Parameterwert über diesen Namen<br />
select (optional)<br />
ein XPath-Ausdruck liefert den Parameterwert -<br />
ist in diesem Fall ein leeres Element<br />
ist kein leeres Element, darf es kein select<br />
Attribut haben, stattdessen steht der Parameterwert im<br />
Elementinhalt<br />
Beispiel:<br />
<br />
<br />
<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
Verarbeiten von Text<br />
<strong>xsl</strong>:value-of<br />
Elementinhalt<br />
Quelldokument: All the text here is<br />
the value<br />
Template Rule: <br />
Output: All the text here is the value<br />
aktuelles Element<br />
Attributwerte<br />
Quelldokument: This is a secret.<br />
<br />
Template Rule:<br />
<br />
[TYPE: ]<br />
<br />
<br />
<br />
<br />
Output: [TYPE: secret] This is a secret.<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
Built-In Template Rules<br />
1/2<br />
Für jeden der 7 Knotentypen des XPath Datenmodells<br />
existiert eine "Built-In Template Rule"<br />
Diese kommt zum Einsatz, wenn für einen Knoten keine<br />
passende Template Rule gefunden wird<br />
Im Falle eines leeren Stylesheets führen die Built-In<br />
Template Rules dazu, dass der Inhalt des Dokuments ohne<br />
Markup ausgegeben wird<br />
Element- und Wurzelknoten (root node)<br />
für jedes Subelement wird implizit <br />
aufgerufen, wodurch passende Template Rules ausgeführt<br />
werden<br />
die Built-In Template Rule hat folgendes Aussehen:<br />
<br />
<br />
<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
35
Built-In Template Rules<br />
2/2<br />
Text- und Attributknoten<br />
werden durch <strong>xsl</strong>:value-of in das Ergebnisdokument<br />
übernommen<br />
die Built-In Template Rule hat folgendes Aussehen:<br />
<br />
<br />
<br />
Kommentar-, Namensraum- und Processing<br />
Instruction-Knoten<br />
werden nicht übernommen<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
36
Beispiel<br />
1/5 XML-File<br />
<br />
<br />
<br />
Jeff<br />
555-1234<br />
555-4321<br />
lightgrey<br />
<br />
<br />
David<br />
383-1234<br />
383-4321<br />
lightblue<br />
<br />
<br />
Roger<br />
888-1234<br />
888-4321<br />
lightyellow<br />
<br />
<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
Aufgabe: Transformation in ein<br />
neues XML-Dokument und<br />
Einfügen aller Member mit<br />
Level="gold"<br />
<br />
***David***<br />
<br />
37
Beispiel<br />
2/5: XPath Datenmodell<br />
Darstellung als UML Objektdiagramm<br />
Member:Element<br />
Name:Element Phone:Element<br />
:Text<br />
Jeff<br />
id:Attribute<br />
:Text<br />
555-1234<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
1<br />
:root<br />
FitnessCenter:Element<br />
level:Attribute<br />
platinum<br />
Phone:Element<br />
:Text<br />
type:Attribute<br />
home<br />
555-4321<br />
....<br />
Member:Element ....<br />
....<br />
FavoriteColor:Element<br />
type:Attribute<br />
work<br />
:Text<br />
Legende:<br />
lightgrey<br />
Knotenname: Knotentyp<br />
Knotenwert<br />
: besteht aus<br />
....<br />
38
Beispiel<br />
3/5: Stylesheet<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Ausgabe von bzw. <br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
Ausgabe aller<br />
Mitglieder<br />
Ausgabe d.<br />
GoldMembers<br />
39
Beispiel<br />
4/5: Stylesheet<br />
Ausgabe der Mitglieder<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Ausgabe der Namen aller Mitglieder<br />
<br />
<br />
<br />
<br />
<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
Alternatives Kopieren:<br />
<br />
<br />
<br />
Kopieren der Attribute<br />
von Member<br />
40
Beispiel<br />
5/5: Stylesheet<br />
<br />
<br />
***<br />
<br />
***<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
Ausgabe der Namen<br />
der Gold-Mitglieder<br />
Ausgabe der<br />
Telefonnummern<br />
Ausgabe der<br />
Lieblingsfarben<br />
41
Inhalt<br />
Einführung<br />
Verarbeitungsmodell<br />
Stylesheets<br />
Template Rules<br />
Sprachumfang<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
42
Sprachumfang<br />
1/3: Überblick<br />
13 vordefinierte Top-Level-Elemente<br />
müssen als Subelemente von definiert<br />
werden<br />
können in irgendeiner Reihenfolge im Stylesheet auftreten,<br />
mit Ausnahme von und <br />
Elementen,<br />
die vor den anderen Elementen spezfiziert werden müssen<br />
Beispiele: <strong>xsl</strong>:<strong>template</strong>, <strong>xsl</strong>:output, <strong>xsl</strong>:include,<br />
<strong>xsl</strong>:import, <strong>xsl</strong>:param<br />
20 vordefinierte Instruktionselemente<br />
(zum Teil auch als Top-Level Elemente verwendbar)<br />
können im Inhalt von Elementen vorkommen, die<br />
Template Rules repräsentieren (z.B. innerhalb von<br />
<strong>xsl</strong>:<strong>template</strong> oder <strong>xsl</strong>:for-each)<br />
Beispiele für Instruktionselemente: <strong>xsl</strong>:apply:<strong>template</strong>,<br />
<strong>xsl</strong>:call-<strong>template</strong>, <strong>xsl</strong>:for-each, <strong>xsl</strong>:value-of<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
43
Sprachumfang<br />
2/3: Zusammenfassung der wichtigsten XSLT-<br />
Elemente<br />
Definition der Stylesheet-Struktur<br />
<br />
<br />
<br />
Definition des Ouput-Formats<br />
<br />
Definition und Aufrufkontrolle<br />
von Template Rules<br />
<br />
<br />
<br />
Kontrollstrukturen<br />
<br />
<br />
<br />
<br />
<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
Generierung von Output<br />
<br />
<br />
<br />
<br />
<br />
<br />
Kopieren von Source- nach<br />
Zieldokument<br />
<br />
<br />
Definition von Variablen und Parametern<br />
<br />
<br />
<br />
Sortierung und Numerierung<br />
<br />
<br />
44
Sprachumfang<br />
3/3: Anforderungen an XSLT 2.0<br />
Kompatibilität mit der XML-Standard-Familie<br />
Vereinfachung der Benutzung, z.B.<br />
Selektion eines Defaultnamensraums ohne explizitem Präfix<br />
Formatierungs-Instruktionen für Date Datentyp<br />
Vereinfachung des Zugriffs auf Schlüssel<br />
Effizienzsteigerung bei der Transformation großer Dokumente<br />
Vereinfachung von Gruppierungen<br />
© 2006 <strong>Business</strong> <strong>Informatics</strong> <strong>Group</strong>, TU Wien<br />
[http://www.w3.org/TR/2005/CR-<strong>xsl</strong>t20-20051103/]<br />
45