|
|
f::liste ausführlich adressiert das aktuelle Element, jedoch nur dann, wenn es vom Typ liste ist.
child::listeneintrag[position() = 3] ausführlich adressiert das 3. Kindelement vom Typ listeneintrag mit Hilfe der XPath-Funktion position().
listeneintrag[3] verkürzt adressiert das 3. Kindelement vom Typ listeneintrag.
child::listeneintrag[position() = last()] ausführlich adressiert das letzte Kindelement vom Typ listeneintrag mit Hilfe der XPath-Funktion last().
listeneintrag[last()] verkürzt adressiert das letzte Kindelement vom Typ listeneintrag mit Hilfe der XPath-Funktion last().
listeneintrag[last()-1] verkürzt adressiert das vorletzte Kindelement vom Typ listeneintrag mit Hilfe der XPath-Funktion last().
/buch/kapitel[2]/abschnitt[4]/absatz[17] verkürzt adressiert in einem Buch absolut den 17. Absatz des 4. Abschnitts im 2. Kapitel (entsprechende XML-Elementnamen vorausgesetzt).
child::augen[attribute::farbe='blau'] ausführlich adressiert das Kindelement augen, jedoch nur dann, wenn es ein Attribut farbe mit dem Wert blau hat.
augen[@farbe='blau'] verkürzt adressiert das Kindelement augen, jedoch nur dann, wenn es ein Attribut farbe mit dem Wert blau hat.
child::augen[attribute::farbe and attribute::sehstaerke] ausführlich adressiert das Kindelement augen, jedoch nur dann, wenn es sowohl ein Attribut farbe als auch ein Attribut sehstaerke hat (egal mit welchen zugewiesenen Werten).
augen[@farbe and @sehstaerke] verkürzt adressiert das Kindelement augen, jedoch nur dann, wenn es sowohl ein Attribut farbe als auch ein Attribut sehstaerke hat (egal mit welchen zugewiesenen Werten).
/child::*[self::inhaltsverzeichnis or self::stichwortverzeichnis] ausführlich adressiert in einem Buch absolut alle Kindelemente unterhalb der Wurzel, jedoch nur solche, die als Elementnamen inhaltsverzeichnis oder stichwortverzeichnis haben.
. verkürzt adressiert den aktuellen Knoten.
.. verkürzt adressiert den Elternknoten des aktuellen Knotens.
kapitel//absatz verkürzt adressiert alle Elemente vom Typ absatz, die aus Sicht eines aktuellen Knotens unterhalb von Elementen vom Typ kapitel liegen. Die Syntax // wird auch als recursive descent operator bezeichnet. //X bezeichnet das gleiche wie /descendant-or-self::node()/X.
buch//kapitel[position() < 5] verkürzt adressiert die ersten vier Kindelemente des Typs kapitel innerhalb eines Elements vom Typ buch.
XPath-Operatoren
XPath bietet eine Reihe von Operatoren an, die es erlauben, Werte zu vergleichen, Berechnungen durchzuführen, oder Ausdrücke zu bewerten. Solche Operatoren können in Attributen bestimmter XSLT-Elemente vorkommen. Dort helfen sie, Bedingungen zu formulieren, Elementpositionen zu berechnen und anderes mehr. XPath kennt folgende Operatoren:Operator Bedeutung
+ Addition
- Subtraktion
* Multiplikation - jedoch nur, wenn vor dem Operator keines der folgenden Zeichen bzw. keine der folgenden Zeichenfolgen steht: @ :: ( [ ) ,
= gleich (Vergleich zweier Werte)
!= ungleich (Vergleich zweier Werte)
< bzw. < kleiner als (Vergleich zweier Werte). Maskierung innerhalb von XSLT erforderlich.
> bzw. > größer als (Vergleich zweier Werte). Maskierung innerhalb von XSLT zu empfehlen.
<= bzw. <= kleiner als oder gleich (Vergleich zweier Werte). Maskierung innerhalb von XSLT erforderlich.
>= bzw. >= größer als oder gleich (Vergleich zweier Werte). Maskierung innerhalb von XSLT zu empfehlen.
and logische Und-Verknüpfung (beide Ausdrücke)
or logische Oder-Verknüpfung (einer von beiden Ausdrücken)
div Fließkommateilung
mod Rest der Fließkommateilung
XPath-Funktionen
XSLT-Elemente
SELFHTML/Navigationshilfen XML/DTDs Darstellung von XML-Daten
SELFHTML/Navigationshilfen XML/DTDs Darstellung von XML-Daten
XPath-Syntax
Die Aufgaben von XPath
Knotentypen, Achsen und Pfade
Ausführliche und verkürzte Notation
Adressierung der Dokumentwurzel
Adressierung mit absoluten Pfadangaben
Adressierung mit relativen Pfadangaben
Adressierung von Attributen
Adressierung mit Wildcards
Adressierung mit Positionsangaben und Bedingungen
XPath-Operatoren
Die Aufgaben von XPath
XPath ist ebenso wie XML, XSL und XSLT ein Sprachprojekt des W3-Konsortiums. Für XPath gibt es eine eigene Arbeitsgruppe, die an der Spezifikation der XPath-Sprache arbeitet. Im November 1999 ist dabei die Version 1.0 der Empfehlung (Recommendation) für XPath herausgekommen. Die jeweils aktuelle Spezifikation und die Fortentwicklung der XPath-Sprache können Sie über die W3C-Einstiegsseite zu XPath mitverfolgen.
XPath ist jedoch lediglich eine Art Hilfssprache, die erforderlich ist, damit XSLT seine Aufgaben wahrnehmen kann. XPath hat dabei drei wichtige Aufgaben:
Adressierung von Daten
Definition logischer Ausdrücke
Zusätzliche Funktionen
Adressierung von Daten
Beim Übersetzen einer XML-Dokumentstruktur in eine andere XML-Dokumentstruktur, also etwa beim Übersetzen eines Dokuments mit eigener XML-DTD in ein HTML-Dokument, ist es wichtig, jeden Bestandteil der Datenstruktur genau ansprechen zu können. Wenn Sie im (XML-)Ausgangsbaum beispielsweise stehen haben: Augenfarbe graublau , dann müssen Sie auf das Attribut farbe des Elements augen zugreifen. Angenommen weiter, das Element augen ist sowohl ein Kindelement eines Elements namens person, als auch ein Kindelement eines Elements namens phantombilddaten in einem anderen Zweig des gleichen XML-Dokuments, können Sie erahnen, dass für die eindeutige Adressierung von Dokumentbestandteilen eine brauchbare Adressierungs-Syntax benötigt wird. Typische Fälle, in denen die XPath-Adressierung zum Einsatz kommt, sind z.B. das select-Attribut der xsl:value-of-Anweisung oder das match-Attribut der xsl:template-Anweisung.
Das Adressieren von Daten mit XPath wird auf dieser Seite weiter unten beschrieben.
Definition logischer Ausdrücke
Damit sind logische Ausdrücke gemeint, die vom XSLT-Prozessor mit verarbeitet werden, und die zur Funktionalität bestimmter XSLT-Elemente wichtig sind. Logische Ausdrücke enthalten Operatoren und können damit z.B. zwei Werte vergleichen. Ähnlich wie die Adressierung von Daten kommt die Definition von Ausdrücken in bestimmten Wertzuweisungen an Attribute von XSLT-Elementen vor. Ein typisches Beispiel ist das test-Attribut der xsl:if-Anweisung. Darin wird eine Bedingung formuliert, die wahr oder falsch sein kann. Nur wenn sie wahr ist, werden untergeordnete Anweisungen ausgeführt. Eine Bedingung wie test="alter >= 18" (hat das Element alter einen Wert größer gleich 18?) ist so ein typischer logischer Ausdruck. Die Syntax dabei basiert auf XPath.
Die Definition von logischen Ausdrücken mit XPath wird auf dieser Seite im Abschnitt XPath-Operatoren beschrieben.
Zusätzliche Funktionen
Seinen großen Leistungsumfang erhält XSLT nicht zuletzt durch ein Arsenal an zusätzlichen Funktionen, die bestimmte Aufgaben wahrnehmen. So gibt es z.B. eine Funktion position(), die beim Abarbeiten mehrerer Elemente in einer Reihe zurückliefert, das wievielte Element gerade bearbeitet wird. Diese Information lässt sich beispielsweise dazu nutzen, um die Elemente im Ergebnisbaum zu nummerieren. Eine andere typische Funktion namens starts-with() überprüft, ob eine Zeichenkette mit einer bestimmten Teilzeichenkette beginnt. Wenn diese Funktion etwa als Bedingung in einer xsl:if-Anweisung notiert wird, lässt sich das Erzeugen des Ergebnisbaums von der Abfrage beeinflussen, ob der Wert eines Elements mit einem bestimmten Zeichen oder einer bestimmten Zeichenfolge beginnt. So könnte eine Bedingung wie test="starts-with(plz,'8')" zum Beispiel abfragen, ob der Wert einer Postleitzahl mit 8 beginnt, und nur Elemente in den Ergebnisbaum übernehmen, bei denen dies der Fall ist.
Die zusätzlichen Funktionen werden auf der Seite XPath-Funktionen beschrieben.
Knotentypen, Achsen und Pfade
XML-gerechte Dokumente sind wie die Verzeichnis- und Dateistruktur auf einem Datenträger aufgebaut. Dort gibt es ein Wurzelverzeichnis, das Verzeichnisse (Ordner) und Dateien enthalten kann. Jedes untergeordnete Verzeichnis kann wiederum andere Unterverzeichnisse und Dateien enthalten usw. Man spricht dabei auch von Baumstruktur. Auf der Seite Baumstruktur und Knoten einer XML-Datei wird dieses Modell einführend beschrieben.
Ebenso, wie man bei der Dateistruktur auf einem Datenträger von Verzeichnissen oder Ordnern, Dateien und Pfadangaben für Dateien spricht, braucht man für die Adressierung von Bestandteilen eines XML-Dokuments eine geeignete Terminologie. Zu diesem Zweck gibt es in XPath verschiedene Knotentypen, Achsen und Pfade. Die Begriffe, die dabei auftauchen, werden im folgenden vorgestellt. Die Begriffe muten zunächst etwas akademisch an, aber zum Verständnis von XPath sind sie wichtig. Entscheidend sind die englischen Originalbegriffe (kursiv geschrieben).
Knotentypen
Jeder Bestandteil der Baumstruktur einer XML-Datei wird als Knoten bezeichnet. Da es in XML jedoch durchaus namhaft zu machende Bestandteile wie Elemente, Attribute usw. gibt, wird von entsprechenden Knotenypen gesprochen. Die Knotentypen sind nicht unmittelbar Bestandteil der Adressierungs-Syntax von XPath, doch es ist sinnvoll, die Begriffe zu kennen. XPath unterscheidet 7 Knotentypen:Knotentyp Bedeutung
Wurzelknoten
(root node) Dies ist die Wurzel eines XML-Dokuments. Der Wurzelknoten ist selbst kein Element, sondern nur die abstrakte Ursprungswurzel der Baumstruktur des Dokuments.
Elementknoten
(element node) Jedes Element (auch das Dokument-Element) stellt aus XPath-Sicht einen Elementknoten dar. Ein Element namens a, bestehend aus dem Anfangs- und End-Tag ..., ist beispielsweise ein element node. Untergeordnete Elemente (auch als Kindelemente bezeichnet) sind ebenfalls element nodes, also beispielsweise ein Element namens b, bestehend aus dem Anfangs- und End-Tag ..., das innerhalb von ... vorkommen kann.
Attributknoten
(attribute node) Jedes Attribut, das zu einem Element gehört, wird als Attributknoten bezeichnet. Ein Attribut b="irgendwas", das im Anfangs-Tag eines Elements a vorkommt und dann also in der Form notiert wird, gilt als attribute node des Elements a. Der Attributknoten besteht also aus dem Attributnamen und dem zugewiesenen Wert.
Textknoten
(text node) Jeder Zeicheninhalt, der keine anderen Knoten mehr enthält, wird als Textknoten bezeichnet. In einer Notation wie und ein kleiner Text ist der Inhalt des Elements ein text node.
Namensraumknoten
(namespace node) Sowohl Elemente als auch Attribute können Namensraumangaben enthalten, wenn entsprechende Namensräume in eine XML-Datei importiert werden. Ähnlich wie Attributknoten einem Elementknoten zugeordnet sind, sind Namensraumknoten einem Elementknoten oder einem Attributknoten zugeordnet. Bei einer Notation wie
Verarbeitungsanweisungsknoten
(processing instruction node) Verarbeitungsanweisungen, die in einem XML-Dokument vorkommen (sie beginnen mit und enden mit ?>), stehen außerhalb des eigentlichen Dokumentbaums. Sie stellen aus XPath-Sicht einen eigenen Knotentyp dar, wobei das Ziel der Verarbeitungsanweisung den Namen des Knoten und der Rest den Inhalt des Knotens bildet. In einer Verarbeitungsanweisung wie ist der Teil xml-stylesheet der Name des Knotens.
Die XML-Deklaration , die zu Beginn einer XML-Datei notiert werden sollte, ist allerdings keine Verarbeitungsanweisung in diesem Sinne, auch wenn sie syntaktisch genau so aussieht.
Kommentarknoten
(comment node) Kommentare, also Inhalte, die in die Zeichenfolgen eingeschlossen sind, werden als Kommentarknoten bezeichnet. Der Kommentarknoten ist dabei der Inhalt des Kommentars. Bei einem Kommentar wie ist die Zeichenfolge irgendwas der comment node.
Achsen
Die Baumstruktur eines XML-Dokuments ergibt für die einzelnen Knoten, dass diese verschiedene Beziehungen untereinander haben. So gibt es Knoten, die von anderen Knoten abhängen, und solche, die auf einer gemeinsamen Ebene liegen. Dafür hält XPath verschiedene Begriffe bereit, die aus der Verwandtschaftsterminologie stammen und als Achsen (axes) bezeichnet werden. Die englischen Begriffe (in der folgenden Tabelle kursiv dargestellt) werden auch bei der ausführlichen Adressierung verwendet. XPath unterscheidet 13 Achsen:Achse Bedeutung Visualisierung
Kind
(child) Unmittelbar untergeordnete Knoten. In einer Struktur wie ... ist das Element b aus Sicht des Elements a ein child. siehe grafische Darstellung
Elternknoten
(parent) Der unmittelbar übergeordnete Knoten. In einer Struktur wie ... ist das Element a aus Sicht des Elements b ein parent. siehe grafische Darstellung
Nachkommen
(descendant) Untergeordnete Knoten, auch solche, die weiter als unmittelbar untergeordnet sind. In einer Struktur wie
Vorfahr
(ancestor) Übergeordnete Knoten, auch solche, die weiter als unmittelbar übergeordnet sind. In einer Struktur wie
Nachfolgende Knoten
(following) Knoten, die nach dem aktuellen Knoten im restlichen XML-Dokument folgen, unabhängig von der Hierarchie der Knoten (ausgeschlossen Nachkommen-Knoten des aktuellen Knotens). In einer Struktur wie
Vorherige Knoten
(preceding) Knoten, die vor dem aktuellen Knoten im XML-Dokument stehen, unabhängig von der Hierarchie der Knoten (ausgeschlossen Vorfahr-Knoten des aktuellen Knotens). In einer Struktur wie
Nachfolgende Geschwisterknoten
(following-sibling) Knoten, die nach dem aktuellen Knoten im restlichen XML-Dokument folgen, und zwar auf der gleichen Hierarchie-Ebene. In einer Struktur wie
Vorherige Geschwisterknoten
(preceding-sibling) Knoten, die vor dem aktuellen Knoten im XML-Dokument stehen, und zwar auf der gleichen Hierarchie-Ebene. In einer Struktur wie
Attribut
(attribute) Attributknoten eines Elements. Attribute erhalten damit, obwohl auch sie ihren Platz in der Hierarchie einer XML-Dokumentstruktur haben, eine Sonderstellung und werden nicht in das Schema der Begriffe child, parent, descendant und ancestor eingefügt. In einer Struktur wie ist b aus Sicht von a ein attribute.
Namensraum
(namespace) Zugehöriger Namensraumknoten des aktuellen Elements. In einer Struktur wie
Der aktuelle Knoten selbst
(self) Der aktuelle Knoten. Wenn in einer Struktur wie
Nachkommen oder der aktuelle Knoten selbst
(descendant-or-self) Der aktuelle Knoten oder Nachkommen davon. Wenn in einer Struktur wie
Vorfahre oder der aktuelle Knoten selbst
(ancestor-or-self) Der aktuelle Knoten oder Vorfahren davon. Wenn in einer Struktur wie
Pfade
XPath stellt zwei syntaktische Mittel bereit, um den Pfad zu einem oder mehreren Knoten zu notieren:Notation Beschreibung Bedeutung
/ einfacher Schrägstrich Pfad-Trennzeichen für tatsächliche Namen von Knoten. In einer Struktur wie
:: doppelter Doppelpunkt Pfad-Trennzeichen für Knotenangaben mit Achsen. In einer Struktur wie
Ausführliche und verkürzte Notation
Beim Adressieren von Knoten einer XML-Datenstruktur gibt es Ausdrücke wie /child::person/child::augen/attribute::farbe. Solche Ausdrücke werden als ausführliche Notation bezeichnet, weil sie die vollen Achsenbezeichnungen enthalten. Der Ausdruck /child::person/child::augen/attribute::farbe kann jedoch ebensogut in der Form /person/augen/@farbe notiert werden. Dies ist die verkürzte Notation, die auf die Achsenbezeichnung child:: verzichtet und einige andere Einsparungen erlaubt. In den Beispielen weiter unten werden die beiden Notationsvarianten jeweils parallel gezeigt.
Adressierung der Dokumentwurzel
Jedes XML-Dokument hat eine Wurzel, die auch adressierbar ist.
Beispiel:
Erläuterung:
Der Wurzelknoten eines XML-Dokuments wird mit einem einzelnen Schrägstrich (/) adressiert. Im Beispiel wird mit xsl:template ein Template für die XML-Dokumentwurzel definiert. Im match-Attribut wird die Dokumentwurzel adressiert.
Adressierung mit absoluten Pfadangaben
Knoten eines XML-Dokuments sind mit Hilfe einer absoluten Pfadangabe adressierbar.
Beispiel 1 (ausführliche Notation):
Beispiel 2 (verkürzte Notation):
Erläuterung:
Absolute Pfadangaben beginnen mit einem Schrägstrich (/), der die Dokumentwurzel repräsentiert. Weitere Hierarchie-Ebenen werden durch weitere Schrägstriche markiert. Die Knoten, über die der Pfad läuft, werden wie in Beispiel 1 gezeigt durch ihre Achse und den gewünschten Knotennamen bezeichnet, getrennt durch doppelten Doppelpunkt (::). Ebenfalls erlaubt und häufiger verwendet ist allerdings die in Beispiel 2 gezeigte verkürzte Notation ohne Achsenbezeichnungen. Im Beispiel wird mit der xsl:template-Anweisung ein Template für ein Element namens vorname definiert, das ein Kindelement des Elements adresse ist, das wiederum ein Kindelement der Dokumentwurzel ist. Auch im select-Attribut der xsl:value-of-Anweisung wird die Syntax verwendet.
Adressierung mit relativen Pfadangaben
Knoten eines XML-Dokuments sind mit Hilfe einer relativen Pfadangabe adressierbar.
Angenommene XML-Struktur:
Beispiel 1 (ausführliche Notation):
Beispiel 2 (verkürzte Notation):
Erläuterung:
Das Beispiel nimmt eine typische verschachtelte Elementstruktur an. Es nimmt an, dass es für das Element liga eine Template-Definition gibt, in der mit der xsl:apply-templates-Anweisung untergeordnete Templates aufgerufen werden. Weiterhin nimmt das Beispiel an, dass für das Element liga-eintrag keine Template-Definition exisitert, erst wieder für dessen Kindelement ergebnis. Um dieses Element aus Sicht des Großvaterelements liga zu adressieren, ist eine relative Pfadangabe im match-Attribut der xsl:template-Anweisung nötig. In der ausführlichen Notation lautet diese Pfadangabe ./child::liga-eintrag/child::ergebnis, in der verkürzten, leichter lesbaren Notation liga-eintrag/ergebnis. Die Zeichenfolge ./ (Punkt und Schrägstrich) steht für "aktueller Standpunkt". Diese Zeichenfolge kann auch weggelassen werden. Ansonsten besteht die relative Pfadangabe einfach aus der Folge der hierarchie-bestimmenden Knotennamen. Bei der ausführlichen Notation wird dabei stets noch die Achsenbezeichnung child:: benutzt, während bei der verkürzten Notation die bloßen Knotennamen (im Beispiel die Elementnamen liga-eintrag und ergebnis) genügen. Trennzeichen für Hierarchie-Ebenen ist der einfache Schrägstrich (/).
Innerhalb der Template-Definition für das Element ergebnis wird unter anderem HTML-Code für ein anderes Element der Ausgangsdaten, nämlich für das Element spieler notiert. Dieses Element liegt jedoch auf der gleichen Hierarchie-Ebene wie das aktuelle Element ergebnis (Geschwisterknoten). Um es aus Sicht von ergebnis anzusprechen, muss es über den Umweg des gemeinsamen Elternelements adressiert werden. In der ausführlichen Notation steht dafür die Achsenbezeichnung parent:: zur Verfügung, gefolgt vom Namen des anderen Kindknotens. In der verkürzten Notation genügt die Angabe von zwei Punkten, gefolgt von einem Schrägstrich (../), um den Weg über das Elternelement zu beschreiben.
Für die HTML-Ausgabe des Elements punktzahl wird ebenfalls eine relative Adressierung verwendet. Da das Element punktzahl aus Sicht des aktuellen Elements ergebnis einfach ein Kindelement ist, genügen die Angaben ./child::punktzahl (ausführliche Notation) bzw. punktzahl (verkürzte Notation) zur Adressierung.
Adressierung von Attributen
Attribute von Elementen werden in XPath als Attributknoten behandelt und entsprechend adressiert.
Beispiel 1 (ausführliche Notation):
Beispiel 2 (verkürzte Notation):
Erläuterung:
Das Beispiel nimmt an, dass es eine XML-Notation
Adressierung mit Wildcards
Die Adressierung mit Wildcards erlaubt es, mehrere Knoten auf einmal auszuwählen.
Angenommene XML-Struktur:
Beispiel 1 (ausführliche Notation):
Beispiel 2 (verkürzte Notation):
Erläuterung:
Das Beispiel nimmt an, dass mit Hilfe von XML-Elementen der Aufbau einer Binärdatei (im Beispiel: GIF-Format) beschrieben wird. In der Ausgabe sollen die Inhalte aller Kindelemente von dateicode einfach in einem Rutsch geschrieben werden. In der Template-Definition zu dateicode wird dies im select-Attribut der xsl:value-of-Anweisung durch Angabe des Wildcard-Zeichens * (Sternzeichen) erreicht. In der ausführlichen Notation ist die Achsenbezeichnung child:: angegeben, in der verkürzten Notation kann diese entfallen.
Beachten Sie:
Das Wildcard-Zeichen * (Sternzeichen) wählt nur auf der nächstunteren Hierarchie-Ebene aus. Eine verschärfte Form ist die Zeichenfolge // (zwei Schrägstriche). Damit wird auf allen untergeordneten Hierarchie-Ebenen ausgewählt, egal, wie tief sich der Baum noch verzweigt.
Adressierung mit Positionsangabe und Bedingungen
Durch absolute und relative Adressierung ist noch nicht jedes beliebige Element ansprechbar. Angenommen, ein Element namens liste hat 25 Kindelemente namens listeneintrag, dann greift eine Adressierung wie liste/listeneintrag nur auf das erste dieser Elemente zu. Solche Probleme lassen sich zwar auch durch xsl:for-each-Schleifen in den Griff bekommen, doch manchmal wird man auch nur ein bestimmtes der Kindelemente ansprechen wollen, und nicht alle der Reihe nach. Die folgenden Beispiele zeigen Adressierungen mit Positionsangaben und Bedingungen, um bestimmte einzelne Elemente zu adressieren. Dabei kommen zum Teil auch XPath-Funktionen zum Einsatz.
Syntax-Bestandteile in eckigen Klammern ([]) gehören ebenfalls zum Inventar der Adressierung mit Positionsangaben und Bedingungen. Solche Bestandteile werden als Prädikate bezeichnet. Viele der folgenden Beispiele verwenden solche Prädikate.Beispiel Notation Erläuterung
self::liste ausführlich adressiert das aktuelle Element, jedoch nur dann, wenn es vom Typ liste ist.
child::listeneintrag[position() = 3] ausführlich adressiert das 3. Kindelement vom Typ listeneintrag mit Hilfe der XPath-Funktion position().
listeneintrag[3] verkürzt adressiert das 3. Kindelement vom Typ listeneintrag.
child::listeneintrag[position() = last()] ausführlich adressiert das letzte Kindelement vom Typ listeneintrag mit Hilfe der XPath-Funktion last().
listeneintrag[last()] verkürzt adressiert das letzte Kindelement vom Typ listeneintrag mit Hilfe der XPath-Funktion last().
listeneintrag[last()-1] verkürzt adressiert das vorletzte Kindelement vom Typ listeneintrag mit Hilfe der XPath-Funktion last().
/buch/kapitel[2]/abschnitt[4]/absatz[17] verkürzt adressiert in einem Buch absolut den 17. Absatz des 4. Abschnitts im 2. Kapitel (entsprechende XML-Elementnamen vorausgesetzt).
child::augen[attribute::farbe='blau'] ausführlich adressiert das Kindelement augen, jedoch nur dann, wenn es ein Attribut farbe mit dem Wert blau hat.
augen[@farbe='blau'] verkürzt adressiert das Kindelement augen, jedoch nur dann, wenn es ein Attribut farbe mit dem Wert blau hat.
child::augen[attribute::farbe and attribute::sehstaerke] ausführlich adressiert das Kindelement augen, jedoch nur dann, wenn es sowohl ein Attribut farbe als auch ein Attribut sehstaerke hat (egal mit welchen zugewiesenen Werten).
augen[@farbe and @sehstaerke] verkürzt adressiert das Kindelement augen, jedoch nur dann, wenn es sowohl ein Attribut farbe als auch ein Attribut sehstaerke hat (egal mit welchen zugewiesenen Werten).
/child::*[self::inhaltsverzeichnis or self::stichwortverzeichnis] ausführlich adressiert in einem Buch absolut alle Kindelemente unterhalb der Wurzel, jedoch nur solche, die als Elementnamen inhaltsverzeichnis oder stichwortverzeichnis haben.
. verkürzt adressiert den aktuellen Knoten.
.. verkürzt adressiert den Elternknoten des aktuellen Knotens.
kapitel//absatz verkürzt adressiert alle Elemente vom Typ absatz, die aus Sicht eines aktuellen Knotens unterhalb von Elementen vom Typ kapitel liegen. Die Syntax // wird auch als recursive descent operator bezeichnet. //X bezeichnet das gleiche wie /descendant-or-self::node()/X.
buch//kapitel[position() < 5] verkürzt adressiert die ersten vier Kindelemente des Typs kapitel innerhalb eines Elements vom Typ buch.
XPath-Operatoren
XPath bietet eine Reihe von Operatoren an, die es erlauben, Werte zu vergleichen, Berechnungen durchzuführen, oder Ausdrücke zu bewerten. Solche Operatoren können in Attributen bestimmter XSLT-Elemente vorkommen. Dort helfen sie, Bedingungen zu formulieren, Elementpositionen zu berechnen und anderes mehr. XPath kennt folgende Operatoren:Operator Bedeutung
+ Addition
- Subtraktion
* Multiplikation - jedoch nur, wenn vor dem Operator keines der folgenden Zeichen bzw. keine der folgenden Zeichenfolgen steht: @ :: ( [ ) ,
= gleich (Vergleich zweier Werte)
!= ungleich (Vergleich zweier Werte)
< bzw. < kleiner als (Vergleich zweier Werte). Maskierung innerhalb von XSLT erforderlich.
> bzw. > größer als (Vergleich zweier Werte). Maskierung innerhalb von XSLT zu empfehlen.
<= bzw. <= kleiner als oder gleich (Vergleich zweier Werte). Maskierung innerhalb von XSLT erforderlich.
>= bzw. >= größer als oder gleich (Vergleich zweier Werte). Maskierung innerhalb von XSLT zu empfehlen.
and logische Und-Verknüpfung (beide Ausdrücke)
or logische Oder-Verknüpfung (einer von beiden Ausdrücken)
div Fließkommateilung
mod Rest der Fließkommateilung
XPath-Funktionen
XSLT-Elemente
SELFHTML/Navigationshilfen XML/DTDs Darstellung von XML-Daten
© 2007 Impressum
SELFHTML/Navigationshilfen XML/DTDs Darstellung von XML-Daten
Hat folgende Attribute:select (obligatorisch) Knoten-Set bzw. Pfad nach XPath-Syntax, für das die Schleife gelten soll.
Kann innerhalb von xsl:template vorkommen.
Beispieldatei for_each.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei for_each.htm)
Anzeigebeispiel: So sieht's aus (Datei for_each.xml - XML/XSLT-fähiger Browser erforderlich)
Beispieldatei for_each.xsl:
Klasse
Erläuterung:
In den XML-Daten des Beispiels werden Schulklassen und ihre Schülernamen notiert. Im Beispiel-Stylesheet wird in dem Template für das Element klasse, das aus beliebig vielen Elementen schueler bestehen kann, mit xsl:for-each eine Schleife erzeugt. Darin wird im Ergebnisbaum der Reihe nach der Inhalt (xsl:value-of) jedes Elements schueler sowie ein Zeilenumbruch erzeugt.
xsl:if (Wenn-Bedingung)
Macht die Ausführung einer Anweisung von einer Bedingung abhängig.
Hat folgende Attribute:test (obligatorisch) formuliert die Bedingung.
Kann innerhalb von xsl:template vorkommen.
Beispieldatei if.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei if.htm)
Anzeigebeispiel: So sieht's aus (Datei if.xml - XML/XSLT-fähiger Browser erforderlich)
Beispieldatei if.xsl:
Erläuterung:
Die XML-Daten im Beispiel enthalten Spielergebnisse, und zwar mit Spielernamen und erreichten Punkten. Im Beispiel-Stylesheet wird daraus eine HTML-Tabelle erzeugt. Es sollen jedoch nur Spieler in der Tabelle erscheinen, die 200 Punkte oder mehr erreicht haben. Dazu wird in dem Template, das die HTML-Ausgabe des XML-Elements ergebnis steuert, mit der Anweisung
Welche Möglichkeiten es für die Formulierung von Bedingungen bei xsl:if gibt, wird im Abschnitt XPath-Operatoren beschrieben.
xsl:include (Stylesheets inkludieren)
XSLT bietet zwei Möglichkeiten um Stylesheets miteinander zu kombinieren. Die erste ist ein Inklusionsmechanismus, der es erlaubt Stylesheets zu kombinieren, wobei die Semantik der kombinierten Stylesheets nicht verändert wird. Die andere Möglichkeit ist ein Importmechanismus, der es Stylesheets erlaubt einander zu überschreiben.
Ein Stylesheet kann andere Stylesheets durch die Benutzung des xsl:include-Elements inkludieren. Das xsl:include-Element ist nur als Element der obersten Ebene erlaubt. Das bedeutet, es kann nur innerhalb von xsl:stylesheet vorkommen und muss außerhalb von xsl:template notiert sein.
Hat folgende Attribute:href (obligatorisch) gibt den URI der zu inkludierenden Datei an.
Beispieldatei include.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei include.htm)
Anzeigebeispiel: So sieht's aus (Datei include.xml - XML/XSLT-fähiger Browser erforderlich)
Beispieldatei include1.xsl:
Beispieldatei include2.xsl:
Erläuterung:
Die durch den Wert des href-Attributs angegebene XSL-Datei wird als XML-Dokument analysiert und die Kinder des xsl:stylesheet-Elements in diesem Dokument ersetzen das xsl:include-Element im inkludierenden Dokument. Dass Template-Regel und andere Definitionen inkludiert sind, beeinflusst nicht die Art, wie sie verarbeitet werden.
Beachten Sie:
Ein Stylesheet darf weder direkt noch indirekt sich selbst inkludieren. So würde ein
xsl:import (Stylesheets importieren)
Importiert Template-Definitionen aus anderen Stylesheet-Dateien, die dann mit xsl:apply-imports an einer gewünschten Stelle angewendet werden können.
Hat folgende Attribute:href (obligatorisch) gibt den URI der zu importierenden Datei an.
Kann innerhalb von xsl:stylesheet vorkommen und muss außerhalb von xsl:template notiert sein.
Beispiel siehe xsl:apply-imports.
Beachten Sie:
Im Konfliktfall haben Stylesheet-Definitionen, die in der aktuellen Stylesheet-Datei definiert werden, Vorrang vor importierten Definitionen.
xsl:key (Schlüssel für Auswahl von Elementen)
Definiert einen Zugriffsschlüssel auf Elemente oder Attribute. Dadurch wird dem XSLT-Prozessor die Arbeit erleichtert, was die Verarbeitungsgeschwindigkeit erhöhen kann. Über die Funktion key() kann der Zugriffsschlüssel angewendet werden.
Hat folgende Attribute:name (obligatorisch) legt einen Namen für den Schlüssel fest, unter dem er angewendet werden kann.
use (obligatorisch) gibt an, auf was der Schlüssel zugreifen soll.
match (optional) gibt das Knoten-Set bzw. einen Pfad nach XPath-Syntax an, an dem der Schlüssel im Elementenbaum ansetzen soll.
Kann innerhalb von xsl:stylesheet vorkommen und muss außerhalb von xsl:template notiert sein.
Beispieldatei key.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei key.htm)
Anzeigebeispiel: So sieht's aus (Datei key.xml - XML/XSLT-fähiger Browser erforderlich)
Beispieldatei key.xsl:
Erläuterung:
Die XML-Daten stellen den Inhalt einer Konfigurationsdatei dar. Jeder Konfigurationseintrag, repräsentiert im Element konfig, enthält die Daten in Form von Attributen. Neben den für Konfigurationseinträge typischen Daten name und wert gibt es auch ein Attribut typ, in dem die Werte user und expert zulässig sind. Diese Information könnte beispielsweise helfen, wenn bei der Anzeige der Konfigurationsdaten einem Bearbeiter, der als user angemeldet ist, die Daten des Experten-Modus vorenthalten werden sollen. Das Beispiel-Stylesheet realisiert eine solche Beschränkung. Mit
xsl:message (Meldung beim Transformieren ausgeben)
Gibt während der Transformation der Daten eine Meldung aus. Wird üblicherweise zur Fehlerbehandlung innerhalb einer Bedingung benutzt.
Hat folgende Attribute:terminate (optional) gibt mit yes oder no (Voreinstellung) an, ob der Transformationsvorgang abgebrochen werden soll.
Kann innerhalb von xsl:template vorkommen.
Beispieldatei message.xml:
Anzeigebeispiel: So sieht's aus (Datei message.xml - XML/XSLT-fähiger Browser meldet Message-Fehler)
Beispieldatei message.xsl:
Erläuterung:
Im Beispiel sind Lottozahlen notiert. Das Beispiel-Stylesheet formuliert innerhalb der Template-Definition für das Element lottozahl zunächst mit xsl:variable eine Variable und weist dieser den Inhalt des aktuellen Elements zu. Als nächstes wird mit xsl:if geprüft, ob der Inhalt der Variablen größer als 49 ist. Für diesen Fall (Fehlerfall) wird mit xsl:message eine Fehlermeldung konstruiert, die statt der Zahl die Meldung schreibt, dass die betreffende Zahl zu groß ist.
xsl:namespace-alias (Stylesheet in anderes Stylesheet transformieren)
Erlaubt es, ein XSL-Stylesheet in ein anderes XSL-Stylesheet zu transformieren.
Hat folgende Attribute:stylesheet-prefix (obligatorisch) gibt den Namen des Namensraums an, der im aktuellen Stylesheet verwendet wird. Dieser Name muss im xsl:stylesheet-Element mit dem Attribut xmlns:[Name] vergeben werden.
result-prefix (optional) gibt den Namen des Namensraums an, der im Ergebnis-Stylesheet anstelle des Namens verwendet werden soll, der bei stylesheet-prefix angegeben ist.
Kann innerhalb von xsl:stylesheet vorkommen und muss außerhalb von xsl:template notiert sein.
Beispieldatei namespace_alias.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei namespace_out.htm - über den Umweg von von output.xsl erzeugt)
Anzeigebeispiel: So sieht's aus (Datei namespace_alias.xml)
Beispieldatei namespace_alias.xsl:
Erläuterung:
Im XML-Teil des Beispiels ist einfach ein Hallo-Welt-Gruß notiert. Im zugehörigen Beispiel-Stylesheet steckt die erste Besonderheit bereits im einleitenden xsl:stylesheet-Element. Dort wird zwei mal das Attribut xmlns notiert: einmal zur Deklaration des üblichen Namensraums (xmlns:xsl="http://www.w3.org/1999/XSL/Transform"), und einmal zur Deklaration eines eigenen Namensraums (xmlns:out="output.xsl"). Durch die Anweisung
xsl:number (fortlaufende Nummerierung)
Ermöglicht es, sich wiederholende Elemente im Ergebnisbaum mit fortlaufender Nummerierung zu versehen.
Hat folgende Attribute:count (optional) bestimmt das oder die Knoten-Sets bzw. Pfade nach XPath-Syntax, bei deren Auftreten der Zähler der Nummerierung erhöht werden soll.
format (optional) bestimmt die Art der Nummerierung. Folgende Angaben sind möglich:
1 = Nummerierung der Art 1, 2, 3, 4 ...
01 = Nummerierung der Art 01, 02, 03, 04, ... 10, 11 ...
a = Nummerierung der Art a, b, c, d ...
A = Nummerierung der Art A, B, C, D ...
i = Nummerierung der Art i, ii, iii, iv ...
I = Nummerierung der Art I, III, III, IV ...
Voreinstellung ist 1. Hinter dieser Angabe zur Art der Nummerierung können noch weitere Zeichen folgen, mit denen die Nummerierung formatiert wird. So bewirkt etwa die Angabe 1., dass hinter der jeweils aktuellen Ordnungszahl noch ein Punkt steht.
from (optional) bestimmt das Knoten-Set bzw. einen Pfad nach XPath-Syntax, bei dessen Auftreten die Nummerierung beendet werden soll.
grouping-separator (optional) Trennzeichen für Zifferngruppen bei hohen Zahlen, z.B. Tausender-Trennzeichen. In der deutschen Schreibweise von Zahlen üblicherweise ein Punkt (.).
grouping-size (optional) Anzahl der Ziffern, bei der ein Trennzeichen gesetzt wird. Bei Tausender-Trennzeichen wäre das der Wert 3.
lang (optional) gibt die Sprache (nach RFC 1766) an, nach dessen Sprachkonventionen die Nummerierung erfolgen soll. Anzugeben sind Kürzel der Art de (für deutsch), en (für englisch), fr (für französisch).
letter-value (optional) erlaubte Werte sind alphabetical oder traditional. Eine Angabe, die zusätzlich zu lang für einige Sprachen sinnvoll ist.
level (optional) erlaubte Werte sind single, multiple oder any. Die Angabe bezieht sich darauf, was bei count angegeben wird.
single bedeutet: der Nummerierungs-Algorithmus arbeitet flach auf der aktuellen Ebene des Elementenbaums und kann Nummerierungen der Sorte 1, 2, 3 erzeugen. Passt der aktuelle Knoten auf die Angabe bei count, wird er nummeriert.
multiple bedeutet: der Nummerierungs-Algorithmus arbeitet hierarchisch über die aktuelle und alle übergeordneten Ebenen des Elementenbaums und kann Nummerierungen der Sorte 1.1 oder 1.1.1 erzeugen. Passt der aktuelle Knoten auf die Angabe bei count, wird er nummeriert. Dabei wird für jede übergeordnete Ebene im Elementenbaum ermittelt, ob die Angabe bei count auf einen Knoten zutrifft. Aus diesen Informationen wird die hierarchische Nummerierung erzeugt. Bei multiple sollte bei count die Sequenz derjenigen Knoten angegeben werden, für die die hierarchische Nummerierung gelten soll. Dies ist durch eine Angabe wie z.B. count="kapitelueberschrift|abschnittsueberschrift|unterueberschrift" möglich. Die Elementnamen werden dabei durch Senkrechtstriche (|) voneinander getrennt. Beim Attribut format sollte in diesem Fall so etwas wie z.B. format="1.1" notiert werden.
any bedeutet: der Nummerierungs-Algorithmus arbeitet flach über die aktuelle und alle Ebenen des Elementenbaums und kann Nummerierungen der Sorte 1, 2, 3 erzeugen. Passt der aktuelle Knoten auf die Angabe bei count, wird er nummeriert. Dabei wird für jede übergeordnete Ebene im Elementenbaum ermittelt, ob die Angabe bei count auf einen Knoten zutrifft. Die Nummerierung zählt alle Knoten zusammen.
value (optional) Kalkulationsausdruck, der die Nummerierung bestimmt. Eine mögliche Angabe ist z.B. value="position()".
Kann innerhalb von xsl:template vorkommen.
Beispieldatei number.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei number.htm)
Anzeigebeispiel: So sieht's aus (Datei number.xml - XML/XSLT-fähiger Browser erforderlich)
http://aktuell.de.selfhtml.org/
http://alpentouren.at/
http://fr.selfhtml.org/
Beispieldatei number.xsl:
Erläuterung:
Die XML-Daten im Beispiel enthalten eine Reihe von Links, die bei der HTML-Ausgabe durchnummeriert werden sollen. Das Beispiel-Stylesheet wendet zu diesem Zweck innerhalb der Template-Definition für das link-Element zu Beginn des zu erzeugenden HTML-Codes die xsl:number-Anweisung an. Es soll eine einfache Nummerierung durchgeführt werden (level="single"). Die Nummerierung soll bei jedem Auftreten des link-Elements fortgesetzt werden (count="link"). Die Nummerierung soll in der Form 1. ..., 2. ..., 3. ... erscheinen (format="1. ").
Anschließend wird innerhalb der Template-Definition ein HTML-Link erzeugt, der den Inhalt des jeweiligen link-Elements in eine im Browser anklickbare Form bringt.
xsl:otherwise (Andernfalls-Anweisung)
Bestimmt, was getan werden soll, wenn eine oder mehrere xsl:when-Bedingungen nicht zutreffen.
Hat keine Attribute.
Kann innerhalb von xsl:choose vorkommen. Beispiel siehe dort.
xsl:output (Erzeugen des Ergebnisbaums kontrollieren)
Gibt an, wie der Ergebnisbaum ausgegeben bzw. geschrieben werden soll.
Hat folgende Attribute:cdata-section-elements (optional) bei method="xml": bestimmt Elemente, deren Inhalt beim Erzeugen des Ergebnisbaums in CDATA-Abschnitte geschrieben werden (vergleiche CDATA-Abschnitte). Es können mehrere Elemente angegeben werden, die durch Leerzeichen zu trennen sind.
doctype-public (optional) bei method="xml" und method="html": wenn sich die Gültigkeitsüberprüfung des Ergebnisbaums auf eine öffentliche DTD-Zuordnung (public identifier) bezieht, erhält dieses Attribut als Wert die Zeichenkette des public identifiers.
doctype-system (optional) bei method="xml" und method="html": wenn sich die Gültigkeitsüberprüfung des Ergebnisbaums auf eine adressierte DTD-Zuordnung (system identifier) bezieht, erhält dieses Attribut als Wert die Zeichenkette des system identifiers.
encoding (optional) bestimmt, mit welcher Kodierung der Ergebnisbaum kodiert wird. Sinnvoll ist eine Angabe nach RFC 2978.
indent (optional) kann die Werte yes oder no haben. Bei yes wird der Ergebnisbaum so formatiert, dass untergeordnete Elemente weiter eingerückt werden. Dies hat keine Auswirkung auf die Darstellung, sondern ist eine "kosmetische" Angabe zur besseren Lesbarkeit des erzeugten Quelltextes. Die Voreinstellung für dieses Attributs ist bei method="html" yes, bei method="xml" no.
media-type (optional) gibt den MIME-Typ des Ergebnisbaums an. Bei method="xml" ist beispielsweise text/xml sinnvoll, bei method="html" beispielsweise text/html und bei method="text" beispielsweise text/plain.
method (optional) gibt an, nach welcher Art der Ergebnisbaum erzeugt werden soll. Mögliche Werte sind xml, html (Voreinstellung), text, oder bestimmte, eigene oder öffentliche XML-Namensräume.
omit-xml-declaration (optional) bestimmt bei method="xml", ob im Ergebnisbaum eine XML-Deklaration () ausgegeben werden soll oder nicht. Mögliche Werte sind yes für nein (omit = weglassen) oder no für ja (nicht weglassen).
standalone (optional) bestimmt bei omit-xml-declaration="no", dass sich die DTD-Deklarationen in der aktuellen Datei befinden (vergleiche Zusätzliche Angaben zur Zeichenkodierung und zum DTD-Bezug)
version (optional) bestimmt bei omit-xml-declaration="no" die XML-Versionsangabe.
Kann innerhalb von xsl:stylesheet vorkommen und muss außerhalb von xsl:template notiert sein.
Beispieldatei output.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei output_en.xml - XML-fähiger Browser erforderlich, der die Datenstruktur anzeigt)
Beispieldatei output.xsl:
Erläuterung:
Die XML-Daten im Beispiel enthalten "Ereignisse", wie sie eine Blitzanlage im Straßenverkehr aufzeichnen könnte. Die Elementnamen sind dabei deutschsprachig. In einer XSL-gesteuerten Transformation sollen diese Daten in eine analoge XML-Datei mit gleichem Elementenbaum-Aufbau gebracht werden, deren Elementnamen jedoch englisch sind. In der xsl:output-Anweisung, die im Beispiel-Stylesheet vor den Template-Definitionen steht, wird dem XSL-Parser mitgeteilt, dass der Ergebnisbaum eine XML-Struktur sein soll (method="xml"). Mit indent="yes" wird die saubere Formatierung des XML-Quelltextes der Ausgabe geregelt, und mit encoding="ISO-8859-1" die Kodierung angegeben. Damit die XML-Ausgabe eine Dokumenttyp-Deklaration und eine Verarbeitungsanweisung erhält, wird mit omit-xml-declaration="yes" die XML-Deklaration veranlasst. In den nachfolgenden Template-Definitionen wird der Datenbaum des Ausgangsdokuments mit den deutschsprachigen Elementnamen in den Ergebnisbaum mit den englischsprachigen Elementnamen übersetzt.
xsl:param (Parameter definieren)
Definiert einen Parameter zur Verwendung mit xsl:with-param.
Hat folgende Attribute:name (obligatorisch) gibt den Namen der Parametervariablen an. Unter diesem Namen kann auf ihren Wert zugegriffen werden.
select (optional) bestimmt einen Default-Wert für die Parametervariable. Wenn dieses Attribut angegeben wird, handelt es sich um einen Parameter, der dazu gedacht ist, von einer Template-Definition an eine andere übergeben zu werden.
Kann innerhalb von xsl:stylesheet vorkommen und kann sowohl außerhalb als auch innerhalb von xsl:template notiert sein. Wenn außerhalb notiert, ist es eine globale Variable, die in allen Template-Definitionen zur Verfügung steht. Wenn innerhalb einer Template-Definition notiert, ist es eine lokale Variable innerhalb des Templates.
Beispiel siehe xsl:with-param.
xsl:preserve-space (Leerraumzeichen beibehalten)
Bestimmt, dass Leerraumzeichen, die zwischen Elementen in der Datei enthalten sind, bei der Ausgabe beibehalten werden. Leerraumzeichen sind die Zeichen mit den Hexadezimalwerten #x20 (einfaches Leerzeichen), #x9 (Tabulator-Zeichen), #xD (Wagenrücklaufzeichen) und #xA (Zeilenvorschub-Zeichen). Es handelt sich nicht um den Textinhalt von Elementen, sondern um die Formatierung der Elemente im Ergebnisbaum.
Hat folgende Attribute:elements (obligatorisch) Namen von einem oder mehreren Elementen der Ausgangsdaten, deren Leerraumzeichen in der Ausgabe beibehalten werden soll. Mehrere Angaben sind durch Leerzeichen zu trennen.
Kann innerhalb von xsl:stylesheet vorkommen und muss außerhalb von xsl:template notiert sein.
Beispieldatei preserve_space.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei preserve_space.htm)
Anzeigebeispiel: So sieht's aus (Datei preserve_space.xml - XML/XSLT-fähiger Browser erforderlich)
Beispieldatei preserve_space.xsl:
Erläuterung:
In den notierten XML-Daten ist zwischen den Elementen innerhalb des Dokument-Elements test Leerraum notiert. Im Beispiel-Stylesheet wird durch die Anweisung
xsl:processing-instruction (Stylesheet-Code generieren)
Erzeugt im Ergebnisbaum eine Verarbeitungsanweisung.
Hat folgende Attribute:name (obligatorisch) bestimmt den Namen der Verarbeitungsanweisung.
Kann innerhalb von xsl:template vorkommen.
Beispieldatei processing_instruction.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei processing.xml - XML/CSS-fähiger Browser erforderlich)
Beispieldatei processing_instruction.xsl:
Beispieldatei processing.css:
text { font-size:21px; color:blue; }
Erläuterung:
Das XSLT-Stylesheet erzeugt eine neue XML-Datei, in die alle Daten der Input-Datei, im Beispiel also von processing_instruction.xml kopiert werden. Dazu dient einerseits die xsl:output-Anweisung, mit der die XML-Deklaration für die neue XML-Datei erzeugt wird, und andererseits das Kopieren der text-Elemente mit Hilfe von xsl:copy-of in den Ergebnisbaum, also die neue XML-Datei. Der Unterschied der neu erzeugten XML-Datei zur alten ist, dass sie eine Verarbeitungsanweisung zum Einbinden eines Stylesheets erhält. Dazu ist zu Beginn der Template-Definition für die Dokumentwurzel / ein xsl:processing-instruction-Element mit Namen xml-stylesheet notiert, das eine externe CSS-Datei einbindet. Das hat zur Folge, dass die XML-Daten direkt mit den Formaten aus der eingebundenen CSS-Datei ausgegeben werden. Im Ergebnisbaum wird die Prozessoranweisung wie folgt umgesetzt:
Die Attribute werden im Beispiel zwischen einleitendem und schließenden Tag von xsl:processing-instruction mit xsl:text notiert.
xsl:sort (Elemente nach Inhalt sortieren)
Sortiert Knoten aus einer Reihenfolge nach ihren Inhalten. So lassen sich beispielsweise alle untergeordneten Elemente listenpunkt eines Elements namens liste bei der Transformation alphabetisch oder numerisch sortieren.
Hat folgende Attribute:case-order (optional) bestimmt, ob in der Sortierung Großbuchstaben vor Kleinbuchstaben kommen oder umgekehrt. Mögliche Werte sind upper-first (Großbuchstaben zuerst) oder lower-first (Kleinbuchstaben zuerst, Voreinstellung bei data-type="text").
data-type (optional) bestimmt, ob die Sortierung alphabetisch (Voreinstellung) oder numerisch erfolgen soll. Bei alphabetischer Sortierung kommt z.B. 9 nach 10, bei numerischer 10 nach 9. Mögliche Werte sind text (alphabetische Sortierung) oder number (numerische Sortierung).
lang (optional) gibt die Sprache (nach RFC 1766) an, nach dessen Sprachkonventionen die Sortierung erfolgen soll. So wird beispielsweise der Buchstabe ä im Deutschen (lang="de") anders im Alphabet eingeordnet als im Schwedischen (lang="se").
order (optional) bestimmt, ob die Sortierung aufsteigend (Voreinstellung), also etwa von A nach Z, oder absteigend, also etwa von Z nach A, erfolgen soll. Mögliche Werte sind ascending (aufsteigende Sortierung) oder descending (absteigende Sortierung).
select (optional) gibt an, was sortiert werden soll. Wird das Attribut weggelassen, ist der Inhalt des betroffenen Elements dasjenige, was sortiert wird.
Kann innerhalb von xsl:apply-templates oder xsl:for-each vorkommen.
Beispieldatei sort.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei sort.htm)
Anzeigebeispiel: So sieht's aus (Datei sort.xml - XML/XSLT-fähiger Browser erforderlich)
Beispieldatei sort.xsl:
Erläuterung:
Die XML-Daten im Beispiel enthalten Spielernamen und erreichte Punktzahlen. Bei der HTML-Ausgabe wird diese Liste nach Punktzahlen absteigend sortiert. Dazu wird im Beispiel-Stylesheet innerhalb der xsl:for-each-Anweisung eine xsl:sort-Anweisung notiert. Die Anweisung wirkt an dieser Stelle notiert wie ein Filter, der die Abarbeitung der einzelnen Elemente vom Typ spieler beeinflusst. Als Sortierkriterium wird punkte angegeben, da nach Punktzahlen sortiert werden soll. Die Sortierreihenfolge soll absteigend (descending) sein. Da die Punktzahlen numerisch interpretiert werden sollen, ist noch die Angabe data-type="number" notiert. Anschließend werden einfach die aktuellen Werte der Elemente name und punkte in die HTML-Tabelle geschrieben.
xsl:strip-space (Behandlung von Leerraumzeichen steuern)
Bestimmt, dass Leerraumzeichen, die zwischen Elementen in der Datei enthalten sind, bei der Ausgabe entfernt werden. Leerraumzeichen sind die Zeichen mit den Hexadezimalwerten #x20 (einfaches Leerzeichen), #x9 (Tabulator-Zeichen), #xD (Wagenrücklaufzeichen) und #xA (Zeilenvorschub-Zeichen). Es handelt sich nicht um den Textinhalt von Elementen, sondern um die Formatierung der Elemente im Ergebnisbaum.
Hat folgende Attribute:elements (obligatorisch) Namen von einem oder mehreren Elementen der Ausgangsdaten, deren Leerraumzeichen in der Ausgabe entfernt werden sollen. Mehrere Angaben sind durch Leerzeichen zu trennen.
Kann innerhalb von xsl:stylesheet vorkommen und muss außerhalb von xsl:template notiert sein.
Beispieldatei strip_space.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei strip_space.htm)
Anzeigebeispiel: So sieht's aus (Datei strip_space.xml - XML/XSLT-fähiger Browser erforderlich)
Beispieldatei strip_space.xsl:
Erläuterung:
In den notierten XML-Daten ist zwischen den Elementen innerhalb des Dokument-Elements test Leerraum notiert. Im Beispiel-Stylesheet wird durch die Anweisung
xsl:stylesheet (Stylesheet Wurzelelement)
Ist das Wurzelelement eines XSL-Stylesheets und beinhaltet sämtliche Style-Definitionen.
Hat folgende Attribute:extension-element-prefixes (optional) gibt Namensräume an, die innerhalb des Stylesheets benötigt werden, um Elemente dieser anderen Namensräume zu erkennen. Erlaubt sind eine oder mehrere Angaben. Mehrere Angaben sind durch Leerzeichen zu trennen.
exclude-result-prefixes (optional) gibt Namensräume an, die innerhalb des Stylesheets benötigt werden, um Elemente dieser anderen Namensräume zu erkennen. Beim Erzeugen des Ergebnisbaums werden diese Namensräume jedoch nicht mit übernommen, sofern sie dort nicht benötigt werden. Erlaubt sind eine oder mehrere Angaben. Mehrere Angaben sind durch Leerzeichen zu trennen.
id (optional) legt einen eindeutigen Bezeichnernamen für das Stylesheet fest, unter dem es "von außen" ansprechbar ist.
version (obligatorisch) gibt die verwendete XSL-Sprachversion an. Diese unbedingt erforderliche Angabe muss derzeit 1.0 lauten.
Ferner enthält das xsl:stylesheet-Element eine oder mehrere Angaben darüber, welchen Namensraum es benutzt. Dazu müssen die Quellen der Namensräume mit xmlns:xsl=[Quelle] angegeben werden. Für den XSLT-Namensraum ist üblicherweise xmlns:xsl="http://www.w3.org/1999/XSL/Transform" anzugeben. Abweichungen dazu sind abhängig vom verwendeten XSL-Prozessor.
Beispieldatei stylesheet.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei stylesheet.htm)
Anzeigebeispiel: So sieht's aus (Datei stylesheet.xml - XML/XSLT-fähiger Browser erforderlich)
1234567890
Beispieldatei stylesheet.xsl:
Erläuterung:
Die XML-Beispieldaten enthalten nur das Wurzelelement mit einer Ziffernfolge als Inhalt. Das Beispiel-Stylesheet ist dementsprechend einfach. Mit xsl:template wird eine Template-Definition zur Übersetzung der XML-Daten in die HTML-Ausgabe definiert. Eingeschlossen werden solche und andere XSL-Definition in das Wurzelelement xsl:stylesheet. Im Beispiel enthält das einleitende Tag dieses Elements die typischen Angaben zur XSLT-Version, zur XSLT-Quelle und zur Quelle des verwendeten HTML-Namensraums (hier: XHTML).
xsl:template (Schablone für Ergebnisbaum definieren)
Dient zum Definieren von Schablonen für Übersetzungen des Ausgangsbaums in den Ergebnisbaum. Dazu wird angegeben, welcher Knoten des Ausgangsbaums in welches Konstrukt des Ergebnisbaums übersetzt werden soll. Bei einer Transformation von eigenen XML-Daten nach HTML kann mit Hilfe einer solchen Template-Definition beispielsweise aus einem Element namens liste eine Aufzählungsliste mit dem ul-Element werden, und untergeordnete Elemente namens listenpunkt lassen sich in entsprechende HTML-Elemente des Typs li transformieren.
Das xsl:template-Element ist dadurch wohl das wichtigste und bedeutendste Element von XSLT.
Meistens sind Ausgangsbaum (also die Daten, die in einer XML-Datenstruktur vorliegen) und Ergebnisbaum (also die Datenstruktur, in die übersetzt werden soll - z.B. in HTML) so komplex, dass sich nicht alles in einer einzigen Template-Definition erledigen lässt. Stattdessen können Template-Definitionen mit xsl:apply-templates andere Template-Definitionen aufrufen, die z.B. untergeordnete Knoten verarbeiten.
Hat folgende Attribute:match (optional) gibt an, für welches Knoten-Set bzw. Pfad nach XPath-Syntax im Ausgangsbaum die Template-Definition gelten soll. Wird dieses Attribut nicht angegeben, muss stattdessen name angegeben werden.
mode (optional) vergibt einen Namen für den Modus der Template-Definition. Templates mit Modusangabe können mit xsl:apply-templates ausgewählt werden.
name (optional) vergibt einen Namen für die Template-Definition. Unter diesem Namen kann die Template-Definition mit xsl:call-template aufgerufen werden.
priority (optional) ein numerischer Wert, der Konfliktfälle bei der Reihenfolge des Abarbeitens von Template-Definitionen bewältigen soll. In einigen XSL-Prozessoren ist es bislang so gelöst, dass untergeordnete Templates oder Attributnamen normalerweise den Prioritätswert 0 haben. Untergeordnete Templates oder Attributnamen mit Namensraumangabe plus dem Platzhalter * haben den Prioritätswert -0.25. Ein nicht weiter eingegrenzter Platzhalter * hat den Prioritätswert -0.5. Alle anderen Templates haben einen Prioritätswert von 0.5.
Kann innerhalb von xsl:stylesheet vorkommen.
Beispieldatei template.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei template.htm)
Anzeigebeispiel: So sieht's aus (Datei template.xml - XML/XSLT-fähiger Browser erforderlich)
Beispieldatei template.xsl:
Erläuterung:
Das Beispiel enthält in den XML-Daten eine typische verschachtelte Elementstruktur, in diesem Fall zur Auszeichnung einer glossar-artigen Liste von Dateiendungen und ihrer Bedeutung. Im Beispiel-Stylesheet wird diese XML-Elementstruktur in eine xml-gerechte HTML-Struktur übersetzt. Dies geschieht innerhalb der xsl:template-Definitionen. Solche Template-Definitionen sprechen üblicherweise mit Hilfe des Attributs match ein bestimmtes Element der Ausgangsdaten an. Als Inhalt enthält die Template-Definition dann HTML-Code und andere XSL-Anweisungen, mit deren Hilfe die Übersetzung nach HTML gesteuert wird. Mit der obersten Template-Definition, die match="/" als Angabe hat, wird das Wurzelelement der XML-Daten angesprochen (im Beispiel das Element mit dem Namen test).
Um eine ordentliche HTML-Datei zu erzeugen, wird als Inhalt dieser Template-Definition das Grundgerüst der HTML-Datei notiert. Zwischen dem einleitenden und dem abschließenden body-Tag ist die XSL-Anweisung xsl:apply-templates notiert, mit der untergeordnete Template-Definitionen aufgerufen werden, die untergeordnete XML-Elemente verarbeiten. Maßgeblich dafür ist die Baumstruktur der XML-Daten. Im obigen Beispiel hat das Wurzelelement der XML-Daten zwei unmittelbar untergeordnete Elemente, nämlich titel und glossar. Für das titel-Element ist eine eigene Template-Definition notiert (
Für das glossar-Element existiert im Beispiel keine eigene Template-Definition, erst wieder für dessen untergeordnetes Element eintrag. Damit dieses Template von der Anweisung
xsl:text (Zeicheninhalt ausgeben)
Erzeugt statischen Text im Ergebnisbaum.
Hat folgende Attribute:disable-output-escaping (optional) bestimmt, wie XML-eigene Zeichen wie < oder > behandelt werden. Mögliche Werte sind yes und no (Voreinstellung). Bei yes werden solche Zeichen nicht in ihre benannten Namen umgewandelt, bei no werden sie umgewandelt.
Kann innerhalb von xsl:template vorkommen.
Beispieldatei xsltext.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei xsltext.htm)
Anzeigebeispiel: So sieht's aus (Datei xsltext.xml - XML/XSLT-fähiger Browser erforderlich)
Beispieldatei xsltext.xsl:
Erläuterung:
Die XML-Daten des Beispiels enthalten eine Behauptung. Im Beispiel-Stylesheet wird die Behauptung in einen HTML-Absatz übersetzt. Unterhalb davon ist jedoch noch eine xsl:text-Anweisung zum Erzeugen von weiterem Text notiert. Diese wiederum enthält die HTML-gerechte Notation eines kleinen JavaScripts, das in einem Textabsatz den Zeitpunkt der letzten Änderung der Datei ausgibt. So, wie die Anweisung im Beispiel notiert ist, müssen innerhalb davon die XML-eigenen Zeichen maskiert werden.
xsl:transform (Stylesheet Wurzelelement)
Ist ein Synonym für xsl:stylesheet.
xsl:value-of (Wert ausgeben)
Erzeugt eine gespeicherte Zeichenkette an der aktuellen Position im Ausgabebaum. Bei der gespeicherten Zeichenkette kann es sich z.B. um den Inhalt eines Knotens der XML-Daten handeln, oder um den Inhalt einer zuvor definierten Variablen.
Hat folgende Attribute:disable-output-escaping (optional) bestimmt, wie bei der Ausgabe XML-eigene Zeichen wie < oder > behandelt werden. Mögliche Werte sind yes und no (Voreinstellung). Bei yes werden solche Zeichen nicht in ihre benannten Namen umgewandelt, bei no werden sie umgewandelt.
extension-element-prefixes (optional) gibt Namensräume an, die benötigt werden, um Elemente dieser anderen Namensräume zu erkennen. Erlaubt sind eine oder mehrere Angaben. Mehrere Angaben sind durch Leerzeichen zu trennen.
select (obligatorisch) Wählt einen Knoten oder eine Variable oder einen Parameter aus, dessen Inhalt verwendet werden soll.
Kann innerhalb von xsl:template vorkommen.
Beispieldatei value_of.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei value_of.htm)
Anzeigebeispiel: So sieht's aus (Datei value_of.xml - XML/XSLT-fähiger Browser erforderlich)
Beispieldatei value_of.xsl:
Erläuterung:
In den XML-Daten wird eine Liste mit Einträgen definiert. Im Beispiel-Stylesheet wird diese Liste in eine HTML-Aufzählungsliste übersetzt. In der Template-Definition für das Element liste wird mit xsl:for-each für jedes untergeordnete Element eintrag bestimmt, dass dessen jeweiliger Inhalt, der mit
Mit select="." wird der Inhalt des aktuellen Elements ausgewählt. Generell gilt bei der Wertzuweisung an das select-Attribut die XPath-Syntax.
xsl:variable (Variable definieren)
Definiert eine Variable, deren Wert im weiteren Verlauf verwendet werden kann.
Hat folgende Attribute:name (obligatorisch) gibt den Namen der Variablen an. Unter diesem Namen kann auf ihren Wert zugegriffen werden.
select (optional) bestimmt einen Wert für die Variable. Wird dieses Attribut notiert, muss das xsl:variable-Element leer sein. Wird es nicht notiert, erfolgt die Wertzuweisung als Inhalt des Elements zwischen seinem Anfangs- und End-Tag. Mit select kann z.B. ein Element aus den XML-Ausgangsdaten ausgewählt werden. Auch die Vorbelegung mit statischem Text ist möglich, z.B. mit select="'Name:'" (dabei auf die inneren einfachen Anführungszeichen achten!).
Kann innerhalb von xsl:stylesheet vorkommen und kann sowohl außerhalb als auch innerhalb von xsl:template notiert sein. Wenn außerhalb notiert, ist es eine globale Variable, die in allen Template-Definitionen zur Verfügung steht. Wenn innerhalb einer Template-Definition notiert, ist es eine lokale Variable innerhalb des Templates.
Beispieldatei variable.xml:
Anzeigebeispiel: So sieht's aus (Ergebnisdatei variable.htm)
Anzeigebeispiel: So sieht's aus (Datei variable.xml - XML/XSLT-fähiger Browser erforderlich)
Das ist ein weites Feld
Morgenstund hat Gold im Mund
Stell dir vor es geht und keiner kriegts hin
Beispieldatei variable.xsl:
|
Forum Statistiken
Das Forum hat 27
Themen
und
3463
Beiträge.
|
Forum Software ©Xobor.de | Forum erstellen |