30
XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN ist eine JAVA-Anwendung. XML-Datei, die bearbeitet werden soll (*.xml), wohlgeformt XSLT-Stylesheet, das die Transformationsanweisungen enthält. (*.xsl) Ein Stylesheet mit Formatierungsklassen für unsere wichtigsten Elemente und Standard-Text (*.css) [optional] Eine DTD, optional XML XSL CSS XALAN HTML XML TEXT DTD

XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

Embed Size (px)

Citation preview

Page 1: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XSLT Voraussetzungen, trivial

XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN ist eine JAVA-Anwendung.

XML-Datei, die bearbeitet werden soll (*.xml), wohlgeformtXSLT-Stylesheet, das die Transformationsanweisungen enthält.

(*.xsl)Ein Stylesheet mit Formatierungsklassen für unsere wichtigsten

Elemente und Standard-Text (*.css) [optional]Eine DTD, optional

XML

XSL

CSS

XALAN

HTML

XML

TEXT

DTD

Page 2: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XSLT: Definition

XSLT = Extensible Stylesheet Language Transformations""XSLT ist eine funktionale Programmiersprache. Ihr Zweck

ist die Transformation eines XML-Dokumentes in ein anderes Textdokument." Dies kann Text, HTML oder XML sein.

XSLT: Namensraum und Version als Angabe im Stylesheet

<xsl:stylesheet version="1.0"

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

Page 3: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

Grundlegender Aufbau eines Stylesheets

Ein Stylesheet ist selbst ein gültiges XML-Dokument. Es besitzt folgenden Grundaufbau:

<xsl:template match = "/">

<xsl:apply-templates />

</xsl:template>

Die Tags in Stylesheets werden mit Namensraum-Angaben geschrieben. Dieser wird im Wurzelelement deklariert. Beispiel:

<?xml version = "1.0" ?>

<xsl:stylesheet version = "1.0"

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

<!-- TEMPLATES, Verarbeitungsanweisungen -->

</xsl:stylesheet>

Page 4: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

Aufgabenstellung 1/1: Hallo Welt!

Unsere XML-DATEI:

<?xml version="1.0"?><gruss> Hallo, Welt!</gruss>

Wir beginnen mit einem einfachen, klassischen Beispiel:

Page 5: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

Aufgabenstellung 1/2: Hallo Welt ! XSLT-Stylesheet:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:output method="html"/>

<xsl:template match="/"><html>

<body><xsl:apply-templates

select="gruss" /></body></html>

</xsl:template>

<xsl:template match="gruss"><h1>

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

</xsl:template></xsl:stylesheet>

Page 6: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

Starten des Transformationsvorganges

In der DOS-Box:

java org.apache.xalan.xslt.Process -in gruss.xml -xsl gruss.xsl -out gruss.html

... Ergibt die (aus dem Transformationsprozess entstandene) Datei gruss.html

Zur Vereinfachung des Aufrufs kann man sich ein DOS-Skript (Batch-Datei) bauen (go.bat)

Page 7: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

Über die Ausgabe-Möglichkeiten

HTML

XML

TEXT

<xsl:output method="html" doctype-public ="-//W3C//DTD HTML 4.01 Transitional//EN" />

<xsl:output method = "xml"indent = "yes" />

xsl:output method = "text" />

PDF SVG ...

Programmcode VRML-Code ...

Page 8: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

Bausteine des Stylesheets

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="html"/>

<xsl:template match="gruss">

<h1>

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

</h1>

</xsl:template>

Hauptelement

Es gibt 37 XSLT-Elemente, davon 2 Hauptelemente, 12 Elemente der obersten Ebene sowie 23 Anweisungselemente. Bestimmte Elemente verwenden als Attribut Xpath-Ausdrücke.

Element oberste Ebene

Anweisungselement

Text, der in den Ausgabestrom

geschrieben wird

Xpath-Ausdruck

Page 9: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

Analyse des Beispiels (1)

1. Das XSLT-Stylesheet wird geparst und in eine Baumstruktur überführt.

2. Das Gleiche passiert mit dem XML-Dokument.3. Der Prozessor startet am Wurzelknoten des XML-

Dokuments. Dieser ist nicht das oberste Element, sondern die "Wurzel des Dokuments" (inkl. aller Verarbeitungsanweisungen etc.). Der Wurzelknoten ist der Startkontext.

WURZEL

Verarbeitungsanweisungen, wie <?xml-

stylesheet .../>Kommentare <!-- -->

Wurzelelement <gruss .../>

Weitere Elemente

Startkontext

Page 10: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

Analyse des Beispiels (2)

4. Prozessor: Muss ich irgendwelche Knoten verarbeiten? Ja, es gibt weitere Knoten im Dokument. Und:Es gibt ein "Template" (Vorlage, Schablone).<xsl:template match = "/"> Kontext = /

5. Was soll ich tun?<xsl:apply-templates select ="gruss" /> "Wähle die Kind-Knoten "gruss" und wende vorhandene Templates auf sie an." Kontext = /gruss

WURZEL

Andere Knoten auf der ersten

Ebene ...

Wurzelelement <gruss .../>

Page 11: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

Analyse des Beispiels (3)

6. Gibts ein spezielles Template für "gruss"?Ja, und zwar:<xsl:template match = "gruss">

7. Was muss ich jetzt tun? Schreibe in den Ausgabestrom:==> <h1>Dann nimm den aktuellen Knoten (und ggf. seine Kinderknoten) und schreibe deren "Inhalt":==> <xsl:value-of select="."/>Schreibe in den Ausgabestrom:==> </h1>

8. Würde es weitere Knoten gruss geben, würde jetzt der gruss [2] dran kommen. Dann kehrt der Prozessor zum aufrufenden Template zurück.

Page 12: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

Spannende, wundersame Tests / gruss2

1. Legen Sie ein neues Stylesheet mit Namen gruss2.xls an.

2. Kopieren Sie die Daten vom alten Template in das neue und löschen Sie daraus alle Templates!

3. Legen Sie auch eine neue XML-Datei gruss2.xml und kopieren Sie dorthin die Inhalte von gruss1.xml.

4. Checken Sie die "Ausgabe" dieses Templates. Was tut es?

5. Was ist daraus zu schließen?6. Legen Sie nun ein "leeres" Template für den

Wurzelknoten an.7. Prüfen Sie die Ausgabe und interpretieren Sie sie.

Page 13: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

Aufgabenstellung 2/1: Mehr Grüße im Manifest! / gruss2

Ändern Sie Ihren XML-File in gruss2.xml, senden Sie mehrere Grüße an die Welt.

Binden Sie auch den Aufruf des Stylesheets ein.Fügen Sie in ein wer-Element einen Kommentar ein.Verwenden Sie dazu folgende Struktur:

<?xml-stylesheet type="text/xsl" href="gruss1.xsl" ?><!–- Einbindung des Stylesheets mit einer Verarbeitungsanweisung und "Pseudoattributen" -->

<manifest><gruss>

<ansprache><wer sex="f|m">

<!-- --><wem>

<creator>

Page 14: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

Aufgabenstellung 2/2: XSLT-Stylesheet / gruss2

Schreiben Sie jetzt ein Stylesheet (gruss2.xsl) für die Transformation des neuen Texts.

1. Definieren Sie ein Template für den Wurzelknoten <xsl:template match="/"> und bauen Sie dort das Skelett der HTML-Seite. Im <body>-Element setzen Sie dann Schritt 2.

2. Teilen Sie dem Prozessor mit, dass er die Menge aller gruss-Knoten (und der Kindknoten) bilden und mit der vorhandenen Vorlage ausgeben soll. "<xsl:apply-templates select="manifest/gruss" />

3. Nun sollten Sie auch noch eine Vorlage für diese gruss-Knoten-Menge erstellen.

Wenn Sie damit schon fertig sind gehen Sie auf die nächste Seite.

Page 15: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

Aufgabenstellung 2/2: XSLT-Stylesheet

4. Erstellen Sie am Kopf der Seite ein Verzeichnis der "Rufenden".

5. Erstellen Sie ein CSS-Stylesheet und bauen sie die Klassen in die Ausgabe ein. Hier ein Vorschlag, die das geht:

(a) Sie müssen einen HTML-Header in die Ausgabe schreiben und dort auf das CCS-File verweisen:

<link rel="STYLESHEET" type="text/css" href="gruss.css" media="all" />

(b) Bei der Ausgabe des Elements geben Sie an:

<div><xsl:attribute name="class">liste</xsl:attribute>[...Text...]</div>

Page 16: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XPath: Definition

XPath ist eine Nicht-XML-Sprache, die dazu dient, bestimmte Teile eines XML-Dokuments zu identifizieren.

XPath sieht das Dokument (*.xml) als einen Baum von Knoten an. Für jedes Dokument gibt es genau einen Wurzelknoten./manifest/gruss/wer lokalisiert die wer-Knoten/ den Wurzelknoten selbst

XSLT benötigt XPath-Ausdrücke in bestimmten Attributen, um Knoten oder andere Teile des Dokuments auszuwählen, die verarbeitet werden sollen. <xsl:apply-templates select="/manifest/gruss" />

Page 17: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XPath: Knoten (1)

XPath kennt 7 Arten von Knoten im XML-Dokument:• Wurzelknoten: Der Knoten, der das gesamte

Dokument enthält. Adressierung mit /• Elementknoten: Enthält das adressierte Element und

seine Kinder (Element-, Text-, Kommentar-, Verarbeitungsanweisungsknoten)

• Attributknoten: Die Elementknoten, zu denen die Attribute gehören, sind deren Elternknoten. Jedoch sind Attributknoten sind keine Kinder ihres Elternknoten! Nach Attributen müssen Sie speziell fragen.

Page 18: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XPath: Knoten (2)

• Textknoten: enthalten den Text aus einem Element. Entity- und Zeichenreferenzen sowie CDATA-Abschnitte werden aufgelöst.

• Kommentarknoten: Text der Kommentare• Verarbeitungsknoten (PI-Knoten)• Namensraum-Knoten

Kontextknoten ist die Bezeichnung für den gerade gewählten, "aktuellen" Knoten. Xpath-Ausdrücke werden von diesem Punkt aus berechnet. Kontextknoten beinhalten noch weitere Informationen (Position, Größe etc.)

Page 19: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XPath: LokalisierungspfadeEin Lokalisierungspfad bezeichnet eine Menge von Knoten in

einem gegebenen Dokument.

<xsl:template match = "/" /> wählt den Wurzelknoten (und seine Kinder!) aus.

<xsl:template match = "gruss" /> wählt den Elementknoten gruss (und seine Kinder) relativ zum Kontextknoten aus. gruss muss ein Kindknoten zum Kontextknoten sein, in dem sich der XSLT-Prozess gerade befindet.Wieviele Knoten der XML-Datei werden damit ausgewählt?

<xsl:value-of select = "." /> wählt den gerade aktivierten Kontextknoten (und seine Kinder).

Bitte beachten Sie, dass XPath-Ausdrücke immer Knotenmengen zurückgeben! Und dass ein Knoten mehr ist als nur sein Text, aber noch keine Attributwerte beinhaltet.

Page 20: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XPath: Lokalisierungspfade: relativ

Ein relativer XPath-Adruck geht in der Adressierung immer vom aktuellen Kontextknoten aus. Beispiele:

<xsl:template match = "gruss" /> setzt voraus, dass gruss ein Kind des Kontextknotens (z.B. manifest) ist.

<xsl:value-of select = "." /> wählt den gerade aktivierten Kontextknoten (und seine Kinder).

<xsl:template match = "manifest/gruss/wer" />. Damit diese Adressierung keine leere Knotenmenge zurückgibt, muss der Kontextknoten das Wurzelelement sein.

<xsl:value-of select = ".." /> wählt den Elternknoten des Kontextknoten. Ist der Kontextknoten wer so wird gruss gewählt.

Page 21: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XPath: Lokalisierungspfade: absolut

Ein absoluter XPath-Ausdruck beginnt immer an der Dokumentwurzel, d.h. mit einem /. Der Kontextkonten wird nicht berücksichtigt.

<xsl:template match = "/" /> wählt das Wurzelelement.

<xsl:template match = "/manifest/gruss/wer" /> adressiert das Element wer.

Page 22: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XPath: Lokalisierungsschritte für Attribute

Auch Attribute sind ein Teil von XPath. Allerdings sind sie keine Kinder eines Elementknotens und werden daher auch nicht automatisch selektiert. Sie müssen vielmehr die Attribute explizit ansprechen.

<xsl:value-of select = "@sex" /> wählt das Attribut "sex" des aktuellen Kontextknotens und gibt dessen Wert aus.

<xsl: value-of select = "/manifest/gruss/wer/@sex" /> adressiert das Attribut absolut.

Page 23: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XPath: Nur den Text eines Knotens ausgeben

Wie Sie wissen, werden bei der Selektion eines Elementknotens alle untergeordneten Kinderknoten (auch jene, die keine Elementknoten, sondern etwa auch Kommentarknoten etc. sind) mit ausgewählt. Wollen Sie nur den Textknoten eines Elements ausgeben, verwenden Sie den "Knotentest" text()

<xsl: value-of select = "/manifest/gruss/text()" /> gibt nur den Text des gruss-Elements aus.

Page 24: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XPath: Wildcards, mehrere Treffer

Wildcards sprechen unterschiedliche Element- und Knotentypen gleichzeitig an.

* wählt alle Elementknoten aus (nicht aber: Attribute, Textknoten, Kommentare, PIs). Z.B. wählt dc:* alle Elementknoten des Namensraums dc aus.

@* wählt alle Attributknoten. node() wählt alle Knoten im aktuellen Kontext.// wählt unter allen Abkömmlingen des Kontextknotens und dem

Kontextknoten: z.B. wählt //wer alle wer-Elemente.| undiert XPath-Ausdrücke und liefert die Vereinigungsmenge

beider Ausdrücke.

Page 25: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XPath: Kommentare und Text auswählen

comment() Dieser Knotentest liefert den Inhalt des Kommentars im jeweiligen Kontext.

text() Liefert den Textinhalt eines Kontextknotens (nicht aber die der Kindelemente)

Page 26: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

Aufgabengabenstellung 3 / gruss3

1. Kopieren Sie den Inhalt von gruss1.xml -> gruss3.xml2. Erstellen Sie ein neues Stylesheet gruss3.xsl3. Geben Sie eine Liste aller im Dokument vorhandenen

Attribute aus.4. Geben Sie die Kommentare aus.5. Geben Sie alle Elemente ohne Templates aus.6. Geben den Inhalt der Elemente /manifest/gruss/wer

aus.

Immer denken: Ich super und kann's!

Page 27: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XPath: Prädikate, Funktionen, Zahlen

Manchmal ist es notwendig, die Treffermenge der gefundenen Knoten weiter zu filtern. Dies kann durch "Prädikate" geschehen. Prädikate beinhalten eine Bedingung bzw. einen Ausdruck, der wahr oder falsch ist (Boolscher Wert). Ist der Ausdruck für einen Knoten falsch, wird er aus der Liste gelöscht.

Beispiele:manifest/gruss/wer[@sex='m']manifest/gruss[wer = "Jaques Brel"]manifest/gruss[1]

Im Rahmen von Prädikaten werden häufig auch Funktionen und Zahlenoperationen verwendet.

Page 28: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XPath: Funktionen

Funktionen arbeiten mit Knotenmengen oder geben Informationen über Knotenmengen zurück. Funktionen liefern Daten folgender Typen zurück: Boolscher Wert, Zahl, Knotenmenge, String.

Beispiele für Funktionen:last() count()position()name()string()starts-with()contains(), substring()subsstring-before(), substring-after()string-length()not()

Page 29: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XPath: Mathematische Operatoren

In XPath-Ausdrücken kann auch gerechnet werden:+ Addition - Subtraktion gruss[last()-1] => vorletzter Knoten* Multiplikationdiv Division 6,5 div 3 => 2mod Restbildung 6,5 mod 1,5 => 0,5

starts-with()

contains(), substring()

subsstring-before(), substring-after()

string-length()

not()

Page 30: XLST XSLT Voraussetzungen, trivial XSLT-Prozessor: wir verwenden XALAN für die Erarbeitung. XALAN kann über den NAL lokal am PC installiert werden. XALAN

XLST

XSLT: Verzweigungselemente

IF-Element <xsl:if test = "count(//wer) = 5">

[...]

</xsl:if>

CHOOSE-Element<xsl:choose>

<xsl:when test = [Bedingung]> [...Ausgabe...]

</xsl:when> [...weitere Bedingungen...]

<xsl:otherwise>[...]

</xsl:otherwise>

</xsl:choose>