21
XSLT, Teil 1 (Stichworte) Udo Kelter 17.04.2019 Zusammenfassung dieses Lehrmoduls Die Transformationssprache XSLT (eXtensible Stylesheet Language for Transformation) ist ein Teil des XSL-Standards. In der XSLT- Sprache k¨ onnen Transformatoren definiert werden, die eingegebene XML-Dateien in neue XML-Dateien, aber auch andere Formate trans- formieren. Dieses Lehrmodul stellt die Grundkonzepte der XSLT vor, ferner die grundlegenden Ausgabe- bzw. Steuerkommandos value-of und for-each. Vorausgesetzte Lehrmodule: obligatorisch: - Transportdateien und die XML empfohlen: - Transportdateien und die SGML - XML-Namensr¨ aume Stoffumfang in Vorlesungsdoppelstunden: 1.0 1

XSLT, Teil 1 (Stichworte) - pi.informatik.uni-siegen.depi.informatik.uni-siegen.de/kelter/lehre/18w/lm/lm_xslt_20190417_a5.pdf · XSLT, Teil 1 (Stichworte) 2 Inhaltsverzeichnis 1

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

XSLT, Teil 1 (Stichworte)

Udo Kelter

17.04.2019

Zusammenfassung dieses Lehrmoduls

Die Transformationssprache XSLT (eXtensible Stylesheet Languagefor Transformation) ist ein Teil des XSL-Standards. In der XSLT-Sprache konnen Transformatoren definiert werden, die eingegebeneXML-Dateien in neue XML-Dateien, aber auch andere Formate trans-formieren. Dieses Lehrmodul stellt die Grundkonzepte der XSLT vor,ferner die grundlegenden Ausgabe- bzw. Steuerkommandos value-ofund for-each.

Vorausgesetzte Lehrmodule:

obligatorisch: - Transportdateien und die XML

empfohlen: - Transportdateien und die SGML- XML-Namensraume

Stoffumfang in Vorlesungsdoppelstunden: 1.0

1

XSLT, Teil 1 (Stichworte) 2

Inhaltsverzeichnis

1 Exkurs: Transformation von XML-Dokumenten 3

1.1 Transformation von konzeptuellen Daten in externe Darstel-lungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.2 Abfragen als Dokumenttransformationen . . . . . . . . . . . . 4

1.3 Funktionsmerkmale von XML-Abfragesprachen . . . . . . . . 5

2 Einordnung von XSLT 6

3 XSLT-Prozessoren 7

3.1 Grundlegende Funktionsweise von XSLT-Prozessoren . . . . . 7

3.2 Eingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.3 Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

4 XSLT-Transformationsdokumente 10

4.1 Außerer Aufbau eines Transformationsdokuments . . . . . . . 10

4.2 Syntax von XSLT-Kommandos . . . . . . . . . . . . . . . . . 11

4.3 Transformationsregeln – Crashkurs . . . . . . . . . . . . . . . 12

5 Arbeiten mit einer einzigen Transformationsregel (aus-nahmsweise) 13

5.1 Aufruf einer Schablone . . . . . . . . . . . . . . . . . . . . . . 13

5.2 “Ausfuhren” einer Schablone . . . . . . . . . . . . . . . . . . 14

5.3 Whitespace Stripping in XSLT . . . . . . . . . . . . . . . . . 15

5.4 Ausgabe- bzw. Steueranweisungen . . . . . . . . . . . . . . . 16

5.5 Das Kommando xsl:value-of . . . . . . . . . . . . . . . . . 16

5.6 Das Kommando xsl:text . . . . . . . . . . . . . . . . . . . 18

5.7 Das Kommando xsl:for-each . . . . . . . . . . . . . . . . . 19

Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

c©2019 Udo Kelter Stand: 17.04.2019Dieser Text darf fur nichtkommerzielle Nutzungen als Ganzes und unverandert in elektronischer odergedruckter Form beliebig weitergegeben werden und in WWW-Seiten, CDs und Datenbanken aufgenom-men werden. Jede andere Nutzung, insb. die Veranderung und Uberfuhrung in andere Formate, bedarfder expliziten Genehmigung. Die jeweils aktuellste Version ist uber http://kltr.de erreichbar.

XSLT, Teil 1 (Stichworte) 3

1 Exkurs: Transformation von XML-Doku-menten

Unterstelltes Vorwissen / Vorerfahrung: relationale DB, Abfragespra-chen fur RDB, JDBC, ...

Grundsatzlich werden die Relationen einer DB einzeln verarbeitet,insb. bei Anderungen

Abfragen und Abfragesprachen fur XML-Datenbestande (XPath,XQuery) funktionieren prinzipiell anders:

- Abfragen werden als Dokumenttransformation verstanden

Input einer Abfrage: XML-Datei

Output: normalerweise wieder eine XML-Datei!

- Abfragesprache wird durch technische Ausfuhrungsumgebung ge-pragt – bei XML: WWW-Technologien

1.1 Transformation von konzeptuellen Daten in externeDarstellungen

DB-Inhalte / XML-Daten sind nur Inhalte, keine Darstellung→ mussen (ggf. nach Selektion, Sortierung, ...) in darstellbare Formtransformiert werden(zzgl. algorithmische Verarbeitung – hier nicht von Interesse):

1. Hinzufugen von Uberschriften, Feldnamen, usw.

2. Festlegung von Fonts, Schriftgroßen, Farben, Hintergrunden, son-stigen Stilelementen [ggf. dynamisch vom Benutzer gesteuert!!]

Vorgehen bei relationalen Abfragesprachen:Abfrageergebnisse (Tabellen) sind in Rohform generell ungeeignet furAnzeige→ ausgepragte Arbeitsteilung zwischen Query-Prozessor undApplikation:

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 4

- DBMS zustandig fur:- Selektion bestimmter Daten

- Sortierungen

- Gruppierungen, Aggregation

- Verbinden separater Datenbestande

- Applikation zustandig fur:- Layoutgenerierung, Algorithmen

- ggf. Aufsammeln von Daten aus mehreren Relationen

Randbedinungen bei der externen Darstellung fur WWW-Schnittstellen:

- Seitenlayout mittels HTML-Kommandos (nicht uber Graphik-API), also Transformation von XML nach HTML notig

- HTML strukturell ahnlich wie XML

→ gleiche Technologien fur Abfragedienste und Layoutaufberei-tung, oft keine klare Trennung zwischen beiden Funktionen

- Layoutaufbereitung serverseitig und clientseitig moglich

- zusatzliche Technologie-Konkurrenz durch CSS (Cascading StyleSheets, clientseitige, an HTML gebundene Technologie zur Layout-spezifikation)

→ sehr viele Architekturvarianten

1.2 Abfragen als Dokumenttransformationen

Grundgedanke:

- Eingabedaten = XML-Datenbank = 1 großer abstrakter Syntax-baum (oder mehrere Baume)

- Ausgabedaten: sollten auch einen Syntaxbaum bilden!!(u.a. wegen Hintereinanderschaltung von Abfragen)

somit:

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 5

- 1 Abfrage erzeugt Knoten verschiedenen Typs (nicht nur eines Typswie in rel. DB)

- Abfrage erzeugt auch Baumstruktur

- Abfrage kann als Transformation des Eingabebaums in einemAusgabebaum angesehen werden

1.3 Funktionsmerkmale von XML-Abfragesprachen

XML-Abfragesprachen + erforderliche erganzende Technologien sindkomplizierter als relationale Abfragesprachen – wieso?

uber die reinen Abfragedienste hinaus:erforderliche Funktionsmerkmale fur den Aufbau des auszugebendenSyntaxbaums:

1. Funktionen zum Erzeugen von Elementknoten (nur Baum-struktur);oft einfache Kopien von Knoten des Eingabebaumsggf. vollig neue Knotentypen

2. Funktionen zum Berechnen des Inhalts von Elementen- trivial: ausgeben von Eingabe-Texten oder Attributwerten als

Text

- endet schnell bei allgemeinen Textverarbeitungsproblemen; rei-ne Datenextraktion und Weiterverarbeitung der Daten oft nichttrennbar

- zugehorige Teile der XML-Technologien (Abfragesprache +erganzendes) entsprechen einer allgemeinen Programmierspra-che + Textprozessor

3. Funktionen zum Erzeugen von Attributen

4. Funktionen zum Berechnen des Inhalts von Attributen (an-dere Restriktionen als bei Elementinhalten)

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 6

5. Funktionen fur “low level”-Probleme (physische Ebene; Zei-chensatze usw.)

6. gleichzeitiges Erzeugen verschiedener Knotentypender komplette Ausgabebaum muß in 1 Verarbeitungsschritt aufge-baut werdennach Typen getrenntes Aufsammeln einzelner Eingabe-Knotendurch die Applikation (analog zu mehreren SQL-Abfragen) ist nichtsinnvoll / nicht machbar

2 Einordnung von XSLT

Bestandteile der Extensible Stylesheet Language (XSL):- Transformationssprache XSLT (eXtensible Stylesheet Langua-

ge for Transformation)

XSLT definiert i.w. Transformationsregeln und Ausgabeanweisun-gen – Details s.u.

XSLT basiert auf XPath

- Formatierungssprache: Extensible Stylesheet Language (XSL)http://www.w3.org/TR/xsl11/

– hier nicht betrachtet

insg. ziemlich komplexe Technologie

XPath:

- definiert Pfadausdrucke;Pfadausdruck: bestimmt ausgehend von einem Startknoten eineMenge von Zielknoten im Eingabesyntaxbaum

- beinhaltet keine Ausgabeanweisungen

Versionen von XSLT / XPath:

- XSLT 1.0, von 1999, basiert auf XPath 1.0

- XSLT 2.0, verabschiedet 2007, basiert auf XPath 2.0ist wesentlich ausgereifter

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 7

3 XSLT-Prozessoren

3.1 Grundlegende Funktionsweise von XSLT-Prozesso-ren

generischer

ParserDoku−

ment

Grammatik

Syntax−

Baum

generischer

Unparser

regelnTransformations−

Doku−

ment

Schritte:

1. gegebene XML-Datei(en) in einen Syntaxbaum ubersetzen

2. den Baum durchlaufen (meistens ahnlich preorder);bei jedem besuchten Knoten eine passende Transformationsregelanwenden

Transformationsregeln konnen bunt gemischt Abfragedienste und Lay-outaufbereitung betreffen!

Varianten der Ausgabe:

1. Syntaxbaum, in XML dargestellt

2. Seiteninhalt, in HTML dargestellt

3. beliebiger Text (z.B. in LATEX-Syntax fur Druckausgabe)

Varianten der Eingabeverarbeitung:

- validierend (ggf. optional) oder nicht validierend

technische Einbettung:

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 8

- nichtinteraktive selbstandige Programme;Beispiele: xsltproc , Xalan , Saxon , ....s. WWW-Seite fur die Ubungen

- nichtinteraktive dynamisch gebundene Bibliotheken; Beispiel:libxslt ; als Teil von

- WWW-/Applikationsservern (ggf. inkl. Weiterverarbeitung zuHTML)

- WWW-Browsern (inklusive sofortiger Weiterverarbeitung inHTML und in die Bildschirmdarstellung – unsicher, nicht in al-len Browsern vorhanden / kompatibel)

3.2 Eingabe

zulassige Eingabe:

- nur wohlgeformtes und ggf. gultiges XML, XHTML

- kein nicht wohlgeformtes HTML (-Fragment), kein PDF, keineOffice-Formate, ...

Arten von Knoten des eingelesenen Syntaxbaums aus Sichtvon XSLT:

- Dokumentwurzel

- Elemente

- Textabschnitte (1 TA = Text zwischen zwei aufeinanderfolgendentags)

- Attribute

- Kommentare

- Namensraume

- Processing Instructions

kein Bestandteil der Eingabe: die zug. Dokumenttypdefinition, wennvorhanden [allenfalls indirekt wegen Vorgabewerten]

Dokumentwurzel:

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 9

- entsteht implizit beim Einlesen;ist nicht explizit textuell in der Eingabedatei reprasentiert

- hat keine Attribute

- hat bei einer wohlgeformten Datei genau einen Element-Kindknotenmit dem Typ, der in der DOCTYPE-Klausel als Typ des Wurzelele-ments angegeben ist, ferner z.B. Kommentarknoten und Leerraum

3.3 Ausgabe

Ausgabe im Normalfall wieder eine XML-Datei!

- ist wohlgeformt→ sollte als textuelle Darstellung eines (Ausgabe-) Syntaxbaumsangesehen werden!!

- kann erneut transformiert werden

- inkl. XML-Deklaration (<?xml version=’1.0’...?>)

- ohne DTD – im Ausgabesyntaxbaum konnen Teile der Eingabe feh-len / Knoten umsortiert sein / Strukturen verandert sein / ...passende DTD i.a. nicht automatisch bestimmbar

Auswahl der Ausgabemethode:

XML-Ausgabe ungeeignet fur HTML-Prozessoren, LATEX usw. (wegen<?xml ... ?> Anweisung in 1. Zeile, unpassender Zeichensatzcodie-rung, ...)

→ Die meisten XSLT-Prozessoren unterstutzen mehrere Ausgabeme-thoden; Auswahl mit der Steueranweisung xsl:output und Parame-ter method ; zulassige Werte:

xml Vorgabe

html Auswahl mit <xsl:output method=’html’ />

text Auswahl mit <xsl:output method=’text’ />

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 10

muß auf oberster Ebene im Transformationsdokument stehen,am besten direkt hinter dem offnenden xsl:transform -tag (s.u.)

weitere Steuerungsangaben als Attribute von xsl:output :

version zur Zeit nur 1.0 erlaubt

omit-xml-declaration

erlaubte Werte: yes und no . Angabe yes : keine XML-Deklaration in der Ausgabe

standalone erlaubte Werte: yes und no . Wert wird in die ausgege-bene XML-Deklaration ubernommen

encoding erlaubte Werte: alle vom Prozessor unterstutzten Zei-chensatzcodierungen, z.B. ISO-8859-1, UTF-8, UTF-16,....; Vorgabewert: UTF-8

indent erlaubte Werte: yes und no . Angabe yes : Prozes-sor kann versuchen, in der Ausgabe Leerraum so zuverandern, daß gut lesbare Einruckungen entstehen

4 XSLT-Transformationsdokumente

XSLT-Transformationsdokumente:

- enthalten i.w. Transformationsregeln

- synonym: XSLT-Stylesheet-Dokumente, XSLT-Stylesheet1

4.1 Außerer Aufbau eines Transformationsdokuments

Muster:1nicht verwechseln mit Cascading Stylesheets! Deren Zweck ist teilweise ahn-

lich zu XSLT-Stylesheets, sind aber Teil der Begriffswelt von HTML; steuern dasrendering bei der Interpretation von HTML-Text

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 11

<?xml version=’1.0’ encoding=’ISO-8859-1’ ?>

<xsl:transform version=’1.0’

xmlns:xsl=’http://www.w3.org/1999/XSL/Transform’>

<xsl:output .... />

...

<xsl:template ...> .... </xsl:template>

<xsl:template ...> .... </xsl:template>

...

</xsl:transform>

- ist ein XML-Dokument! ( → gut lesbar ???!? )

- muß den Namensraum

http://www.w3.org/1999/XSL/Transform

fur die Notation der Transformationsregeln nutzen

dieser wird i.d.R. auf den Namensraumbezeichner xsl abgebildet

- Wurzelelementtyp eines Transformationsdokuments:stylesheet oder transform (sind aquivalent)

- zulassige Kindelementtypen des transform -Elements i.w.:

- output -Elemente: Ausgabesteuerung; mussen zuerst kommen

- template -Elemente: Transformationsregeln

4.2 Syntax von XSLT-Kommandos

- Aufschreibung als XML-Element

- Kommandoname = Elementtypname

Beispiel: <xsl:template ...> .... </xsl:template>

oft leerer Inhalt → kompakte Notation sinnvoll

- Parameter: i.d.R als Attribute des Elements

Beispiel: <xsl:output method=’text’ />

linguistische Qualitat: vergleichbar mit Assembler >:-[

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 12

4.3 Transformationsregeln – Crashkurs

Funktionsweise von Transformationsregeln ist ziemlich kompliziert,insb. wenn mehrere Regeln vorhanden sind

daher: “hello world”-Ansatz: Probleme zunachst weitgehend vermei-den (nicht stilgerecht) und nur eine extrem vereinfachte Struktur er-lernen

Vermeidungsstrategie: mit nur einer Transformationsregel fur die Do-kumentwurzel arbeiten (nicht der Normalfall!)

Konzeptueller Inhalt einer Transformationsregel(einfachste Form):

1. Knotentyp, auf den die Regel anzuwenden ist

2. Schablone / “Textmuster” (template), das fur einen Knoten diesesTyps auszugeben ist;

enthalt u.a. Verarbeitungsanweisungen

= Teilbaum des Syntaxbaums des Transformationsdokuments!besteht also aus Elementknoten, Textknoten, Kommentaren usw.

Notation einer Transformationsregel:in Form eines xsl:template-Elements (kryptisch):

<xsl:template match=’Knotentyp’ >

.... Schablone ....

</xsl:template>

- Knotentyp im Parameter match

- Schablone im Inhalt des template-Elements

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 13

5 Arbeiten mit einer einzigen Transformati-onsregel (ausnahmsweise)

- nur 1 Transformationsregel, gilt fur Dokumentwurzel

- zwecks leichterem Einstieg

- geht allenfalls bei sehr einfachen Transformationen,ist nicht stilgerecht, wird spater als Fehler gewertet!!

Transformationsregel fur die DokumentwurzelKnotentyp = ’/ ’

Spezifikation:

<xsl:template match=’ / ’>

.... Schablone ....

</xsl:template>

Die Regel fur die Dokumentwurzel wird zu Beginn der Verarbeitungautomatisch ausgefuhrt!

5.1 Aufruf einer Schablone

- explizite Aufrufe sind moglich – Details spater

- Aufrufe sind sehr haufig implizit (kein sichtbarer Quelltext)

z.B. Schablone der Transformationsregel fur die Dokumentwurzel

- bei jedem Aufruf wird ein Kontext erzeugt, in dem die Schabloneausgefuhrt wird

Bestandteile des Kontextes eines Schablonenaufrufs:

1. Kontextknoten = aktuell zu verarbeitender Knoten im Eingabe-Syntaxbaumhat Typ gemaß match -ParameterBeispiel: Dokumentwurzel

2. Numerierungen u.a., vorerst uninteressant

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 14

5.2 “Ausfuhren” einer Schablone

Schablone = Inhalt des template-Elements= Teilbaum des Syntaxbaums des Transformationsdokuments

Grundregeln der Verarbeitung von Knoten in einer Schablone:

1. Elementknoten, die eine Ausgabe- oder Steueranweisungdarstellen (inkl. zugehorige Attributknoten): diese Anweisungausfuhren

2. andere Element- und Attributknoten: identisch (“wortlich”)ausgeben= identisch von Eingabebaum in den Ausgabebaum kopieren

3. Kommentarknoten: ignorieren

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 15

4. Textknoten:

a. Textknoten enthalt nicht nur Leerraum: identisch ausgeben

“whitespace characters”: #x20, #x9, #xD, #xA

b. Textknoten enthalt nur Leerraum und ist Kind eines xsl:text -Elements (s.u.): identisch ausgeben

c. ansonsten: ignorieren (keine Ausgabe)

Einstiegsbeispiel:

<?xml version=’1.0’ encoding=’ISO-8859-1’ ?>

<xsl:transform version=’1.0’

xmlns:xsl=’http://www.w3.org/1999/XSL/Transform’>

<xsl:output method=’xml’ />

<!-- dies ist ein Test -->

<xsl:template match=’ / ’>

<b x=’3’>Hello World!</b>

</xsl:template>

</xsl:transform>

5.3 Whitespace Stripping in XSLT

Problem: Textknoten, nur Leerraum enthalten

- treten in den Eingabedaten bei eingeruckter Formatierung massen-haft auf

- wurden ohne die o.g. Sonderregelung fur Leerraum-Textknoten inTemplates massenhaft in der Ausgabe erzeugt werden

- storen manchmal bei der Weiterverarbeitung, z.B. mit LaTeX

→ umfangreiche Moglichkeiten in XSLT, solche Textknoten in denEingabedaten zu ignorieren (hier kein Lehrstoff)

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 16

Warnung: haufiger Denkfehler: Leerraum-Textknoten werden in denEingabedaten ebenfalls ignoriert

- Leerraum-Textknoten werden in den Eingabedaten und in Templa-tes unterschiedlich behandelt!!

- Leerraum-Textknoten werden in den Eingabedaten nicht au-tomatisch entfernt, sind ganz normale Knoten im Eingabe-Syntaxbaum

- zahlen in Pfadschritten wie child::node() o.a. mit bei Zahlungenposition(), last(), count(...)

- Leerraume innerhalb von Tags sind keine Textknoten, sind nicht imEingabe-Syntaxbaum reprasentiert

5.4 Ausgabe- bzw. Steueranweisungen

- sind alle Elemente, deren Typ im reservierten Namensraum fur An-weisungen liegtnormalerweise: der Tag-Name fangt mit xsl: an(Details s. Lehrmodul uber Namensraume)Beispiel: <xsl:value-of .... />

- haben oft einen formalen Parameter select, der i.d.R. den oder dieKnoten angibt, auf die die Regel im Prinzip anwendbar istBeispiel: <xsl:value-of select=’pfad’ />

- haben alle einen versteckten Parameter: den Kontextknoten derSchablonenausfuhrung – wird als Ausgangsknoten fur relative Pfa-de innerhalb der Schablone benutzt

5.5 Das Kommando xsl:value-of

Wandelt einen beliebigen Eingabeknoten in einen ausgegebenen Text-knoten um

- stets leerer Inhalt

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 17

- hat einen formalen Parameter select , der i.d.R. einen XPath-Ausdruck enthalt2 und damit einen Knoten auswahlt

Wirkung:

1. berechnet den String-Wert des ersten Knotens (!!) (erster in derDokumentordnung) in der Knotenmenge bzw. einen leeren String,wenn die Knotenmenge leer ist

2. erzeugt einen Textknoten im Ausgabebaum mit diesem String, wennder String nicht leer ist

2Es sind i.a. alle Ausdrucke erlaubt, die einen String liefern. Hierzu gehorenarithmetische Ausdrucke, die ausgerechnet werden, das Ergebnis wird in einenString konvertiert. Ferner sind diverse Stringfunktionen erlaubt. Hierauf gehenwir hier nicht naher ein.

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 18

Der String-Wert eines Knotens ist:

- bei Textknoten: der Text

- bei Attributen: der Attributwert

- bei Elementen: Konkatenation aller Texte in allen Kind- undNachfahre-Textknoten des Teilbaums

- bei Kommentaren: der Text zwischen dem offnenden <!-- und demschließenden -->.

- weitere Falle s. XPath-Spezifikation, Kap. 5 “Data Model”.

Beispiel:

- Eingabedaten: eine Lehrmodulbeschreibung

- Ausgabe: Lehrmodulname (Kurzel) – Verantwortlicher

Einfache Losung:

<xsl:template match=’ / ’>

<xsl:value-of select=’//LEHRVERANSTALTUNGSNAME’

/>

(<xsl:value-of select=’//LEHRVERANSTALTUNGSKUERZEL’/>)

--

<xsl:value-of select=’//VERANTWORTLICHER/@dozentId’

/>

</xsl:template> .....

u.U. storend: viel Leerraum in der Ausgabe

5.6 Das Kommando xsl:text

Viel Trickserei in XSLT bei der Behandlung von Leerraum im Einga-bebaum und in den Schablonen (s. Abschnitt “Whitespace Stripping”)

simple Methode, um Leerraum zu vermeiden, der in den Schablonengeneriert wird:

Kommando xsl:text : gibt den enthaltenen Text aus

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 19

Funktion normalize-space(..): entfernt Leerraum vorne und hintenund reduziert in der Mitte auf 1 Leerzeichen

obiges Beispiel, bessere Losung:

....

<xsl:template match=’ / ’>

<xsl:value-of select=

’normalize-space(//LEHRVERANSTALTUNGSNAME)’ />

<xsl:text> (</xsl:text>

<xsl:value-of select=’//LEHRVERANSTALTUNGSKUERZEL’

/>

<xsl:text>) -- </xsl:text>

<xsl:value-of select=’//VERANTWORTLICHER/@dozentId’

/>

<xsl:text>

</xsl:text>

</xsl:template> ....

5.7 Das Kommando xsl:for-each

Merkmale des Ausgabekommandos xsl:for-each

1. hat einen formalen Parameter select , der einen XPath-Ausdruckenthalt= Menge der Knoten des Eingabebaums, uber die iteriert werdensoll(meistens direkte Kindknoten)

2. Inhalt: eine “innere” Schablone, aufgebaut analog zum Inhalt einerTransformationsregel

3. zusatzlich Sortierung der Knotenmenge moglich

Wirkung:

- fur jeden durch das select gewahlten Knoten wird die innere Scha-blone ausgefuhrt

- dieser Knoten ist der Kontextknoten fur diese Ausfuhrung der in-neren Schablone!

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 20

→ Wechsel des Kontextknotens beim Betreten der inneren Scha-blone!

Beispiel: wie oben, aber zusatzlich alle Semester (mit Komma ge-trennt) angeben, in denen das Lehrmodul angeboten wurde

1. Losung:

<xsl:template match=’ / ’>

<xsl:value-of select=’//LEHRVERANSTALTUNGSNAME’ />

(<xsl:value-of select=’//LEHRVERANSTALTUNGSKUERZEL’ />) --

<xsl:value-of select=’//VERANTWORTLICHER/@dozentId’ />

<xsl:text> </xsl:text>

<xsl:for-each select="//DURCHFUEHRUNG" >

<xsl:value-of select=’./@semester’ />,

</xsl:for-each>

</xsl:template>

nicht ganz perfekt: Komma am Ende zuviel

2. Losung:

<xsl:template match=’ / ’>

<xsl:value-of select=’//LEHRVERANSTALTUNGSNAME’ />

(<xsl:value-of select=’//LEHRVERANSTALTUNGSKUERZEL’ />) --

<xsl:value-of select=’//VERANTWORTLICHER/@dozentId’ />

<xsl:text> </xsl:text>

<xsl:for-each select="//DURCHFUEHRUNG[ last()>position() ]">

<xsl:value-of select=’./@semester’ />,

</xsl:for-each>

<xsl:value-of select=’//DURCHFUEHRUNG[ last() = position() ]

/ @semester’ />

</xsl:template>

Literatur

[XPath99] XML Path Language (XPath) Version 1.0, W3C Recom-mendation 16 November 1999; http://www.w3.org/TR/xpath;1999

c©2019 Udo Kelter Stand: 17.04.2019

XSLT, Teil 1 (Stichworte) 21

[XSLT99] XSL Transformations (XSLT) Version 1.0, W3C Re-commendation 16 November 1999; http://www.w3.org/TR/xslt;1999

[XML] Kelter, U.: Lehrmodul “XML”; 2004

c©2019 Udo Kelter Stand: 17.04.2019