• Keine Ergebnisse gefunden

Heutige Vorlesung Heutige Vorlesung

N/A
N/A
Protected

Academic year: 2022

Aktie "Heutige Vorlesung Heutige Vorlesung"

Copied!
67
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

XSLT:

XSLT:

Transformation von Transformation von

XML XML - - Dokumenten Dokumenten

(2)

Heutige Vorlesung Heutige Vorlesung

letzte Woche letzte Woche

;; Welche Welche XML-XML-ParserParser gibt es?gibt es?

;; Was sind ihre VorWas sind ihre Vor-- und Nachteile?und Nachteile?

;; Schema-Schema-ÜÜbersetzer als Alternativebersetzer als Alternative heutige Vorlesung

heutige Vorlesung

ƒ Warum XML-Dokumente transformieren?

ƒ XML-Dokumente mit XSLTXSLT transformieren

ƒƒ XSLXSL--FOFO zur Erzeugung von druckfähigem Layout

(3)

Warum XML transformieren Warum XML transformieren? ?

Trennung Inhalt und Pr

Trennung Inhalt und Prääsentationsentation

ƒ XML trennt Inhalt von Präsentation (Layout)

ƒ Für eine entsprechende Darstellung müssen XML-Inhalte transformiert werden:

ƒ XML-Inhalt Î Layout Inhaltliche Transformationen Inhaltliche Transformationen

ƒ Daten mit XML repräsentiert

ƒ unterschiedliche Sichten (Views) auf XML-Inhalte erfordern Transformationen:

ƒ XML-Inhalt Î XML-Inhalt

(4)

XML- XML - Inhalt Inhalt Î Î Layout Layout

ASCII EXCEL

XHTML

Transformation (XSLT)

WML

Inhalt (XML)

(5)

XML- XML - Inhalt Inhalt Î Î XML- XML - Inhalt Inhalt

Zulieferer Großhandel

interner Kundenauftrag

ƒ Name des Verkäufers

ƒ Datum

ƒ Produktbezeichnung aus

Großhandelskatalog

ƒ Anzahl

ƒ Kunde

externer Zulieferauftrag

ƒ Datum

ƒ Produktbezeichnung aus

Zuliefererkatalog

ƒ Anzahl

ƒ Auftraggeber

übernehmen anpassen

(6)

XML- XML - Inhalt Inhalt Î Î XML- XML - Inhalt Inhalt

<?xml version="1.0"?>

<order>

<salesperson>John Doe</salesperson>

<item>Production-Class Widget</item>

<quantity>16</quantity>

<date>

<month>1</month>

<day>13</day>

<year>2000</year>

</date>

<customer>Sally Finkelstein</customer>

</order>

<?xml version="1.0" encoding="UTF-8"?>

<order>

<customer>Company A</customer>

<date>2000/1/13</date>

<date>2000/1/13</date>

<item<item>>

<part

<part--number>E16number>E16--25A</25A</partpart--numbernumber>>

<description>Production<description>Production-Class-Class Widget</Widget</descriptiondescription>>

Zulieferauftrag Kundenauftrag

(7)

XSLT XSLT

(8)

Was ist XSLT?

Was ist XSLT?

ƒ Programmiersprache zur Transformation von XML- Dokumenten

ƒ erlaubt XML-Dokumente in beliebige Textformate zu Transformieren:

XML Î XML/HTML/XHTML/WML/RTF/ASCII …

ƒ XSLT-Programme (stylesheets) haben XML-Syntax Î plattformunabhängig

ƒ W3C-Standard seit 1999

(9)

XSLT: Anfragesprache f

XSLT: Anfragesprache fü ü r XML? r XML?

SQL SQL

ƒ Anfrage = Sicht (View) auf Menge von Relationen

ƒƒ abgeschlossen: SQL-Anfrage liefert immer eine Relationabgeschlossen

XSLTXSLT

ƒ Transformation = Sicht (View) auf Menge von XML- Dokumenten

Ö Anfragesprache für XML

ƒƒ nichtnicht abgeschlossen: kann beliebige Textformate liefern, abgeschlossen nicht nur wohlgeformtes XML

(10)

Programmierparadigma Programmierparadigma

XSLTXSLT--ProgrammProgramm ((stylesheetstylesheet) )

= Menge von Transformationsregeln Transformationsregel (

Transformationsregel (templatetemplate))

ƒ Erzeuge aus Unterstruktur X im Ursprungsdokument Y im Ergebnisdokument!

ƒ Beispiel:

<xsl:template match="order/item">

<p><xsl:value-of select="."/></p>

</xsl:template> Ð

<order>

<item>Item</item>

</order>…

=

(11)

Ursprungs

Ursprungs- - und Ergebnisdokument und Ergebnisdokument

<?xml version="1.0"?>

<order>

<salesperson>John Doe</salesperson>

<item>Production-Class Widget</item>

<quantity>16</quantity>

<date>…</date>

<customer>Sally Finkelstein</customer>

</order>

<p>Production-Class Widget</p>

Ursprungsdokument Ursprungsdokument ÆÆ Ursprungsbaum

Ursprungsbaum (source document Æ source tree)

Ergebnisbaum Ergebnisbaum ÆÆ Ergebnisdokument

Ergebnisdokument (result tree Æ result document)

<xsl:template match="order/item">

<p><xsl:value-of select="."/></p>

</xsl:template>

Template

Transformation

(12)

Weitere Programmierparadigmen Weitere Programmierparadigmen

XSLT-Transformationsregeln

ƒƒ immer auf immer auf Ursprungsdokument(enUrsprungsdokument(en) angewandt, niemals ) angewandt auf Zwischenergebnissen

ƒƒ keinekeine Seiteneffekte:Seiteneffekte

ƒ Template angewandt auf X liefert immer das gleiche Ergebnis

= Templates haben keine Zustände

Ökeine Variablen, die überschrieben werden können

(13)

Grundstruktur von

Grundstruktur von Stylesheets Stylesheets

<?xml version="1.0"?>

<<xsl:stylesheetxsl:stylesheet

xmlns:xsl="http

xmlns:xsl="http://www.w3.org/1999/XSL/://www.w3.org/1999/XSL/TransformTransform""

version="1.0">

version="1.0">

<xsl:template match="…">

</xsl:template>

</

</xsl:stylesheetxsl:stylesheet>>

ƒ XML-Dokument

ƒ Dokument-Wurzel:

ƒƒ stylesheetstylesheet oder transformtransform aus entsprechendem W3C- Namensraum

ƒ stylesheet und transform gleichbedeutend

ƒ obligatorisches Attribut: versionversion

(14)

XPath XPath

ƒ Standard zum Zugreifen beliebiger Teile eines XML- Dokumentes

ƒ wird von XSLT benutzt

ƒ Adressierungspfaden eines Dateisystems ähnlich:

z.B. /order/item

ƒ aber wesentlich mächtiger

ƒ XPath 1.0 – W3C-Standard seit Nov. 1999

ƒ http://www.w3.org/TR/xpath

ƒ XPath 2.0 – W3C-Standard seit Jan. 2007

(15)

Zugrundelegendes Dokumentenmodell Zugrundelegendes Dokumentenmodell

gleiches Modell wie in DOM

ƒ XML-Dokument als Baum mit Elementen, Attributen und PCDATA als Knoten:

-- Element-Element-KnotenKnoten -- AttributAttribut--KnotenKnoten -- TextText--KnotenKnoten

ƒƒ virtuelle Dokumentvirtuelle Dokument--Wurzel:Wurzel

durch " /"/ repräsentiert (links von "/" steht nichts) Ö Wurzel-Element immer Kind von " /":

z.B. /root

(16)

Zugriff auf Elemente und Attribute Zugriff auf Elemente und Attribute

ƒ Elemente werden einfach über ihren Namen identifiziert:

z.B. order oder order/item

ƒ Attribute werden mit "@name"@ identifiziert:

z.B. @id oder order/@id

(17)

Absolute und relative Pfade Absolute und relative Pfade

absolute Pfade absolute Pfade

ƒ beginnen mit "/"

ƒ z.B. /order/item

Î lesen: Folge dem Pfad von der Dokument-Wurzel zu einem Kind-Element order und von dort aus zu einem Kind-Elementen item!

relative

relative PfadePfade

ƒ beginnen mit einem Element oder Attribut

ƒ z.B. order/item

Í lesen: item-Elemente, die Kind eines Elementes order sind

ƒ Element order an beliebiger Stelle des XML-Dokumentes

(18)

Pfad- Pfad - Ausdr Ausdr ü ü cke cke

. aktueller Knoten .. Eltern-Knoten

* beliebiges Kind-Element

@* beliebiges Attribut

// überspringt ≥ 0 Hierarchie-Ebenen nach unten [] spezifiziert ein Element

| Auswahl (Vereinigung)

ƒ Beispiel: *|@*

„Kind-Element oder Attribut des aktuellen Knotens“

(19)

Kontext

Kontext- -Knoten Knoten

ƒ XPath-Pfade werden in XSLT immer bzgl. eines bestimmten KontextKontext--KnotensKnotens ausgewertet:

Element-, Attribut- oder Text-Knoten

ƒ Beispiel:

<xsl:template match="p">

<DIV>

<xsl:value-of select="."/>

</DIV>

</xsl:template>

ƒ Was bedeutet hier aktueller Knoten "." ?

ƒ "." = Kontext-Knoten

ƒ Kontext-Knoten = Knoten, auf den das Template angewandt wird (hier ein p-Element)

(20)

Filter: Randbedingungen f

Filter: Randbedingungen fü ü r Pfade r Pfade

ƒ order/item[@item[@item--idid = 'E16= 'E16-25A']-25A']

item-Elemente, die Kind von order sind und Attribut item-id mit Wert 'E16-25A' haben

ƒ können an beliebiger Stelle in einem Pfad vorkommen:

order[@order[@order--idid = '4711']/item= '4711']

(21)

XPath

XPath 1.0 Funktionen 1.0 Funktionen

ƒƒ Knoten-Knoten-Set FunktionenSet Funktionen

ƒ Beispiel:

order/item[positionposition()() = 1]

order/item[positionposition()=lastlast()]

ƒƒ Boolesche FunktionenBoolesche Funktionen

ƒ boolean() – nimmt ein Objekt und liefert booleschen Wert zurück

ƒ not() – nimmt boolschen Ausdruck und liefert true wenn Argument ist false

ƒ Beispiel: order/item[notnot(position()=last())]

(22)

XPath

XPath 1.0 Funktionen 1.0 Funktionen

ƒƒ Numerische FunktionenNumerische Funktionen

ƒ number() – versucht eine Zeichenkette als Zahl zu interpretieren und gibt die ermittelte Zahl zurück

ƒ sum() – Ermittelt die Gesamtsumme der Zahlenwerte des Ausgangsknotens

ƒ Beispiel: number(3xy)number(3xy) Æ 3

ƒƒ StringString--FunktionenFunktionen

ƒ string() - interpretiert ein übergebenes Argument als Zeichenkette und gibt die ermittelte Zeichenkette zurück

(23)

XPath

XPath 1.0 Achsen 1.0 Achsen

ƒ self:: 6

ƒ child:: 10, 11

ƒ parent:: 2

ƒ descendant:: 10, 11, 13

ƒ descendant-or-self:: 6, 10, 11, 13

ƒ ancestor:: 2, 1

ƒ ancestor-or-self:: 6, 2, 1

ƒ preceding-sibling:: 5

ƒ preceding:: 5, 2, 1

ƒ following-sibling:: 7

ƒ following:: 10, 11, 13, 7, 3, 4, 8, 9, 12

ƒ attribute:: Ø

Quelle: http://swt.cs.tu-berlin.de/informatik2000/skripte/xml-datenbank.pdf

(24)

Beispiele Beispiele

Wähle das Wurzelelement AAA aus:

<AAA>

<AAA>

<BBB/>

<CCC/>

<BBB/>

<BBB/>

<DDD>

<BBB/>

</DDD>

<CCC/>

Wähle alle CCC Elemente

aus, die Kinder des Elements AAA sind:

<AAA>

<BBB/>

<CCC/>

<BBB/>

<BBB/>

<DDD>

<BBB/>

</DDD>

(25)

Beispiele Beispiele

<AAA>

<BBB/>

<CCC/>

<BBB/>

<DDD>

<BBB/>

</DDD>

<CCC>

<DDD>

<BBB/>

<BBB/>

</DDD>

</CCC>

</AAA>

<AAA>

<BBB/>

<CCC/>

<BBB/>

<DDD>

<BBB/>

</DDD>

<CCC>

<DDD>

<BBB/>

<BBB/>

</DDD>

</CCC>

</AAA>

//BBB

//BBB //DDD/BBB //DDD/BBB

(26)

Beispiele Beispiele

<AAA>

<XXX>

<DDD>

<BBB/>

<FFF/>

</DDD>

</XXX>

<CCC>

<BBB>

<BBB>

<BBB/>

</BBB>

<AAA>

<XXX>

<DDD>

<BBB/>

<FFF/>

</DDD>

</XXX>

<CCC>

<BBB>

<BBB>

<BBB/>

</BBB>

/*/*/*/BBB

/*/*/*/BBB //* //*

(27)

Beispiele Beispiele

<AAA>

<BBB id = "b1"/>

<BBB id = "b2"/>

<BBB name = "bbb"/>

<BBB/>

</AAA>

//@ //@ id id

<AAA>

<BBB/>

<BBB/>

<BBB/>

<BBB/>

</AAA>

/AAA/

/AAA/ BBB[last BBB[last ()] ()]

(28)

Beispiele Beispiele

<AAA>

<BBB>

<CCC/>

<DDD/>

</BBB>

<XXX>

<EEE/>

<CCC/>

<FFF/>

<FFF>

<GGG/>

</FFF>

//CCC/

//CCC/followingfollowing--siblingsibling::*::*

<AAA>

<BBB/>

<CCC/>

<DDD>

<CCC/>

</DDD>

<EEE/>

</AAA>

//CCC | //BBB

//CCC | //BBB

(29)

XSLT:

XSLT: Templates Templates

(30)

Inhalte erzeugen Inhalte erzeugen

ƒ Template: „Suche im Ursprungsdokument Unterstruktur X und erzeuge hieraus im Ergebnisdokument Y!“erzeuge hieraus im Ergebnisdokument Y

ƒ zwei Möglichkeiten, Y zu erzeugen:

1. neue Inhalte erzeugen

2. Inhalte von X nach Y übertragen.

ƒ beide Möglichkeiten beliebig miteinander kombinierbar

(31)

1. Neue Inhalte erzeugen 1. Neue Inhalte erzeugen

ƒ Templates können alle XML-Inhalte erzeugen: PCDATA, Elemente und Attribute

ƒ einfach normale XML-Syntax verwenden:

<xsl:template match="…">

<p

<p style="color:red">neuerstyle="color:red">neuer Text</p>Text</p>

</xsl:template>

ƒ Beachte: Stylesheets müssen wohlgeformte XML- Dokumente sein, daher z.B. nicht erlaubt:

<xsl:template match="…">

<<br>neuerbr>neuer TextText

</xsl:template>

(32)

1. Neue Inhalte erzeugen 1. Neue Inhalte erzeugen

ƒ statt üblicher XML-Syntax

<xsl:template match="…">

<p

<p style="color:red">neuerstyle="color:red">neuer Text</p>Text</p>

</xsl:template>

ƒ auch möglich:

<xsl:template match="…">

<xsl:elementxsl:element name="p">

<xsl:attributexsl:attribute

name="style">color:red</xsl:attribute>xsl:attribute

<xsl:text>neuer Text</xsl:textxsl:text xsl:text>

(33)

2. Inhalte

2. Inhalte ü ü bertragen bertragen

<<xsl:copy-xsl:copy-ofof select="."> Elementselect="."> Element

ƒ Kopiert aktuellen Teilbaum

ƒƒ aktueller Teilbaum: Baum, der vom aktuellen Knoten aktueller Teilbaum aufgespannt wird, einschließlich aller Attribute und PCDATA

<<xsl:copyxsl:copy> Element> Element

ƒ Kopiert aktuellen Knoten ohne Kind-Elemente, Attribute und PCDATA

Ö Kopiert nur Wurzel-Element des aktuellen Teilbaums

<<xsl:value-xsl:value-ofof selectselect="."> Element="."> Element

ƒ Extrahiert PCDATA, das im aktuellen Teilbaum vorkommt

(34)

Beispiel Beispiel

<xsl:template match="p">

<DIV>

<<xsl:copy-xsl:copy-ofof select="."/>select="."/>

</DIV>

<DIV>

<<xsl:copy/>xsl:copy/>

</DIV>

<DIV>

<<xsl:valuexsl:value--ofof selectselect="."/>="."/>

</DIV>

</xsl:template>

<source>

<p id="a12">Compare

<p id="a12">Compare

<DIV>

<p id="a12">Compare

<p id="a12">Compare

<<B>theseB>theseconstructs</B>.constructs</B>.

</p>

</p>

</DIV>

<DIV>

<p/>

<p/>

</DIV>

<DIV>

Compare

Compare thesetheseconstructs.constructs.

</DIV>

Ergebnisdokument Ergebnisdokument

(35)

Funktionsweise des

Funktionsweise des XSLT XSLT- -Prozessors Prozessors

1. K := Dokument-Wurzel ("/") des Ursprungsdokumentes 2. Identifiziere alle Templates, die auf K anwendbar sind.

a) Ist genau ein Template anwendbar, dann wende dieses an.

Fertig.

a) Sind mehre Templates anwendbar, dann wende das speziellste an:

z.B. ist "/order" spezieller als "/*".

Fertig.

c) Ist kein Template anwendbar, dann wiederhole für alle Kinder K' von K Schritt 2 mit K := K'.

(36)

Beispiel Beispiel

<source>

<A id="a1a1">

<B id="b1"/>

<B id="b2"/>

</A>

<A id="a2a2">

<B id="b3"/>

<B id="b4"/>

<C id="c1">

<D id="d1"/>

</C>

<B id="b5">

<C id="c2"/>

<xsl:template match="A">

<xsl:value-of select="@id"/>

</xsl:template>

<xsl:template match="B">

<xsl:value-of select="@id"/>

</xsl:template>

<xsl:template match="C">

<xsl:value-of select="@id"/>

</xsl:template>

<xsl:template match="D">

a1a1 a2a2

Stylesheet kein Template

anwendbar Template "A"

wird angewandt

Template "B"

wäre anwendbar, Template "A"

wird angewandt

Template "B"

wäre anwendbar,

(37)

Templates

Templates mit mit Rekursion Rekursion

<source>

<A id="a1"> a1

<B id="b1"/> b1

<B id="b2"/> b2

</A>

<A id="a2"> a2

<B id="b3"/> b3

<B id="b4"/> b4

<C id="c1c1">

<D id="d1d1"/>

</C>

<B id="b5"> b5

<C id="c2c2"/>

</B>

</A>

</source>

<xsl:template match="A">

<xsl:value-of select="@id"/>

<<xsl:apply-xsl:apply-templatestemplates/>/>

</xsl:template>

<xsl:template match="B">

<xsl:value-of select="@id"/>

<<xsl:apply-xsl:apply-templatestemplates/>/>

</xsl:template>

<xsl:template match="C">

<xsl:value-of select="@id"/>

<<xsl:apply-xsl:apply-templatestemplates/>/>

</xsl:template>

<xsl:template match="D">

<xsl:value-of select="@id"/>

<<xsl:apply-xsl:apply-templatestemplates/>/>

</xsl:template>

a1a1 b1b1 b2b2 a2a2

b3b3 b4b4 c1c1

d1d1 b5b5

c2c2

(38)

Rekursiver

Rekursiver Aufruf Aufruf aller aller Templates Templates

ƒ versucht Templates auf Kinder des aktuellen Knotens anzuwenden

ƒ Kind bedeutet hier: Kind-Element, Text-Knoten oder Attribut-Knoten

ƒ Mit <xsl:apply-templates selectselect = "= "……"/>" auch rekursiver Aufruf an beliebiger Stelle möglich.

ƒ Vorsicht: Terminierung nicht automatisch sichergestellt!

<<xsl:applyxsl:apply--templatestemplates/>/>

<xsl:template match="A">

(39)

Iteration statt

Iteration statt Rekursion Rekursion

<source>

<A id="a1">

<B id="b1"/> b1

<B id="b2"/> b2

</A>

<A id="a2">

<B id="b3"/> b3

<B id="b4"/> b4

<C id="c1c1">

<D id="d1"/>

</C>

<B id="b5"> b5

<C id="c2"/>

</B>

</A>

</source>

<xsl:template match="A">

<xsl:for<xsl:for--eacheach select="*">select="*">

<<xsl:value-xsl:value-ofof select="@id"/>select="@id"/>

</

</xsl:forxsl:for--each>each>

</xsl:template>

b1b1 b2b2 b3b3 b4b4 c1c1 b5b5

ƒƒ xsl:value-xsl:value-ofof wird auf alle select- Pfade der for-each-Schleife

angewandt.

ƒ Beachte: select-Pfad von xsl:for- each relativ zum Kontext-

Knoten des Templates, hier also "A/*".

(40)

Zwei Vordefinierte

Zwei Vordefinierte Templates Templates

1.1. vordefiniertes vordefiniertes TemplateTemplate

ƒ realisiert rekursiven Aufruf des Prozessors, wenn kein Template anwendbar ist

2.2. vordefiniertes vordefiniertes TemplateTemplate

ƒ kopiert PCDATA und Attribut-Werte des aktuellen Knotens in das Ergebnisdokument

Leeres

Leeres StylesheetStylesheet

ƒ traversiert gesamtes Ursprungsdokument und extrahiert dabei PCDATA und Attribut-Werte

ÜÜberschreibenberschreiben

(41)

1. vordefinierte

1. vordefinierte Template Template

<xsl:template match="*|/">

<xsl:apply-templates/>

</xsl:template>

1. wird zuerst auf Dokument-Wurzel (" /") angewandt 2. versucht alle Templates anzuwenden

3. wird auf alle Kind-Elemente ("*") angewandt

ƒ realisiert rekursiven Aufruf des XSLT-Prozessors

ƒ wird von jedem speziellerem Template überschrieben:

z.B. sind "/" und "item" spezieller als "*|/"

ƒ spezielleres Template anwendbar Ö kein automatischer rekursiver Aufruf

(42)

2. vordefinierte

2. vordefinierte Template Template

<xsl:template match="text()|@*">

<xsl:value-of select="."/>

</xsl:template>

ƒ Template wird auf PCDATA text() und Attribute @*

angewandt

ƒƒ text(): XPath-Funktion, selektiert PCDATAtext()

ƒ Template überträgt PCDATA bzw. Attribut-Wert in das Ergebnisdokument

(43)

Leeres

Leeres Stylesheet Stylesheet

ƒ Bei Stylesheet ohne Templates sind nur die beiden vordefinierten Templates aktiv:

<xsl:template

match="text()|@*">

<xsl:value-of select="."/>

</xsl:template>

ƒ Gesamtes Ursprungsdokument wird traversiert, dabei wird PCDATA und Attribut-Werte extrahiert

<xsl:template match="*|/">

<xsl:apply-templates/>

</xsl:template>

(44)

Beispiel Beispiel

<xsl:template

match="text()|@*">

<xsl:value-of select="."/>

</xsl:template>

<xsl:template match="*|/">

<xsl:apply-templates/>

</xsl:template>

<?xml version="1.0"?>

<name>

<first>

John

</first>

<middle>

Fitzgerald Johansen

</middle>

match="/" Ö apply-templates

match="*" Ö apply-templates match="*" Ö apply-templates

match="text()" Ö JohnJohn match="*" Ö apply-templates

match="text()" Ö Fitzgerald JohansenFitzgerald Johansen

(45)

Identit

Identitä ä ts ts -Stylesheet - Stylesheet

ƒ Stylesheet mit lediglich einem Template:

ƒ überschreibt 1. vordefinierte Template <xsl:template match="*|/">, da spezieller

ƒ Zusammen mit 2. vordefinierten Template <xsl:template match="text()|@*"> wird Ursprungsdokument kopiert.

<xsl:template match="*">

<xsl:copy>

<xsl:apply-templates/>

</xsl:copy>

</xsl:template>

ƒ wird auf jedes Element ("*") angewandt

ƒ kopiert Wurzel des aktuellen Teilbaumes

ƒ ruft rekursiv alle Templates auf

(46)

Position des rekursiven Aufrufes?

Position des rekursiven Aufrufes?

<xsl:template match="*">

<xsl:copy>

<<xsl:apply-xsl:apply-templates/>templates/>

</xsl:copy>

</xsl:template>

<root>

<a>aaa</a>

<b>bbb</b>

<root/>

<a/>

aaa

<xsl:template match="*">

<xsl:copy>

</xsl:copy>

<<xsl:apply-xsl:apply-templatestemplates/>/>

</xsl:template>

<root>

<a>aaa</a>

<b>bbb</b>

<c>ccc</c>

</root>

Ergebnis:

(47)

Benannte

Benannte Templates Templates

ƒ Templates können auch einen Namen haben:

<xsl:template match="/order/item" name="order-name="order-templatetemplate">"

</xsl:template>

ƒ Benannte Templates können gezielt mit

<xsl:call<xsl:call--templatetemplate name="ordername="order--templatetemplate"/>"/>

aufgerufen werden.

(48)

Variablen Variablen

<<xsl:variablexsl:variable name="Xname="X">">

<xsl:copy-of select=".">

<<xsl:variablexsl:variable>>

ƒ Beispiel

ƒ deklariert Variable X mit X := aktuellen Teilbaum

ƒ Initiale Zuweisung kann nicht überschrieben werden!

ƒ Wert von X: $X$X

ƒ Beispiel:

:

<<xsl:variablexsl:variable name="name="NN">2</">2</xsl:variablexsl:variable> >

... ...

<xsl:value<xsl:value--ofof select="item[position()=$Nselect="item[position()=$N]"/>]"/>

(49)

Parameter Parameter

<xsl:template name="printRows">

<xsl:paramxsl:param name="NN"/>

<xsl:call-template name="printRows">

<xsl:withxsl:with--paramparam name="NN" select="$N$N + 1"/>

</xsl:call-template>

</xsl:template>

ƒ Templates können Parameter haben:

(50)

Kontrollfluss:

Kontrollfluss: choose choose

<xsl:template match="item">

<part-number>

<xsl:choose>xsl:choose

<xsl:whenxsl:when test=". = 'Production-Class Widget'">test E16-25A

</xsl:when>xsl:when

<xsl:whenxsl:when test=". = 'Economy-Class Widget'">test E16-25B

</xsl:when>xsl:when

<xsl:otherwise>00</xsl:otherwise>xsl:otherwise

</xsl:choose>

Beispiel:

ƒ Switch-Anweisung in

Falls Inhalt von item = 'Production-Class Widget', dann erzeuge E16-25A

(51)

Was bietet XSLT noch?

Was bietet XSLT noch?

Kontrollfluss Kontrollfluss

ƒ <xsl:ifxsl:if test="test">then</xsl:iftest xsl:if>

Sortieren Sortieren

ƒ <xsl:sortxsl:sort select="name/family"/>

Mehrere

Mehrere UrsprungsdokumenteUrsprungsdokumente

ƒ <xsl:apply-templates select="document('bib.xml')"> document XPath

XPath--FunktionenFunktionen

ƒ <xsl:if test="notnot(positionposition()=last())">…</xsl:if>last Und vieles mehr!

Und vieles mehr!

Ö http://www.zvon.org/xxl/XSLTutorial/Output_ger/contents.html

(52)

Verarbeitung von

Verarbeitung von Stylesheets Stylesheets

Stylesheets können auf zwei Arten verarbeitet werden:

1. auf dem Server 2. im Client

ƒ Worin besteht der Unterschied?

ƒ jeweiligen Vor- und Nachteile

(53)

1. Verarbeitung auf dem Server 1. Verarbeitung auf dem Server

ƒ Server wendet passendes Stylesheet auf Ursprungs- dokument an.

ƒ z.B. mit MSXML: msxsl source stylesheet.xsl –o output

ƒ Client bekommt nur Ergebnisdokument

Server Client

Ursprungsdokument

Ergebnisdokument Stylesheet

(54)

2. Verarbeitung im

2. Verarbeitung im Client Client

ƒ Client bekommt Ursprungsdokument & passendes Stylesheet.

ƒ im Ursprungsdokument:

<?

<?xmlxml--stylesheetstylesheet typetype=="text/"text/xslxsl" " hrefhref==""stylesheet.xslstylesheet.xsl"?>"?>

Server Client

Ursprungsdokument Stylesheet

Ursprungsdokument

Ergebnisdokument Stylesheet

(55)

Wo Stylesheets Wo Stylesheets verarbeiten? verarbeiten?

Verarbeitung im Client Verarbeitung im Client

+ Transformationen auf Clients verteilt: spart Server-

Ressourcen

- Ursprungsdokument sichtbar

XSLT: stellt sicher, dass Transformation

im Web-Client ausgeführt werden

kann.

XSLT: nicht unbedingt nötig, da

Transformation auf eigenem Server durchgeführt wird.

Verarbeitung auf dem Server Verarbeitung auf dem Server

+ Ursprungsdokument verdeckt - alle Transformationen auf

zentralen Server

(56)

M ä chtigkeit von XSLT chtigkeit von XSLT

ƒƒ VariablenVariablen machen Stylesheets zu einem mächtigen

Termersetzungssystem mit unbeschränkten Registern.

ƒ www.unidex.com/turing definiert universelle Turingmaschine als XSLT-Stylesheet

- Eingabe: Programm p (XML), Input i (XML) - Ausgabe: p(i)

Ö Browser = vollwertigen Computer!

ƒ Stylesheets tatsächlich berechnungsvollstberechnungsvollstäändigndig und damit vollwertige Programmiersprachevollwertige Programmiersprache (Kepser 2002)

(57)

Principle of Least Power

Verletzt XSLT dieses grundlegende Prinzip?

When I designed HTML for the Web, I chose to avoid giving it more power than it absolutely needed - a

"principle of least power," which I have stuck ever since.

I could have used a language like Donald Knuth's "TeX,"

which though it looks like a markup language is in fact a programming language. It would allow you to express

absolutely anything on the page, but would also have allowed Web pages that could crash, or loop forever

(Tim Berner-Lees, 1999).

(58)

Vorteile von XSLT Vorteile von XSLT

+ plattformunabhäng + relativ weit verbreitet

+ Verarbeitung in Web-Browsern

+ Standard-Transformationen (wie XML Î HTML) einfach zu realisieren.

+ Nicht nur HTML, sondern beliebige andere Sprachen können erzeugt werden.

+ extrem mächtig

(59)

Nachteile von XSLT Nachteile von XSLT

- Entwickler müssen speziell für die Transformation von XML-Dokumenten neue Programmiersprache lernen.

- Anbindung von Datenbanken umständlich

- manche komplexe Transformationen nur umständlich zu realisieren.

- Terminierung kann nicht garantiert werden.

Fazit: XSLT nur für Standard-Transformationen verwenden!

(60)

XSL XSL - - FO FO

(61)

XSL Formatting Objects (XSL XSL Formatting Objects (XSL - - FO) FO)

XSLTXSLT

ƒ erlaubt Transformation von XML Î HTML

ƒ ungeeignet für druckfähige Formatierungen (PDF, RTF) XSLXSL--FOFO

ƒ erlaubt XML-Dokumente mit druckfähigen Layout zu versehen

ƒ Transformation XML Î PDF oder RTF möglich

ƒ basiert auf auf Cascading Style Sheets (CSS2)

ƒ W3C-Standard von 2001

XSLXSL = XSLT + XSL-FO

(62)

CSS vs. XSL

CSS vs. XSL- -FO FO

CSS XSL-FO

Darstellung auf BildschirmBildschirm Darstellung auf seitenorientiertem seitenorientiertem Ausgabemedium Ausgabemedium

Ausgabe durch WebbrowserWebbrowser Ausgabe durch DruckerDrucker und andere

Seitenausgabeger Seitenausgabegeräätete Formatierungsinformation

für vorhandenes MarkupMarkup

Komplette Ersetzung von Markup durch -

Formatierungsmarkup Formatierungsmarkup

(63)

XSL- XSL -FO Anwendungsgebiete FO Anwendungsgebiete

ƒ Massensatz, z.B.: bei der technischen Dokumentation

ƒ gleichzeitige Ausgabe derselben Inhalte in unterschiedlichen Formaten:

ƒ verschiedene Medien

ƒ gleiches Medium aber verschiedene Bedürfnisse der Nutzer

ƒ Individualisien bzw. Personalisieren von Dokumenten

(64)

Was leistet XSL

Was leistet XSL -FO? - FO?

(65)

Wie sieht XSL

Wie sieht XSL- -FO hierf FO hierf ü ü r aus? r aus?

(66)

Wie geht es weiter?

Wie geht es weiter?

heutige Vorlesung heutige Vorlesung

; Warum XML-Dokumente transformieren?

; XSLT und XPath

; XSL-FO Vorlesung n

Vorlesung näächstechste WocheWoche

ƒ XML & Datenbanken Übung nÜbung näächste Wochechste Woche

(67)

Referenzen

ÄHNLICHE DOKUMENTE

• Mit Document Type Definitions (DTDs) können aber spezielle Auszeichnungssprachen mit konkreten Tags definiert werden:. • werden Anwendungen von

• keine vorgegebenen Tags, auch keine für das Layout von Dokumenten. • Vorgänger

• keine vorgegebenen Tags, auch keine für das Layout von Dokumenten. • Vorgänger

- Mentoring durch den Veranstalter im Hörsaal 26.05.10 (Mi.) - Präsentation der Arbeitsplanung gegenüber

Markus Luczak-Rösch Freie Universität Berlin Institut für Informatik2. Netzbasierte

• Nur eine kleine Teilmenge wird visualisiert, eine Eingabe könnte die Ergebnismenge einer Suche sein8. • Eine aufgebohrte Web-Suche, bei der man

§ enthält alle nachfolgenden Geschwister des Kontextknotens; falls der Kontextknoten ein Attribut- oder Namensraumknoten ist, ist diese Achse leer.

ƒ Beachte: Von Browsern wird White Space allerdings nicht angezeigt:.