SlideShare une entreprise Scribd logo
1  sur  6
Télécharger pour lire hors ligne
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
IT-Zertifikat der Phil.-Fak.: Advanced Markup & Metadata
Jan G. Wieners, MA - jan.wieners@uni-koeln.de

IT-Zertifikat: Daten- und Metadatenstandards
Transformation von XML-Dokumenten mit XSLT (und XPATH)
XSLT – kurz und knackig
I.

Was ist XSLT?
XSL Transformation (XSLT) ist eine Programmiersprache zur Transformation
von XML-Dokumenten. Die rechtsstehende Grafik illustriert das Verfahren
der Umwandlung von XML-Dokumenten: Ein Eingabedokument (z.B. eine
Datei mit der Dateiendung xml) wird über den „XSLT-Prozessor“ in ein Zieloder Ausgabedokument umgewandelt.
Wie die Umwandlung stattzufinden hat, d.h. welche Elemente des
Eingabedokumentes sich schließlich im Ausgabedokument wiederfinden
sollen, das ist angegeben im XSLT-Code (i.e. eine Datei mit der Dateiendung
xslt, die XSLT-Anweisungen enthält).

II.

Wozu dient XSLT?
XSLT beschreibt die Umwandlung (z.B.) eines XML-Dokumentes in ein
anderes Dokument, z.B. eine XHTML-Website, XML, SVG, etc.

III.

Wie funktioniert die Umwandlung bzw. Transformation?
XSLT verwendet die Abfragesprache Xpath, um Teile eines XML-Dokumentes
zu adressieren. Die eigentliche Umwandlung findet im Hintergrund, z.B. im
Browser statt (darum brauchen wir uns nicht zu kümmern).

IV.

Wie funktioniert die Umwandlung bzw. Transformation nun genau?
Eine Transformation besteht aus einer Reihe von einzelnen Transformationsregeln, die als „Templates“
(„Schablonen“) bezeichnet werden. Ein Template besitzt ein auf XPath basierendes Pattern („Muster“), das
beschreibt, für welche Knoten es gilt, und einen Inhalt, der bestimmt, wie das Template seinen Teil des
Zielbaums erzeugt.

XSLT … und die Praxis
Beispiel I: Darstellung einer CD-Sammlung
Eine CD-Sammlung soll über eine XML-Entität repräsentiert werden. Jede CD ist charakterisiert durch die
Informationen (title, artist, label, year, previewimage, price, currency).

-1/6-
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
IT-Zertifikat der Phil.-Fak.: Advanced Markup & Metadata
Jan G. Wieners, MA - jan.wieners@uni-koeln.de

cdkatalog.xml (findet sich in den kursbegleitenden Materialien)
<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="cdkatalogschablone.xsd">
<cd previewimage="http://ecx.images-amazon.com/images/I/51e9ZoomINL._AA115_.jpg">
<title>Drukqs</title>
<artist>Aphex Twin</artist>
<label>Warp</label>
<price currency="EUR">10.90</price>
<year>2001</year>
</cd>
<cd previewimage="http://ecx.images-amazon.com/images/I/41BGQHT1ZEL._SL500_AA300_.jpg">
<title>I care because you do</title>
<artist>Aphex Twin</artist>
<label>Warp</label>
<price currency="EUR">20.99</price>
<year>1995</year>
</cd>
[…]
</catalog>

Transformation der durch XML repräsentierten Information: XSLT
1.: XML-Dokument um XSLT-Angabe ergänzen:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="cdkatalog.xslt"?>
<catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="cdkatalogschablone.xsd">
<catalog>
[…]

-2/6-
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
IT-Zertifikat der Phil.-Fak.: Advanced Markup & Metadata
Jan G. Wieners, MA - jan.wieners@uni-koeln.de

2.: Neue Datei mit Dateiendung xslt anlegen (zu finden in den kursbegleitenden Materialien)
Ein XSL-Stylesheet beginnt immer mit der XMLDeklaration

cdkatalog.xslt

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html"/>
Definiert, dass das Dokument ein XSLT Stylesheet ist.
<xsl:template match="/">
<html>
Hier wird das Ausgabeformat (HTML) festgelegt.
<body>
<h2>Meine CD-Kollektion</h2>
<h3>CD I</h3>
Das <xsl:template> Element definiert ein
Titel: <xsl:value-of select="/catalog/cd[1]/title" />
Template. Das match=“/“ Attribut
<br />
verknüpft das Template mit dem
Künstler: <xsl:value-of select="/catalog/cd[1]/artist" />
Wurzelelement des XML-Dokumentes.
<br />
Label: <xsl:value-of select="/catalog/cd[1]/label" />
Der Inhalt von <xsl:template>
<br />
definiert die HTML-Ausgabe.
Jahr: <xsl:value-of select="/catalog/cd[1]/year" />
<br />
Bild: <xsl:value-of select="/catalog/cd[1]/@previewimage"/>
<h3>CD V</h3>
Zugriff auf das fünfte Element
Titel: <xsl:value-of select="/catalog/cd[5]/title" />
(„/catalog/cd[5]/title“) der XML-Datei.
<br />
Künstler: <xsl:value-of select="/catalog/cd[5]/artist" />
<br />
Zugriff auf den Wert des Attributes
Label: <xsl:value-of select="/catalog/cd[5]/label" />
„previewimage“ von <cd>.
<br />
Jahr: <xsl:value-of select="/catalog/cd[5]/year" />
<br />
Bild: <xsl:value-of select="/catalog/cd[5]/@previewimage"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

-3/6-
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
IT-Zertifikat der Phil.-Fak.: Advanced Markup & Metadata
Jan G. Wieners, MA - jan.wieners@uni-koeln.de

XPath
In der oben wiedergegebenen XSLT-Datei werden XPath-Ausdrücke verwendet, um auf Elemente des XML-Baumes
zuzugreifen, z.B. auf die erste CD des CD-Kataloges („<xsl:value-of select="/catalog/cd[5]/“). Die Selektion von
Elementen des XML-Baumes funktioniert nach der folgenden Logik:
Knoten auswählen: Pfadausdrücke

Ausdruck

Beschreibung

nodename
/
//
.
..
@

Wählt alle Kindknoten des bezeichneten Knotens
Wählt den Wurzelknoten aus
Wählt den bezeichneten Knoten aus – egal, wo sich der Knoten befindet
Wählt den aktuellen Knoten aus
Wechsel zum Elternknoten des aktuell angewählten Knotens
Auswahl von Attributen

Auf das CD-Beispiel übertragen:
<catalog>
<cd previewimage="http://ecx.images-amazon.com/images/I/51bnHWsisxL._SL500_AA300_.jpg">
<title>The Campfire Headphase</title>
<artist>Boards of Canada</artist>
<label>Warp</label>
<price currency="EUR">16.99</price>
<year>2005</year>
</cd>
</catalog>

Ausdruck

Beschreibung

catalog
/catalog

Alle Kindknoten von <catalog> auswählen
Wählt das Wurzelelement „catalog“ aus. Achtung, startet die Pfadangabe mit /, so ist
damit der absolute Pfad zu einem Element bezeichnet.
Wählt alle <cd> Elemente aus, die Kindelemente sind von <catalog>
Wählt alle <cd> Elemente aus – egal, wo sich die Elemente befinden
Wählt alle <cd> Elemente unterhalb des Elementes <catalog> aus – egal, wo sich die
Elemente befinden
Wählt alle Attribute mit der Bezeichnung „previewimage“ aus

catalog/cd
//cd
catalog//cd
//@previewimage

-4/6-
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
IT-Zertifikat der Phil.-Fak.: Advanced Markup & Metadata
Jan G. Wieners, MA - jan.wieners@uni-koeln.de

Prädikate
Prädikate werden verwendet, um spezifische Knoten zu finden bzw. Knoten ausfindig zu machen, die einen
bestimmten Wert enthalten. Prädikate werden umschlossen von eckigen Klammern. Beispiele für Prädikate:

Ausdruck

Ergebnis

/catalog/cd[1]
/catalog/cd[last()]
/catalog/cd[last()-1]
//price[@currency]
//price[@currency ='EUR']

Wählt das erste <cd> Element aus, das Kindelement ist von <catalog>
Wählt das letzte <cd> Element aus, das Kindelement ist von <catalog>
Wählt das vorletzte <cd> Element aus, das Kindelement ist von <catalog>
Wählt alle <price> Elemente aus, die über ein Attribut „currency“ verfügen
Wählt alle <price> Elemente aus, die über ein Attribut „currency“ mit dem
Attributwert „EUR“ verfügen

Auswahl unbekannter Knoten
XPath Wildcards können verwendet werden, um unbekannte Elemente zu adressieren:

Wildcard

Beschreibung

*
@*
node()

Entspricht einem beliebigen Elementknoten
Entspricht einem beliebigen Attributknoten
Entspricht einem Knoten jeglicher Art

Beispiele:

Pfadausdruck

Result

/catalog/*
//*
//price[@*]

Wählt alle Kindknoten des <catalog> Elementes aus
Wählt alle Elemente im XML-Dokument aus
Wählt alle <price> Elemente aus, die über ein Attribut verfügen

-5/6-
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
IT-Zertifikat der Phil.-Fak.: Advanced Markup & Metadata
Jan G. Wieners, MA - jan.wieners@uni-koeln.de

Probleme und ihre Lösungen / Code-Snippets
I. Wie lässt sich der Attributwert von „previewimage“ in das HTML Bild-Tag <img> einbetten?
Lösung: <xsl:attribute>
Beispiel: <img> Tag um src-Attribut ergänzen
<img>
<xsl:attribute name="src"><xsl:value-of select="/catalog/cd[5]/@previewimage"/></xsl:attribute>
</img>
II. Wie lässt sich die Anzahl von Elementen im XML-Dokument bestimmen?
Lösung: count
Beispiel: Ausgabe der Anzahl von <cd> Tags:
<h3>Titel (&lt;cd&gt; Tags) in XML-Datenbasis:
<xsl:variable name="Anzahl_CDs" select="/catalog/cd"/>
<xsl:value-of select="count($Anzahl_CDs)"/>
</h3>
III. Wie lassen sich alle Elemente des XML-Dokumentes traversieren, ohne die Nummer des Elementes explizit
angeben zu müssen?
Lösung: <xsl:for-each select=““>
Beispiel: Ausgabe aller <cd> Elemente und Zugriff auf Kindelemente:
<xsl:for-each select="/catalog/cd">
Titel: <xsl:value-of select="title" /> <br />
Künstler: <xsl:value-of select="artist" /> <br />
Bildurl: <xsl:value-of select="@previewimage"/>
</xsl:for-each>
IV. Nummer des aktuell verarbeiteten Elementes ausgeben
Lösung: position()
Beispiel:
<xsl:for-each select="/catalog/cd">
<h3>CD <xsl:value-of select="position()" />
</xsl:for-each>
Die Kurzreferenz unter http://www.helmut-vonhoegen.de/Kurzreferenz_XSLT.pdf bietet einen feinen Überblick über
die XSLT-Funktionalität.
-6/6-

Contenu connexe

En vedette

A-Recruiter Tage 2013: Workshop II "Konflikte" (Herr Wende)
A-Recruiter Tage 2013: Workshop II "Konflikte" (Herr Wende)A-Recruiter Tage 2013: Workshop II "Konflikte" (Herr Wende)
A-Recruiter Tage 2013: Workshop II "Konflikte" (Herr Wende)U-Form:e Testsysteme
 
Das Reichsarchiv Wien 1938-1945
Das Reichsarchiv Wien 1938-1945Das Reichsarchiv Wien 1938-1945
Das Reichsarchiv Wien 1938-1945Thomas Just
 
IL MIRACOLO DELLA FRUTTA (in tedesco)
IL MIRACOLO DELLA FRUTTA (in tedesco)IL MIRACOLO DELLA FRUTTA (in tedesco)
IL MIRACOLO DELLA FRUTTA (in tedesco)marsetti
 
Cap4
Cap4Cap4
Cap4CJAO
 
Vorstellung von et neven
Vorstellung von et nevenVorstellung von et neven
Vorstellung von et nevenLaurent Cheret
 
Ap pzum arzt_-_vom_werkzeug_zum_werbzeug
Ap pzum arzt_-_vom_werkzeug_zum_werbzeugAp pzum arzt_-_vom_werkzeug_zum_werbzeug
Ap pzum arzt_-_vom_werkzeug_zum_werbzeugRobert Fuchs
 

En vedette (9)

A-Recruiter Tage 2013: Workshop II "Konflikte" (Herr Wende)
A-Recruiter Tage 2013: Workshop II "Konflikte" (Herr Wende)A-Recruiter Tage 2013: Workshop II "Konflikte" (Herr Wende)
A-Recruiter Tage 2013: Workshop II "Konflikte" (Herr Wende)
 
Diseno Artesania
Diseno ArtesaniaDiseno Artesania
Diseno Artesania
 
Das Reichsarchiv Wien 1938-1945
Das Reichsarchiv Wien 1938-1945Das Reichsarchiv Wien 1938-1945
Das Reichsarchiv Wien 1938-1945
 
IL MIRACOLO DELLA FRUTTA (in tedesco)
IL MIRACOLO DELLA FRUTTA (in tedesco)IL MIRACOLO DELLA FRUTTA (in tedesco)
IL MIRACOLO DELLA FRUTTA (in tedesco)
 
Cap4
Cap4Cap4
Cap4
 
Social Web und Karriere
Social Web und KarriereSocial Web und Karriere
Social Web und Karriere
 
Vorstellung von et neven
Vorstellung von et nevenVorstellung von et neven
Vorstellung von et neven
 
Ap pzum arzt_-_vom_werkzeug_zum_werbzeug
Ap pzum arzt_-_vom_werkzeug_zum_werbzeugAp pzum arzt_-_vom_werkzeug_zum_werbzeug
Ap pzum arzt_-_vom_werkzeug_zum_werbzeug
 
Microclase 2015
Microclase 2015Microclase 2015
Microclase 2015
 

Plus de Institute for Digital Humanities, University of Cologne

Plus de Institute for Digital Humanities, University of Cologne (20)

Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 17.04.2019 | ...
Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 17.04.2019 | ...Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 17.04.2019 | ...
Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 17.04.2019 | ...
 
Augmented City –Street Art, Embodiment, Cultural Heritage & AR | 03.04.2019 |...
Augmented City –Street Art, Embodiment, Cultural Heritage & AR | 03.04.2019 |...Augmented City –Street Art, Embodiment, Cultural Heritage & AR | 03.04.2019 |...
Augmented City –Street Art, Embodiment, Cultural Heritage & AR | 03.04.2019 |...
 
Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 03.04.2019 | ...
Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 03.04.2019 | ...Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 03.04.2019 | ...
Künstliche Intelligenz und visuelle Erzählungen: Comicanalyse | 03.04.2019 | ...
 
Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...
Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...
Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...
 
Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...
Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...
Transformation mittelhochdeutscher Erfahrungswelten – vom Text zum Computerga...
 
Bit sosem 2016-wieners-sitzung-13_ki-in-games
Bit sosem 2016-wieners-sitzung-13_ki-in-gamesBit sosem 2016-wieners-sitzung-13_ki-in-games
Bit sosem 2016-wieners-sitzung-13_ki-in-games
 
Bit sosem 2016-wieners-sitzung-12_bild-iv-computer-vision
Bit sosem 2016-wieners-sitzung-12_bild-iv-computer-visionBit sosem 2016-wieners-sitzung-12_bild-iv-computer-vision
Bit sosem 2016-wieners-sitzung-12_bild-iv-computer-vision
 
Bit sosem 2016-wieners-sitzung-11_bild-iii-filter
Bit sosem 2016-wieners-sitzung-11_bild-iii-filterBit sosem 2016-wieners-sitzung-11_bild-iii-filter
Bit sosem 2016-wieners-sitzung-11_bild-iii-filter
 
Bit sosem 2016-wieners-sitzung-10_bild-ii-punktoperationen
Bit sosem 2016-wieners-sitzung-10_bild-ii-punktoperationenBit sosem 2016-wieners-sitzung-10_bild-ii-punktoperationen
Bit sosem 2016-wieners-sitzung-10_bild-ii-punktoperationen
 
Bit sosem 2016-wieners-sitzung-09_bild-i-kompression
Bit sosem 2016-wieners-sitzung-09_bild-i-kompressionBit sosem 2016-wieners-sitzung-09_bild-i-kompression
Bit sosem 2016-wieners-sitzung-09_bild-i-kompression
 
Bit sosem 2016-wieners-sitzung-08_semantic-web
Bit sosem 2016-wieners-sitzung-08_semantic-webBit sosem 2016-wieners-sitzung-08_semantic-web
Bit sosem 2016-wieners-sitzung-08_semantic-web
 
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-iiBit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
 
Bit sosem 2016-wieners-sitzung-06_rechnerkommunikation
Bit sosem 2016-wieners-sitzung-06_rechnerkommunikationBit sosem 2016-wieners-sitzung-06_rechnerkommunikation
Bit sosem 2016-wieners-sitzung-06_rechnerkommunikation
 
Bit sosem 2016-wieners-sitzung-05_zellulaere-automaten-conway
Bit sosem 2016-wieners-sitzung-05_zellulaere-automaten-conwayBit sosem 2016-wieners-sitzung-05_zellulaere-automaten-conway
Bit sosem 2016-wieners-sitzung-05_zellulaere-automaten-conway
 
Bit sosem 2016-wieners-sitzung-04_theoretische-informatik
Bit sosem 2016-wieners-sitzung-04_theoretische-informatikBit sosem 2016-wieners-sitzung-04_theoretische-informatik
Bit sosem 2016-wieners-sitzung-04_theoretische-informatik
 
Bit sosem 2016-wieners-sitzung-03_algorithmen
Bit sosem 2016-wieners-sitzung-03_algorithmenBit sosem 2016-wieners-sitzung-03_algorithmen
Bit sosem 2016-wieners-sitzung-03_algorithmen
 
Bit sosem 2016-wieners-sitzung-02_datenstrukturen
Bit sosem 2016-wieners-sitzung-02_datenstrukturenBit sosem 2016-wieners-sitzung-02_datenstrukturen
Bit sosem 2016-wieners-sitzung-02_datenstrukturen
 
Bit sosem 2016-wieners-sitzung-01_auffrischung
Bit sosem 2016-wieners-sitzung-01_auffrischungBit sosem 2016-wieners-sitzung-01_auffrischung
Bit sosem 2016-wieners-sitzung-01_auffrischung
 
Bit sosem 2016-wieners-sitzung-00_themenueberblick
Bit sosem 2016-wieners-sitzung-00_themenueberblickBit sosem 2016-wieners-sitzung-00_themenueberblick
Bit sosem 2016-wieners-sitzung-00_themenueberblick
 
Bit wisem 2015-wieners-sitzung-13_Zusammenfassung II
Bit wisem 2015-wieners-sitzung-13_Zusammenfassung IIBit wisem 2015-wieners-sitzung-13_Zusammenfassung II
Bit wisem 2015-wieners-sitzung-13_Zusammenfassung II
 

IT-Zertifikat: Advanced Markup & Metadata - Handout XSLT

  • 1. Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung IT-Zertifikat der Phil.-Fak.: Advanced Markup & Metadata Jan G. Wieners, MA - jan.wieners@uni-koeln.de IT-Zertifikat: Daten- und Metadatenstandards Transformation von XML-Dokumenten mit XSLT (und XPATH) XSLT – kurz und knackig I. Was ist XSLT? XSL Transformation (XSLT) ist eine Programmiersprache zur Transformation von XML-Dokumenten. Die rechtsstehende Grafik illustriert das Verfahren der Umwandlung von XML-Dokumenten: Ein Eingabedokument (z.B. eine Datei mit der Dateiendung xml) wird über den „XSLT-Prozessor“ in ein Zieloder Ausgabedokument umgewandelt. Wie die Umwandlung stattzufinden hat, d.h. welche Elemente des Eingabedokumentes sich schließlich im Ausgabedokument wiederfinden sollen, das ist angegeben im XSLT-Code (i.e. eine Datei mit der Dateiendung xslt, die XSLT-Anweisungen enthält). II. Wozu dient XSLT? XSLT beschreibt die Umwandlung (z.B.) eines XML-Dokumentes in ein anderes Dokument, z.B. eine XHTML-Website, XML, SVG, etc. III. Wie funktioniert die Umwandlung bzw. Transformation? XSLT verwendet die Abfragesprache Xpath, um Teile eines XML-Dokumentes zu adressieren. Die eigentliche Umwandlung findet im Hintergrund, z.B. im Browser statt (darum brauchen wir uns nicht zu kümmern). IV. Wie funktioniert die Umwandlung bzw. Transformation nun genau? Eine Transformation besteht aus einer Reihe von einzelnen Transformationsregeln, die als „Templates“ („Schablonen“) bezeichnet werden. Ein Template besitzt ein auf XPath basierendes Pattern („Muster“), das beschreibt, für welche Knoten es gilt, und einen Inhalt, der bestimmt, wie das Template seinen Teil des Zielbaums erzeugt. XSLT … und die Praxis Beispiel I: Darstellung einer CD-Sammlung Eine CD-Sammlung soll über eine XML-Entität repräsentiert werden. Jede CD ist charakterisiert durch die Informationen (title, artist, label, year, previewimage, price, currency). -1/6-
  • 2. Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung IT-Zertifikat der Phil.-Fak.: Advanced Markup & Metadata Jan G. Wieners, MA - jan.wieners@uni-koeln.de cdkatalog.xml (findet sich in den kursbegleitenden Materialien) <?xml version="1.0" encoding="UTF-8"?> <catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="cdkatalogschablone.xsd"> <cd previewimage="http://ecx.images-amazon.com/images/I/51e9ZoomINL._AA115_.jpg"> <title>Drukqs</title> <artist>Aphex Twin</artist> <label>Warp</label> <price currency="EUR">10.90</price> <year>2001</year> </cd> <cd previewimage="http://ecx.images-amazon.com/images/I/41BGQHT1ZEL._SL500_AA300_.jpg"> <title>I care because you do</title> <artist>Aphex Twin</artist> <label>Warp</label> <price currency="EUR">20.99</price> <year>1995</year> </cd> […] </catalog> Transformation der durch XML repräsentierten Information: XSLT 1.: XML-Dokument um XSLT-Angabe ergänzen: <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="cdkatalog.xslt"?> <catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="cdkatalogschablone.xsd"> <catalog> […] -2/6-
  • 3. Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung IT-Zertifikat der Phil.-Fak.: Advanced Markup & Metadata Jan G. Wieners, MA - jan.wieners@uni-koeln.de 2.: Neue Datei mit Dateiendung xslt anlegen (zu finden in den kursbegleitenden Materialien) Ein XSL-Stylesheet beginnt immer mit der XMLDeklaration cdkatalog.xslt <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="html"/> Definiert, dass das Dokument ein XSLT Stylesheet ist. <xsl:template match="/"> <html> Hier wird das Ausgabeformat (HTML) festgelegt. <body> <h2>Meine CD-Kollektion</h2> <h3>CD I</h3> Das <xsl:template> Element definiert ein Titel: <xsl:value-of select="/catalog/cd[1]/title" /> Template. Das match=“/“ Attribut <br /> verknüpft das Template mit dem Künstler: <xsl:value-of select="/catalog/cd[1]/artist" /> Wurzelelement des XML-Dokumentes. <br /> Label: <xsl:value-of select="/catalog/cd[1]/label" /> Der Inhalt von <xsl:template> <br /> definiert die HTML-Ausgabe. Jahr: <xsl:value-of select="/catalog/cd[1]/year" /> <br /> Bild: <xsl:value-of select="/catalog/cd[1]/@previewimage"/> <h3>CD V</h3> Zugriff auf das fünfte Element Titel: <xsl:value-of select="/catalog/cd[5]/title" /> („/catalog/cd[5]/title“) der XML-Datei. <br /> Künstler: <xsl:value-of select="/catalog/cd[5]/artist" /> <br /> Zugriff auf den Wert des Attributes Label: <xsl:value-of select="/catalog/cd[5]/label" /> „previewimage“ von <cd>. <br /> Jahr: <xsl:value-of select="/catalog/cd[5]/year" /> <br /> Bild: <xsl:value-of select="/catalog/cd[5]/@previewimage"/> </body> </html> </xsl:template> </xsl:stylesheet> -3/6-
  • 4. Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung IT-Zertifikat der Phil.-Fak.: Advanced Markup & Metadata Jan G. Wieners, MA - jan.wieners@uni-koeln.de XPath In der oben wiedergegebenen XSLT-Datei werden XPath-Ausdrücke verwendet, um auf Elemente des XML-Baumes zuzugreifen, z.B. auf die erste CD des CD-Kataloges („<xsl:value-of select="/catalog/cd[5]/“). Die Selektion von Elementen des XML-Baumes funktioniert nach der folgenden Logik: Knoten auswählen: Pfadausdrücke Ausdruck Beschreibung nodename / // . .. @ Wählt alle Kindknoten des bezeichneten Knotens Wählt den Wurzelknoten aus Wählt den bezeichneten Knoten aus – egal, wo sich der Knoten befindet Wählt den aktuellen Knoten aus Wechsel zum Elternknoten des aktuell angewählten Knotens Auswahl von Attributen Auf das CD-Beispiel übertragen: <catalog> <cd previewimage="http://ecx.images-amazon.com/images/I/51bnHWsisxL._SL500_AA300_.jpg"> <title>The Campfire Headphase</title> <artist>Boards of Canada</artist> <label>Warp</label> <price currency="EUR">16.99</price> <year>2005</year> </cd> </catalog> Ausdruck Beschreibung catalog /catalog Alle Kindknoten von <catalog> auswählen Wählt das Wurzelelement „catalog“ aus. Achtung, startet die Pfadangabe mit /, so ist damit der absolute Pfad zu einem Element bezeichnet. Wählt alle <cd> Elemente aus, die Kindelemente sind von <catalog> Wählt alle <cd> Elemente aus – egal, wo sich die Elemente befinden Wählt alle <cd> Elemente unterhalb des Elementes <catalog> aus – egal, wo sich die Elemente befinden Wählt alle Attribute mit der Bezeichnung „previewimage“ aus catalog/cd //cd catalog//cd //@previewimage -4/6-
  • 5. Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung IT-Zertifikat der Phil.-Fak.: Advanced Markup & Metadata Jan G. Wieners, MA - jan.wieners@uni-koeln.de Prädikate Prädikate werden verwendet, um spezifische Knoten zu finden bzw. Knoten ausfindig zu machen, die einen bestimmten Wert enthalten. Prädikate werden umschlossen von eckigen Klammern. Beispiele für Prädikate: Ausdruck Ergebnis /catalog/cd[1] /catalog/cd[last()] /catalog/cd[last()-1] //price[@currency] //price[@currency ='EUR'] Wählt das erste <cd> Element aus, das Kindelement ist von <catalog> Wählt das letzte <cd> Element aus, das Kindelement ist von <catalog> Wählt das vorletzte <cd> Element aus, das Kindelement ist von <catalog> Wählt alle <price> Elemente aus, die über ein Attribut „currency“ verfügen Wählt alle <price> Elemente aus, die über ein Attribut „currency“ mit dem Attributwert „EUR“ verfügen Auswahl unbekannter Knoten XPath Wildcards können verwendet werden, um unbekannte Elemente zu adressieren: Wildcard Beschreibung * @* node() Entspricht einem beliebigen Elementknoten Entspricht einem beliebigen Attributknoten Entspricht einem Knoten jeglicher Art Beispiele: Pfadausdruck Result /catalog/* //* //price[@*] Wählt alle Kindknoten des <catalog> Elementes aus Wählt alle Elemente im XML-Dokument aus Wählt alle <price> Elemente aus, die über ein Attribut verfügen -5/6-
  • 6. Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung IT-Zertifikat der Phil.-Fak.: Advanced Markup & Metadata Jan G. Wieners, MA - jan.wieners@uni-koeln.de Probleme und ihre Lösungen / Code-Snippets I. Wie lässt sich der Attributwert von „previewimage“ in das HTML Bild-Tag <img> einbetten? Lösung: <xsl:attribute> Beispiel: <img> Tag um src-Attribut ergänzen <img> <xsl:attribute name="src"><xsl:value-of select="/catalog/cd[5]/@previewimage"/></xsl:attribute> </img> II. Wie lässt sich die Anzahl von Elementen im XML-Dokument bestimmen? Lösung: count Beispiel: Ausgabe der Anzahl von <cd> Tags: <h3>Titel (&lt;cd&gt; Tags) in XML-Datenbasis: <xsl:variable name="Anzahl_CDs" select="/catalog/cd"/> <xsl:value-of select="count($Anzahl_CDs)"/> </h3> III. Wie lassen sich alle Elemente des XML-Dokumentes traversieren, ohne die Nummer des Elementes explizit angeben zu müssen? Lösung: <xsl:for-each select=““> Beispiel: Ausgabe aller <cd> Elemente und Zugriff auf Kindelemente: <xsl:for-each select="/catalog/cd"> Titel: <xsl:value-of select="title" /> <br /> Künstler: <xsl:value-of select="artist" /> <br /> Bildurl: <xsl:value-of select="@previewimage"/> </xsl:for-each> IV. Nummer des aktuell verarbeiteten Elementes ausgeben Lösung: position() Beispiel: <xsl:for-each select="/catalog/cd"> <h3>CD <xsl:value-of select="position()" /> </xsl:for-each> Die Kurzreferenz unter http://www.helmut-vonhoegen.de/Kurzreferenz_XSLT.pdf bietet einen feinen Überblick über die XSLT-Funktionalität. -6/6-