Inhaltliche Strukturierung von Ressourcen

Eine Einführung in XML

13. XSLT -- XSL Transformations


von Margarete Payer und Alois Payer

mailto: payer@hdm-stuttgart.de


Zitierweise / cite as:

Payer, Margarete <1942 - > ; Payer, Alois <1944 - >: Inhaltliche Strukturierung von Ressourcen : eine Einführung in XML. -- 13. XSLT -- XSL Transformations. -- Fassung vom 2002-10-29. -- URL: http://www.payer.de/xml/xml13.htm. -- [Stichwort].

Erstmals publiziert:

Überarbeitungen:

Anlass: Lehrveranstaltung an der HdM Stuttgart, SS 2002

Unterrichtsmaterialien (gemäß § 46 (1) UrhG)

©opyright: Dieser Text steht der Allgemeinheit zur Verfügung. Eine Verwertung in Publikationen, die über übliche Zitate hinausgeht, bedarf der ausdrücklichen Genehmigung der Herausgeberin.

Dieser Teil ist ein Kapitel von: 

Payer, Margarete <1942 - > ; Payer, Alois <1944 - >: Inhaltliche Strukturierung von Ressourcen : eine Einführung in XML. -- 0. Übersicht. -- URL: http://www.payer.de/xml/xml00.htm

Dieser Text ist Teil der Abteilung Informationswesen, Bibliothekswesen, Dokumentationswesen  von Tüpfli's Global Village Library.


Zum Zeitpunkt der Abfassung dieses Kapitels gelten:

Im Entwurfstadium befindet sich Version 2.0 von XSLT:

Deutsche Übersetzung:


0. Übersicht


 


1. Einleitung


Da XML eine strikte Trennung zwischen inhaltsbezogenem Markup und Darstellungen dieses Markup in verschiedenen Medien (Bildschirm, Druck, Audio, Video, Braille) befürwortet, braucht es eine normierte Sprache zur Umwandlung von xml-Ressourcen in darstellbaren Code -- d.h. eine Stylesheet-Language. Dafür wurde XSL -- Extensible Stylesheet Language entwickelt. Bald zeigte sich, dass eine Trennung in zwei verschiedene Sprachen sinnvoll ist:

Da es  für die Umwandlung von xml-Ressourcen formal keinen Unterschied macht, ob das umgewandelte Produkt in einem der Darstellung dienenden Code (html, xhtml, pdf, LATEX u.ä.) codiert sind oder nicht, dient XSLT zwei Aufgaben:

Die Umwandlung kann prinzipiell an drei verschiedenen Orten geschehen:


Abb.: Die drei Orte, an denen die Umwandlung einer xml-Ressource stattfinden kann


1.1. Ein einfaches Beispiel


Zur Einführung in das Verständnis von XSLT diene folgendes einfaches Beispiel:

Wir nehmen an, dass als mögliches Unterelement einer Monographie ein Glossar vorgesehen sei. Der Einfachheit halber definieren wir dieses Unterelement hier mit einer selbständigen DTD (glossar.dtd):

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT Glossar (Eintragung+)>
<!ELEMENT Eintragung (Begriff, Definition)>
<!ELEMENT Begriff (#PCDATA)>
<!ELEMENT Definition (#PCDATA)>

Das Folgende ist ein nach dieser DTD gebildetes XML-Mini-Dokument (glossar.xml):.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Glossar SYSTEM "glossar.dtd">
<Glossar>
<Eintragung> <Begriff>CSS</Begriff> <Definition>Cascadung Stylesheet</Definition> </Eintragung>
<Eintragung> <Begriff>.DSSSL</Begriff> <Definition>Document Style Semantics and Specification Language</Definition> </Eintragung>
<Eintragung> <Begriff..>JDK</Begriff> <Definition>Java Developer Kit</Definition> </Eintragung>
<Eintragung> <Begriff>SVG</Begriff> <Definition>Scalable Vector Graphics</Definition> </Eintragung>
</Glossar>

Das nach obiger DTD gebildete Glossar wollen wir in Form einer Tabelle in Folgender Form ausgeben:

Glossar

Begriff Definition
Begriff1 Definition1
Begriff2 Definition2
usw. usw.

Das mit XSLT gebildete Stylesheet erhalten wir einfach, indem wir den HTML-Code dieser Vorlage nehmen, die entsprechenden XSL-Spezifikationen voransetzen und die oben kursiv wiedergegebenen Bestandteile aus der XML-Ressource durch entsprechenden XSLT-Code kennzichnen. Die XSLT-Spezifikationen und Codierungen werden im Folgenden durch Fettschrift wiedergegeben:

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

<!-- XML-Processing Instruction, obligatorisch. XSLT ist in XML geschrieben, deshalb können XSLT-Stylesheets auch mit jedem XML-Editor ediert werden -->

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

<!-- Namespace-Declaration für XSLT, obligatorisch -->

<xsl:template match="/">

<!-- Ausgabe-Vorlage (template) für die gesamte Ressource (/ = Root-Element (die Angaben erfolgen gemäß XPath), obligatorisch -->

<!-- Es folgt das HTML-Schema für die Ausgabe als Tabelle -->

<html>

<head>
<title>Glossar</title>
</head>

<body>

<p align="center"><b>Glossar</b></p>

<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">

<tr>
<th width="30%">Begriff</th>
<th width="70%">Definition</th>
</tr>

<xsl:apply-templates/>
<!-- Der Umwandlungsprozessor wird angewiesen, an dieser Stelle die unten angegebenen Vorlagen anzuwenden -->
 

</table>

</body>

</html>

</xsl:template>

 

<xsl:template match="Eintragung">

<!-- Ausgabe-Vorlage (template) für das Element "Eintragung" -->

<tr>
<td width="30%"><b><xsl:value-of select="Begriff"/></b></td>
<!-- Dieser XSL-Ausdruck bedeutet, dass an dieser Stelle der jeweilige Text zwischen den XML-Tags <Begriff> </Begriff> einzusetzen ist. Da XML keine offenen Tags zulässt, ist dieses Tag mit / geschlossen -->
<td width="70%"><xsl:value-of select="Definition"/></td>
<!-- Dieser XSL-Ausdruck bedeutet, dass an dieser Stelle der jeweilige Text zwischen den XML-Tags <Definition> </Definition> einzusetzen ist. Da XML keine offenen Tags zulässt, ist dieses Tag mit / geschlossen -->
</tr>
 

</xsl:template>

</xsl:stylesheet>

<!-- Schließung der noch offenen Tags -->

Wendet man dieses XSLT-Stylesheet auf die Datei glossar.xml an, erhält man folgendes Ergebnis:

Glossar

BegriffDefinition
CSSCascadung Stylesheet
DSSSLDocument Style Semantics and Specification Language
JDKJava Developer Kit
SVGScalable Vector Graphics

Wenn Sie Unter dem Menüpunkt "Ansicht" des Browsers die Option "Quelltext" auswählen, können Sie den automatisch generierten HTML-Code sehen.

Dieses Beispiel zeigt ein XSLT-Stylesheet besteht aus Templates (Vorlagen). Ein XSLT-Template ist eine in der Codierung der Zielressource geschriebene Vorlage, in der die Einfügungen usw. aus der XML-Vorlage durch Ausdrücke der XSLT bezeichnet werden. Die Umwandlung wird auch vom MS InternetExplorer (ich benutze Version 6.0) automatisch vorgenommen, wenn das xml-Dokument im Kopf vor <Glossar> folgende Processing Instruction enthält (natürlich mit dem jeweils entsprechenden Pfad):

<?xml-stylesheet type="text/xsl" href="glossar.xsl"?>

Sie können das mit ausprobieren indem sie auf folgenden Link klicken:

http://www.payer.de/xml/glossar.xml


2. Die Grundstruktur eines XSLT-Stylesheet


Die Grundstruktur eines XSLT-Stylesheet ist (die Kommentarzeilen <!--  --> dienen der Erläuterung und gehören nicht zur Struktur):

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

<!-- XML-Processing Instruction, obligatorisch. XSLT ist in XML geschrieben, deshalb können XSLT-Stylesheets auch mit jedem XML-Editor ediert werden -->

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

<!-- Namespace-Declaration für XSLT, obligatorisch. Kann noch weitere Namespace-Declarations für im Stylesheet verwendete andere Namspaces enthalten. Gleichbedeutend mit <xsl:stylesheet   > ist <xsl:transform > -->

<xsl:output method="html" encoding="UTF-8" indent="yes"></xsl:output>

<!-- gibt das Zielformat der Transformation an (xml, html, text). Default-Einstellung ist heute meist xhtml. Oft optional -->

<xsl:template match="XPath des Elements">

<!-- dieses Element enthält die entsprechende Vorlage. Wiederholbar -->

</xsl:template>

</xsl:stylesheet>  


3. Die Verknüpfung eines XML-Dokuments mit einem Stylesheet


Ein XML-Dokument kann mit einem Stylesheet verbunden werden durch entsprechende Verarbeitungsparameter im Transformationsprozessor nach dem Muster

Befehl XML-Dokument-Name Stylesheet-Name Ausgabedokument-Name

Z.B. für den Xalan XSLT Processor:

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

Man kann auch in das XML-Dokument eine oder mehrere Processing Instructions <?xml-stylesheet  ?> einfügen. Fügt man mehrere solche Processing Instructions ein, so kann man dem Nutzer eine Wahl anbieten.

z.B.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Glossar SYSTEM "C:\Programme\Altova\XML Spy Suite\Examples\glossar.dtd">
<?xml-stylesheet type="text/xsl" href="
C:\Programme\Altova\XML Spy Suite\Examples\glossartabelle.xsl" title="Tabelle" alternate="no"?>
<?xml-stylesheet type="text/xsl" href="
C:\Programme\Altova\XML Spy Suite\Examples\glossarliste.xsl" title="Liste" alternate="yes"?>

<!-- die Attribute title und alternate sind optional. Bei mehreren möglichen Stylesheets sollte man jedem einen title geben. alternate="no" heißt, dass es das Stylesheet erster Wahl ist (Default), alternate="yes" heißt dass es ein alternatives Stylesheet ist, das gewählt werden kann -->

Die Einbindung einer solchen Processing Instruction in das XML-Dokument ist umstritten, da sie etwas der strikten Trennung zwischen XML-Dokument und Transformation in einen der Darstellung dienenden Code widerspricht.


4. Top-Level Elements und Instructions


Als Top-level elements werden in XSLT Elemente bezeichnet, die unmittelbare Kinder des Grundelements <xsl:stylesheet> [gleichbedeutend: <xsl:transform>] sind.

Top-level Elemente können sein:

Instructions sind XSLT-Elemente, die nicht Children des Grundelements <xsl:stylesheet> sein können. Hauptsächlich stehen sie innerhalb eines Template.


5. Stylesheet-Elemente


 


5.1. <xsl:stylesheet> = <xsl:transform>


xsl:stylesheet und xsl:transform sind Synonyme

Funktion:

Grundelement (root element)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
id   id Identifier für diesses Stylesheet
extension-element-prefixes   tokens  
exclude-result-prefixes   tokens  
version x "1.0" Version von XSLT, zur Zeit 1.0
xmlns: x xmlns:xsl="http://www.w3.org/1999/XSL/Transform" Bezugssystem für Namen (Namespace) aus XSLT:

Child-Elemente:

Die Reihenfolge der Child-Elemente von <xsl:stylesheet> bzw. <xsl:transform> ist mit Ausnahme von <xsl:import> (siehe unten!) nicht signifikant.

Beispiel:


5.2. <xsl:include/>


Funktion:

Fügt den Inhalt eines externen XSLT-Stylsheets in das Stylesheet ein. Im Unterschied zu <xsl:import/> ohne Prioritätsregelung, d.h. das eingefügte Style-Sheet darf nichts enthalten, was im Widerspruch zum einfügenden Stylesheet steht.

Top-level Element (muss Child-Element von <xsl:stylesheet> sein, kann aber -- im Unterschied zu <xsl:import> an beliebiger Stelle stehen)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
href x URI/URL Lokalisierung des zu importierenden Stylesheet

Leeres Element:

<xsl:include href = "..." />

Beispiel:


5.2. <xsl:import/>


Funktion:

Fügt den Inhalt eines externen XSLT-Stylsheets in das Stylesheet ein. Im Unterschied zu <xsl:iinclude/> mit Prioritätsregelung, d.h. das eingefügte Style-Sheet darf auch Bestimmungen enthalten, die im Widerspruch zum einfügenden Stylesheet stehen. Die unten angeführten Prioritätsregeln regeln die Stylesheet-Kaskade (in einer Kaskade hat die jeweils untere Stufe bezüglich der Gestaltung des Endprodukts Priorität vor allen darüber stehenden Stufen).

Top-level Element (muss Child-Element von <xsl:stylesheet> sein)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
href x URI/URL Lokalisierung des zu importierenden Stylesheet

Leeres Element: <xsl:import href="..."/>

Reihenfolge:

Die <xsl:import>-Elemente müssen am Anfang vor allen anderen Child-Elemente des <xsl:style-sheet>-Elements stehen. Wenn <xsl:import>-Elemente in mit <xsl:include> importierten Stylesheets stehen, werden sie vom Tranformations-Programm an den Anfang des importierenden Stylesheets nach evtl. dort stehende <xsl:import>-Elemente gestellt. Dies ist wichtig für die Stylesheet-Kaskade!

Im Unterschied zu <xsl:include> beinhaltet <xsl:import> Prioritäten: im Konfliktfall hat das Grund-Stylesheet Präferenz vor dem importierten Stylesheet, und jedes  importierte Style-Sheet hat Präferenz gegenüber den in der Abfolge weiter unter stehenden importierten Stylesheets. Einhalten importierte Stylesheets wider <xsl:import>, dann wird die Reihenfolge kompliziert -- weswegen man solche Import-Bäume am besten vermeidet.

Beispiel:


6. Vorlagen-Elemente


 


6.1. <xsl:template>


Funktion:

Template Rule: Vorlage (template) und Regeln für die Ausgabe (Output). Besagt: "Gebe alles aus, was innerhalb der Template Rule -- z.B. in HTML-Codierung -- steht und führe alle Anweisungen (Instructions) mit xsl-Namespace aus."

Top-level Element (muss Child-Element von <xsl:stylesheet> sein)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung Beispiel
match (x) XPath-Ausdruck Elemente, auf die <xsl::template> angewandt werden soll. Ist obligatorisch, wenn kein name-Attribut verwendet wird  
name (x) (Namespace:)Name Name dieses template, damit dieses mit <xsl:call-template name="..." /> gezielt aufgerufen werden kann. Ist obligatorisch, wenn kein match-Attribut verwendet wird  
priority   Ziffer (z.B. 0.5 | 0 | -0.25 | -0.5) damit kann man die Priorität zwischen verschiedenen <xsl:template> festlegen, für den Fall, dass sie sich widersprechende Anweisungen enthalten: Kaskade.  
mode   (Namespace:)Name Name des <xsl:template> für einen bestimmten Zweck (z.B. "Inhaltsverzeichnis", "Druck", "Bildschirm", "Index"). Kann mit <xsl:apply-template mode="..." /> gezielt aufgerufen werden kann  

Inhalt:

Beispiel:


6.2. <xsl:apply-templates>


Funktion:

Anwendung der Vorlagen (templates) auf die XML-Ressorce bis sie abgearbeitet ist (Schleife). Wenn z.B. ein Glossar 500 Einträge enthält werden die Templates nacheinander auf alle 500 angewandt, sodass der Output auch 500 Einträge enthält.

Instruction (innerhalb eines Template)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
select   node-set-expression Einschränkung der Anwendung auf bestimmte durch einen XPath-Ausdruck bezeichnete Elemente; falls nicht bestimmt, werden die Templates auf alle Descendants des aktuellen Knoten angewandt
mode   (Namespace:)Name Name des <xsl:template> für einen bestimmten Zweck (z.B. "Inhaltsverzeichnis", "Druck", "Bildschirm", "Index"). Kann mit <xsl:apply-template mode="..." /> gezielt aufgerufen werden kann.

Inhalt::

Beispiel:


6.3. <xsl:apply-imports/>


Funktion:

Aufruf  von Template-Regeln, die mit <xsl:import/> importiert wurden und die an der betreffenden Stelle durch Regeln mit höherer Priorität in der Stylesheet-Kaskade aufgehoben würden. D.h. eine Kaskadenstufe mit geringerer Priorität bekommt dadurch Priorität.

Instruction (innerhalb eines Template)

Attribute:

keine Attribute

Leeres Element:

<xsl:apply-imports />

Beispiel:


6.3. <xsl:call-template>


Funktion:

gezielter Aufruf eines -- durch einen Namen bezeichneten -- einzelnen Template. Mit dieser Instruction kann man modulare Stylesheets aufbauen.

Instruction (innerhalb eines Template)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
name x (Namespace:)Name Name des template <xsl:template name="...">

Inhalt::

Beispiel:


7. Output im Transformierten erzeugende Elemente



7.1. <xsl:value-of/>


Funktion:

Ermittelt den Inhalt von durch einen XPath-Ausdruck Gekennzeichnetem und gibt diesen Inhalt als String aus.

Instruction (innerhalb eines Template)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
select x XPath-Ausdruck XPath für die ausgewählten Elemente, Attribute u. del.
disable-output-escaping "yes" | "no" definiert, ob Sonderzeichen als Code ausgegeben werden oder als Sonderzeichen (z.B. > als &gt;. Wenn auf "yes" gesetzt, wird > als > ausgegeben).

Leeres Element:

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

Beispiel:


7.2. <xsl:element>


Funktion:

Erzeugt ein Element im Output

Instruction (innerhalb eines Template)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
name x { (Namespace:)Name } Name des zu erzeugenden Elements
namespace   { URI } URI des Namespace
use-attribute-sets   (Namespace:)Names Ein oder mehrere <xsl:attribute-set>, die dieses Element nutzen soll

Inhalt:

Beispiel:


7.3. <xsl:attribute>


Funktion:

Erzeugt ein Attribut im Output. Erlaubt es, den Attributwert aus verschiedensten Quellen zu erzeugen.

Instruction (innerhalb eines Template oder innerhalb des Top-level Elements <xsl:attribute-set> ... </xsl:attribute-set>)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
name x { (Namespace:)Name }  
namespace   { uri-reference }  

Inhalt:

Beispiel:


7.4. <xsl:comment>


Funktion:

generiert einen Kommentar im Output (z.B. Copyright-Vermerk in XML-Dokument)

Instruction (innerhalb eines Template)

Attribute:

keine Attribute

Inhalt:

Beispiel:

<xsl:comment>© Für dieses XML-Dokument gilt Copyleft gemäß http:// ...</xsl:comment>

erzeugt den Output:

<!-- © Für dieses XML-Dokument gilt Copyleft gemäß http:// ... -->


7.5. <xsl:processing-instruction>


Funktion:

Erzeugt im Output eine Processing Instruction

Instruction (innerhalb eines Template)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
name x { ncname } Name dieser Processing Instruction

Inhalt:

Beispiel:


7.6. <xsl:text>


Funktion:

Fügt in den Output Text ein

Instruction (innerhalb eines Template)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
disable-output-escaping   "yes" | "no" definiert, ob Sonderzeichen als Code ausgegeben werden oder als Sonderzeichen (z.B. > als &gt;. Wenn auf "yes" gesetzt, wird > als > ausgegeben).

Inhalt:

Beispiel:


8. Elemente für Parameter und Variable


 


8.1. <xsl:variable>


Funktion:

ordnet einer Variablen einen festen Wert zu

Top-level Element (Child von <xsl:stylesheet>, dann gilt die Variable universell) oder Instruction (innerhalb eines Template, dann gilt die Variable nur innerhalb der entsprechenden Elemente)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
name x (Namespace:)Name Name der Variable
select   XPath-Ausdruck Ort des Werts der Variable. Wenn verwendet, dann ist <xsl:variable> ein leeres Element

Inhalt::

Beispiel:


8.2. <xsl:param>


Funktion:

Definiert Namen und Wert eines Parameter, der von einem Template verwendet werden soll. Der Wert des Parameter kann durch einen XPath-Ausdruck im Attribut select

Top-level Element (Child-Element von <xsl:stylesheet>, dann gilt der Parameter für das ganze Stylesheet) oder Instruction (innerhalb von <xsl:template>, dann gilt der Parameter nur innerhalb des betreffenden <xsl:template>)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
name x (Namespace:)Name Name des Parameter
select   XPath-Ausdruck XPath des Wertes des Parameter

Inhalt::

Beispiel:


8.3. <xsl:with-param>


Funktion:

Definiert Parameter, der übergeben werden soll

Steht immer innerhalb von <xsl:apply-templates> oder <xsl:call-template>

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
name x (Namespace:)Name Name dieses Parameters
select   XPath-Ausdruck XPath des Parameterwerts

Inhalt:

Beispiel:


9. Kopier-Elemente


 


9.1. <xsl:copy>


Funktion:

Kopiert das aktuelle Element in den Output. Die Children des Elements sowie seine Attribute werden nicht kopiert.

Instruction (innerhalb eines Template)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
use-attribute-sets   (Namespace:)Names Liste von einem oder mehreren attribute-sets, die angewendet werden sollen

Inhalt::

Beispiel:


9.2. <xsl:copy-of/>


Funktion:

Kopiert das mit select ausgewählte in den Output.

Instruction (innerhalb eines Template)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
select   XPath-Ausdruck XPath des zu Kopierenden

Leeres Element:

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

Beispiel:


10. Schleifen und Bedingungen


 


10.1. <xsl:apply-templates>


Funktion:

Anwendung der Vorlagen (templates) auf die XML-Ressorce bis sie abgearbeitet ist (Schleife). Wenn z.B. ein Glossar 500 Einträge enthält werden die Templates nacheinander auf alle 500 angewandt, sodass der Output auch 500 Einträge enthält.

Instruction (innerhalb eines Template)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
select   node-set-expression Einschränkung der Anwendung auf bestimmte durch einen XPath-Ausdruck bezeichnete Elemente; falls nicht bestimmt, werden die Templates auf alle Descendants des aktuellen Knoten angewandt
mode   (Namespace:)Name Name des <xsl:template> für einen bestimmten Zweck (z.B. "Inhaltsverzeichnis", "Druck", "Bildschirm", "Index"). Kann mit <xsl:apply-template mode="..." /> gezielt aufgerufen werden kann.

Inhalt::

Beispiel: 


10.2. Schleife: <xsl:for-each>


Funktion:

Iterations-(Wiederholungs)-Operator. Bildet Verarbeitungsschleife: das Template wird auf das durch select Ausgewählte sooft angewandt bis alle Einträge abgearbeitet sind

Instruction (innerhalb eines Template)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
select x XPath-Ausdruck XPath dessen, auf das die Oparation angewandt werden soll

Inhalt::

Beispiel:


10.3. Bedingung: <xsl:if>


Funktion:

Macht die Anwendung des eingeschlossenen Template von der Erfüllung einer Bedingung abhängig.

Instruction (innerhalb eines Template)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
test x Boolescher Ausdruck Bedingung (wahr|falsch)

Inhalt::

Beispiel:


10.4. Bedingung: <xsl:choose>, <xsl:when>, <xsl:otherwise>,


<xsl:choose>


Funktion:

Leitet Wahlbedingung ein: mehrere Bedingungen (wenn Bedingung1 erfüllt ist, dann Operation1; wenn Bedingung2, dann Operation2 ) bzw. Wenn-Andernfalls-Bedingung ein.

Instruction (innerhalb eines Template)

Attribute:

keine Attribute

Inhalt::


<xsl:when>


Funktion:

Wahlbedingung innerhalb von <xsl:chosse>

Muss immer Child-Element von <xsl:choose> sein. <xsl:choose> muss minestens ein <xsl:when> enthalten.

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
test x Bollescher Ausdruck Bedingung (wahr|falsch)

Inhalt:


<xsl:otherwise>


Funktion:

Was zu tun ist, wenn keine der durch <xsl:when> bestimmten Wahlbedingungen zutrifft

Muss immer Child-Element von <xsl:choose> sein. <xsl:choose> kann ein <xsl:otherwise> enthalten, dieses muss dann nach allen <xsl:when> stehen

Attribute:

keine Attribute

Inhalt:


Beispiel:


11. Sortier- Nummerier-Elemente


 


11.1. <xsl:sort/>


Funktion:

Definiert den Sortierschlüssel.

Ist Child von <xsl:apply-templates> oder <xsl:for-each>. Wenn mehrere <xsl:sort/> verwendet werden, dann definiert das erste den ersten Sortierschlüssel, das zeite den zweiten usw.

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
select   XPath-Ausdruck XPath des zu Sortierenden
lang   Sprachcode nach RFC1766 (http://www.ietf.org/rfc/rfc1766.txt) Sprache, nach der sortiert werden soll (ewichtig z.B. für Sortierung von Umlazuten)
data-type   "text" | "number" | andere Zahlen können als Text (1, 10, 102, 2) oder als Zahlen (1, 2, 10, 102) sortiert werden
order   "ascending" | "descending" aufsteigende (1, 2, 3) oder absteigende (3, 2, 1) Sortierung
case-order   "upper-first" | "lower-first" Reihenfolge von Großbuchstaben (upper) und Kleinbuchstaben (lower)

Leeres Element:

<xsl:sort />

Beispiel:


11.2. <xsl:number/>


Funktion:

Nummeriert oder zählt.

Instruction

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
count   XPath-Ausdruck XPath dessen, was nummeriert oder gezählt werden soll
level   "single" | "multiple" | "any" Tiefe der Ebenen, auf denen gezählt bzw. nummeriert werden soll
from   XPath-Ausdruck Ab wo gezählt bzw. nummeriert werden soll
value   number-expression Ausdruck der in Ziffer umgewandelt werden soll (z.B.: value="7" format="i:" gibt die römische Ziffer vii aus
format   "1"|"01"|"a"|"A"|"i"|"I"|"anything else" Ziffernart der Ausgabe: "1" 0 1, 2, 3; "01"= 01, 02, 03;"a" = a, b, c; "A" = A, B, C; "i" = römische Ziffern in Kleinbuchstaben; "I" = römische Ziffern in Großbuchstaben; "anything else" = hängt vom Prozessor ab.
lang   Sprachcode Sprache, deren Alphabet genutzt werden soll (lateinisch, kyrillisch, chinesisch, bengalisch ...)
letter-value   "alphabetic" | "traditional" z.B. haben in römischen Ziffern die Buchstaben keinen alphabetischen Wert
grouping-separator   Zeichen Zeichen, mit dem Ziffern gruppiert werden (Punkt, Komma, Spatium)
grouping-size   Zahl Wieviele Ziffern zu einer Gruppe zusammengefasst werden sollen, z.B. drei: 100.222.324

Leeres Element:

<xsl:number />

Beispiel:


12. Das Output-Format bestimmendes Element: <xsl:output/>


Funktion:

Bestimmt gewisse Eigenschaften der Ausgabe (Output)

Top-level Element (muss Child-Element von <xsl:stylesheet> sein)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
method   "xml" | "html" | "text" | anderes Art der auszugebenden Ressource
version   Versionsnummer Version von XML bzw. HTML, nach der ausgegeben werden soll
encoding   string Wert des Attributes encoding im der XML-DEclaration des Outrput, z.B. "UTF-8"
omit-xml-declaration   "yes" | "no" dem XML-Output wird xml-declaration vorangestellt bzw. nicht
standalone   "yes" | "no" Wert des Attributes standalone in der XML-Declaration
doctype-public   string Wert des Attributes PUBLIC in der DOCTYPE_DEclaration (XML oder HTML): Identifier der DTD des Output (z.B. für XHTML: "-//W3C/DTD XHTML 1.0//EN")
doctype-system   string Wert des Attributes SYSTEM in der DOCTYPE_DEclaration (XML oder HTML): Identifier der DTD des Output (z.B. "C:\Programme\Altova\XML Spy Suite\Examples\glossar.dtd")
cdata-section-elements   (Namespace:)Names Name der Elemente, in denen CDATA stehen sollen, d.h. in denen kein Markup identifiziert werden soll (d.h. in denen <  > </ > &..; u.ä. keine Markup-Bedeutung haben (gilt nur für XML-Output)
indent   "yes" | "no" gibt an, ob die Tags im Output gemäß der Baumstruktur eingerückt werden sollen, um die Struktur übersichtlicher zu machen
media-type   MIME-Bezeichnung MIME des Output

Leeres Element:

<xsl:output />

Beispiel:


13. Sonstige Top-level Elemente


13.1. <xsl:attribute-set>


Funktion:

Definiert eine Gruppe von Attributen für die Output-Ressource

Top-level Element (muss Child-Element von <xsl:stylesheet> sein)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
name x (Namespace:)Name Name des attribute set
use-attribute-sets   (Namespace:)Names Namen anderer attribute sets, die von diesem attribute set verwendet werden sollen

Inhalt:

Beispiel:


13.2. <xsl:decimal-format/>


Funktion:

Definiert das Format für Dezimalzahlen

Top-level Element (Child-Element von <xsl:stylesheet>, optionell von keinmal bis mehrmal)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
name   (Namespace:)Name Name des Dezimalformats, falls es nur für Teile des Output verwendet werden soll
decimal-separator   "."|"," Punkt oder Komma vor Dezimalstellen
grouping-separator   "."|","|" " Punkt, Komma oder Spatium zur Gruppierung von Ziffern (z.B. 100.000)
infinity   "Infinity"|∞| ... Zeichen oder Ausdruck für unendlich
minus-sign   "-"|"minus" .... Zeichen oder Ausdruck für Minus
NaN   string Was ausgegeben werden soll, wenn der Wert, der verarbeitet werden sollte, keine Zahl ist
percent char Zeichen oder Ausdruck für Prozent (z.B. "%", "p.c"
per-mille char Zeichen oder Ausdruck für Promille
zero-digit char
digit char
pattern-separator char

Leeres Element:

<xsl:decimal-format/>

Beispiel:


13.3. <xsl:key/>


Funktion:

Definiert Index

Top-level Element

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
name x (Namespace:)Name Name des Index
match x XPath-Ausdruck Zu Indizierendes
use x XPath-Ausdruck Eigenschaft des zu Indizierenden, um im Index darauf zuzugreifen

Leeres Element:

<xsl:key name="..." match="..." use="..."/>

Beispiel:


13.4. <xsl:namespace-alias/>


Funktion:

Alias für Namespace. Sehr selten benutzt (nur manchmall, wenn aus einem Stylesheet ein anderes Stylesheet generiert wird).

Top-level Element  

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
stylesheet-prefix x prefix | "#default" Namespace im Stylesheet
result-prefix x prefix | "#default" Alias

Leeres Element:

<xsl:namespace-alias  stylesheet-prefix = "..." result-prefix = "..." />

Beispiel:


13.5. <xsl:preserve-space/>


Funktion:

im Output werden in den ausgewählten Elementen mehrfache Spatien (whitespace) erhalten

Top-level Element

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
elements x Elementnamen Elemente, in denen Spatien erhalten bleiben sollen

Leeres Element:

<xsl:preserve-space elements ="..."/>

Beispiel:


13.6. <xsl:strip-space/>


Funktion:

im Output werden in den ausgewählten Elementen mehrfache Spatien (whitespace) bis auf eines gelöscht

Top-level Element

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
elements x Elementnamen Elemente, in denen überflüssige Spatien gelöscht werden sollen

Leeres Element:

<xsl:strip-space elements="..."/>

Beispiel:


14. Sonstige Instructions


14.1. <xsl:fallback>


Funktion:

Gibt an, was getan werden muss, wenn ein Element nicht gefunden werden kann (weil z.B. die Datenbank momentan nicht zugänglich ist)

Instruction (innerhalb eines Template)

Attribute:

keine Attribute

Inhalt:

Beispiel:


14.2. <xsl:message>


Funktion:

gibt eine Meldung aus (Fehlermeldung beim Debugging von Stylesheets)

Instruction (innerhalb eines Template)

Attribute:

Attribut obligatorisch Attributwerte Bedeutung
terminate    "yes" | "no" soll der Transformation-Prozessor gestoppt werden

Inhalt:

Beispiel:


15. Weiterführende Ressourcen


Yahoo und Google Categories


Zu Kapitel 14: XSL-FO -- XSL - Formatting Objects