xsl:stylesheet

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 6.)

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

 

Das Element xsl:stylesheet dient dazu, den Rumpf eines XSLT-Stylesheetmoduls zu definieren. In ihm werden globale, für seinen gesamten Bereich gültige Attributwertvorgaben und Namensräume festgelegt. Mit Hilfe des version-Attribut von xsl:stylesheet wird außerdem die XSLT-Version genannt, die dem Stylesheetmodul zugrunde liegt.

Klassifizierung Root-Element
Funktionsgruppe Wurzelelement eines XSLT-Stylesheets
Einführung XSLT 1.0

Position im Stylesheet und erlaubte Inhalte:

Das xsl:stylesheet-Element gehört (zusammen mit xsl:transform) zur Gruppe der Root-Elemente und dient somit als Wurzelelement eines XSLT-Stylesheet. Dementsprechend gibt es kein Elternelement.

Das xsl:stylesheet-Element enthält den gesamten Rumpf des XSLT-Stylesheet in Form von XSLT-Toplevel-Elementen (z.B. Template-Regeln und weitere Deklarationen), die wiederum Sequenzkonstruktoren enthalten können. Als sonstige Inhalte sind Erweiterungsinstruktionen, benutzerdefinierte Datenelemente, Kommentare und Whitespace-Textknoten gestattet.

Attribute:

Für das Root-Element xsl:stylesheet gelten die Standardattribute, die, soweit sie hier abweichende Bedeutung besitzen, naochmals beschrieben werden. Zusätzlich zum hier obligatorischen version-Attribut existieren weitere optionale Attribute, die das Defaultverhalten des Stylesheets bzw. das der in ihm enthaltenen XSLT-Instruktionen in Bezug auf Validierung oder den Umgang mit Namensräumen bestimmen.

Im Stylesheetelement werden darüber hinaus üblicherweise mittels der xmlns-Pseudoattribute die globalen Namensraumdefinitionen vorgenommen, die für das gesamte Stylesheetmodul gelten sollen.

default-collation (auch Standardattribut)

Wert

uri-list

Verwendung

Optional

Einführung

XSLT 2.0

In XPath-Ausdrücken muss für Stringvergleiche oder Sortierungen stets auf eine Vergleichsvorschrift für Zeichenketten, eine sogenannte Collation zurückgegriffen werden – normalerweise ist dies die »Unicode Codepoint Collation«, ein Stringvergleich findet somit anhand der Codepoints der jeweils verglichenen Zeichen statt.

Mittels des default-collation-Attributs kann eine im Bereich des gekennzeichneten Elements für XPath-Ausdrücke alternativ einzusetzende Collation angegeben werden. Hierfür wird ein URI-String übergeben, der die Collation kennzeichnet.

Das Attribut erlaubt die Übergabe mehrerer, durch Leerzeichen getrennter Collation-URIs – dies hat den Hintergrund, dass das Erkennen der Collation-Angabe stark von der Implementierung des Systems anhängig ist, ein Prozessor also die Liste durchgehen können muss, bis er eine Collation "erkennt". Es ist sinnvoll, als letzte Collation die Unicode Codepoint Collation anzugeben, da diese in jedem Fall unterstützt wird, und so kein Fehler provoziert wird.

Betroffen ist ebenso das Verhalten von Instruktionen xsl:key und xsl:for-each-group im Gültigkeitsbereich des Attributs, nicht aber das Verhalten von xsl:sort (das generell die Default Collation verwendet).

Anmerkung: In XPath 1.0 wird stets nach Codepoints verglichen. Die Wahl einer anderen Vergleichs- oder Sortiervorschrift ist nicht möglich.

Hinweis: Diese Erläuterungen gelten ebenfalls für das gleichnamige Attribut von xsl:transform. Das Attribut existiert nicht in XSLT 1.0.

default-validation

Wert

"preserve" | "strip"

Verwendung

Optional

Einführung

XSLT 2.0

Das default-validation-Attribut bestimmt das Defaultverhalten bei allen Validierungsvorgängen im Verlauf der Verarbeitung dieses Stylesheetmoduls, sofern lokal nicht explizitere Anweisungen (in Form eines validation-Attributs) vorliegen. (Anmerkung: Dies erstreckt sich jedoch in keinem Fall auf mit xsl:message erzeugte Dokumentknoten oder temporäre Bäume unabhängig vom Vorhandensein oder Wert des default-validation-Attributs.)

Der Defaultwert bei Abwesenheit des Attributs ist "strip". Die erlaubten Werte sind "preserve" und "strip".

Definiert wird zum einen der Defaultwert des validation-Attributs aller im Stylesheet enthaltenen xsl:element-, xsl:attribute-, xsl:copy-, xsl:copy-of- und xsl:result-document-Instruktionen. Weiterhin erstreckt sich seine Wirkung auch auf Literal Result Elements (die alternativ auch jeweils ein xsl:validation-Attribut besitzen dürfen).

Zum anderen bestimmt der Wert des default-validation-Attributs das Validierungsverhalten gegenüber dem primären Ergebnisbaum, der durch das Stylesheet erzeugt wird. Für sekundäre Ergebnisbäume können in der entsprechenden xsl:result-document-Instruktion mittels des validation-Attributs separate Validierungsvorschriften gemacht werden.

Der Gültigkeitsbereich des Attributwertes erstreckt sich nur auf das Stylesheetmodul, in dem das Attribut steht, nicht auf von diesem importierte oder inkludierte externe Stylesheetmodule.

Die Werte des Attributs haben im Einzelnen folgende Wirkung:

default-validation="preserve"
Der Wert "preserve" erhält eine möglicherweise bestehende Bindung an einen bestimmten Datentyp.

default-validation="strip" (Default)
Der Wert "strip" löst jegliche eventuell vorhandene Datentypbindung und weist einem Attributknoten den Typ xs:untypedAtomic, einem Elementknoten den Typ xs:untyped zu.

Hinweis: Diese Erläuterungen gelten ebenfalls für das gleichnamige Attribut von xsl:transform. Das default-validation-Attribut existiert nicht in XSLT 1.0.

exclude-result-prefixes (auch Standardattribut)

Wert

tokens | "#default" | "#all"

Verwendung

optional

Einführung

XSLT 1.0

Das Attribut exclude-result-prefixes dient dazu, das Kopieren von Namensraumpräfixen und den dazugehörigen Namensräumen ins Ergebnisdokument für die genannten Namensraumpräfixe zu unterbinden. Der Attributwert besteht aus einer Tokenliste, die aus einer durch Leerzeichen getrennten Aufzählung der zu unterdrückenden Präfixe besteht. Alle an diese Präfixe gebundenen Namensraum-URIs gelten als ausgeschlossen (excluded).

Der Default-Namensraum, durch das Attribut xmlns (ohne beigefügtes Präfix) bezeichnet, kann mit #default der Ausschlussliste hinzugefügt werden.

Mittels des Kürzels #all können alle Namensräume ohne Ausnahme vom Kopieren ins Ergebnisdokument ausgeschlossen werden. In diesem Fall werden weitere, im Attribut genannte Präfixe nicht weiter ausgewertet (da ihre Namenräume ohnehin ausgeschlossen werden).

Die Ausschlussliste ist gültig für den gesamten Inhalt des xsl:stylesheet-Elements, in dem das Attribut gesetzt ist, allerdings nur für das betreffende Stylesheetmodul. Seine Gültigkeit erstreckt sich nicht auf von diesem importierte oder inkludierte externe Stylesheetmodule (in diesen muss das Attribut jeweils separat gesetzt werden).

Hinweis: Diese Erläuterungen gelten ebenfalls für das gleichnamige Attribut von xsl:transform.

extension-element-prefixes (auch Standardattribut)

Wert

tokens | "#default"

Verwendung

Optional

Einführung

XSLT 1.0

Elemente innerhalb von XSLT-Stylesheets können als Erweiterungsinstruktionen gekennzeichnet werden. Sie werden dafür an einen speziellen Namensraum gebunden, der in xsl:stylesheet deklariert wird. Zusätzlich wird der deklarierte Namensraum in der Tokenliste des Attributs extension-element-prefixes aufgeführt und so als den Erweiterungsinstruktionen zugehörig erklärt. Dies verhindert gleichzeitig, dass der entsprechende Namensraum in das Ergebnisdokument kopiert wird.

Die Kennzeichnung eines Namensraumpräfixes gilt ab einschließlich dem das Attribut enthaltenden Element für den gesamten von diesem abstammenden Stylesheetzweig (hier also für das gesamte Stylesheetmodul). Das Attribut arbeitet kumulativ, d.h., die erneute Anwendung auf einen Teilzweig des Geltungsbereichs addiert die neuen Deklarationen zu den vorhandenen, statt diese zu überschreiben.

Der Default-Namensraum der xmlns-Deklaration kann der Tokenliste hinzugefügt werden. Da er kein Präfix besitzt, wird er durch den Wert #default bezeichnet.

Der Gültigkeitsbereich des Attributs bezieht sich nur auf das Stylesheetmodul, das das Attribut enthält, nicht auf von diesem importierte und inkludierte externe Stylesheetmodule.

Hinweis: Diese Erläuterungen gelten ebenfalls für das gleichnamige Attribut von xsl:transform.

id (auch Standardattribut)

Wert

id

Verwendung

optional

Einführung

XSLT 1.0

Das id-Attribut dient in diesem Zusammenhang zur Einbindung eines Stylesheets, das in Form eines eingebetteten xsl:stylesheet-Elements innerhalb des XML-Dokuments vorliegt, das es verarbeiten soll (embedded stylesheet).

Der Aufruf erfolgt in der Regel direkt aus dem beherbergenden XML-Dokument über eine XSL-Processing-Instruction, die den Identifierwert als Fragment-Identifier verwendet, etwa in der Form

<?xml-stylesheet type="text/xml" href="#identifier"?>

Hinweis: Diese Erläuterungen gelten ebenfalls für das gleichnamige Attribut von xsl:transform.

input-type-annotations

Wert

"preserve" | "strip" | "unspecified"

Verwendung

optional

Einführung

XSLT 2.0

Das Attribut input-type-annotations erlaubt, sämtliche Typannotationen aus dem Inputbaum zu entfernen und diese für Elementknoten durch xs:untyped und für Attributknoten durch xs:untypedAtomic zu ersetzen.

Das Stylesheet ist so in der Lage, stets die gleiche Ausgabe zu erzeugen, unabhängig davon, ob das Eingabedokument gegen ein Schema validiert, also mit Typannotationen versehen wurde, oder nicht.

Ist ein Stylesheet modular aufgebaut, müssen allerdings alle Module, die das Attribut einsetzen, hierfür den gleichen Wert verwenden. Es ist ein statischer Fehler (ERR XTSE0265), wenn beispielsweise ein Modul input-type-annotations="strip" anordnet und ein anderes input-type-annotations="preserve". Es genügt, wenn das Attribut in einem einzigen Modul gesetzt ist (egal in welchem).

Die Werte "preserve" und "unspecified" lassen die Typannotationen bestehen. Der Wert "strip" hingegen wirkt sich wie folgt auf den Inputbaum aus:

  • Die Typannotationen aller Elementknoten wird auf xs:untyped gesetzt.
  • Die Typannotation aller Attributknoten wird auf xs:untypedAtomic gesetzt.
  • Als typisierter Wert aller Element- und Attributknoten wird ihr Stringwert angenommen und dieser als Instanz von xs:untypedAtomic betrachtet.
  • Das nilled-Property aller Elementknoten wird auf false gesetzt. 

Die Werte der is-id- und is-idrefs-Properties werden dabei nicht angetastet.

Hinweis: Diese Erläuterungen gelten ebenfalls für das gleichnamige Attribut von xsl:transform. Das Attribut existiert nicht in XSLT 1.0.

version (auch Standardattribut)

Wert

number

Verwendung

obligatorisch

Einführung

XSLT 1.0

Das version-Attribut ist obligatorisch zu setzen. Es bezeichnet mit einer (positiven) Dezimalzahl xs:decimal den Versionsstand von XSLT, der innerhalb dieses Stylesheets (bzw. innerhalb des Moduls) verwendet wird. Handelt es sich nicht um eine Dezimalzahl, so ist dies ein Fehler (ERR XTSE0110). Für XSLT 2.0 muss version="2.0" gesetzt werden, für XSLT 1.0 version="1.0". (Anmerkung: Der Wert "1.1" für XSLT 1.1 sollte nicht (mehr) verwendet werden, da diese Spezifikation zurückgezogen wurde. Es gibt jedoch einige Prozessoren, die diesen Versionsstand unterstützen.)

Hinweis: Der Wert des versions-Attributs bestimmt das Verhalten des Prozessors gegenüber dem Stylesheet – normale, vorwärtskompatible Verarbeitung (FC-mode) oder rückwärtskompatible Verarbeitung (BC-mode). Mehr zu diesem Aspekt unter Vorwärts- und Rückwärtskompatibilität.

Hinweis: Diese Erläuterungen gelten ebenfalls für das gleichnamige Attribut von xsl:transform.

xpath-default-namespace (auch Standardattribut)

Wert

uri-String

Verwendung

optional

Einführung

XSLT 2.0

Dieses Attribut deklariert einen innerhalb von XPath-Ausdrücken zu verwendenden Default-Namensraum für alle Elemente ohne Namensraumpräfix. (Anmerkung: Dies ist ausdrücklich nicht dasselbe wie der Default-Namensraum »xmlns« für präfixlose Elemente innerhalb des Stylesheets selbst!) Das Attribut wirkt sich somit auf die Interpretation von XPath-Pattern aus.

Attributwert von xpath-default-namespace ist ein URI, der diesen Namensraum bezeichnet. Der Defaultwert bei Abwesenheit des Attributs ist der leere String (Null-Namensraum).

Der Grund für die Einführung des Attributs sind Probleme mit XPath-Ausdrücken, die auf Elemente ohne Präfix zielen, die im Gültigkeitsbereich einer xmlns-Default-Namensraumdeklaration sind (deren Namensraum dann also nicht-Null ist). Bei einem NameTest auf ein präfixloses Element in einem XPath-Ausdruck wird jedoch, entsprechend den Regeln der Spezifikation, von vornherein stets ein so genannter Null-Namensraum angenommen (der expanded name entspricht dann dem local name) und auf diesen hin getestet.

Ein mit xmlns="http://defaultnamensraum" deklarierter Default-Namensraum, der im Dokumentkontext für Elemente ohne Präfix gilt, wird im XPath-Kontext nicht berücksichtigt, sodass der gesuchte Knoten wegen der angenommenen Nichtübereinstimmung der Namensräume nicht erkannt würde. Mittels des xpath-default-namespace-Attributs kann statt des voreingestellten Null-Namensraums ein beliebiger anderer Namensraum-URI angegeben werden.

Der mit xpath-default-namespace definierte Namensraum gilt für alle XPath-Ausdrücke innerhalb des Stylesheetmoduls, in dem das Attribut steht, und für den ganzen von diesem abstammenden Zweig. Innerhalb von Teilzweigen kann er aber durch neue Deklarationen überschrieben werden.

Der so definierte Namensraum gilt nicht auf der Attribut- und Namensraumachse. Er bezieht sich im Rahmen von XPath-Ausdrücken nur auf Bezeichner von Elementen innerhalb eines NameTests, nicht aber auf andere Bezeichner die ebenfalls QNames sind, beispielsweise Funktionen, Variablen oder im Rahmen der Funktion key() aufgerufene Bezeichner (auch wenn diese ohne Präfix in XPath-Ausdrücken stehen sollten).

Hinweis: Diese Erläuterungen gelten ebenfalls für das gleichnamige Attribut von xsl:transform. Das xpath-default-namespace-Attribut existiert nicht in XSLT 1.0.

Verwendungszweck:

Das Element xsl:stylesheet ist das Wurzelelement des XSLT-Stylesheets und enthält somit den gesamten Stylesheetrumpf. Innerhalb des Starttags des Elements werden die global für das Stylesheet gültigen Namensräume deklariert und wird die Versionsnummer der zugrunde gelegten XSLT-Version angegeben.

Aufbau des Inhaltes von xsl:stylesheet:

Als unmittelbare Kindelemente von xsl:stylesheet sind die XSLT-Toplevel-Elemente zugelassen – zu diesen zählen in XSLT 1.0 zwölf, und in XSLT 2.0 fünfzehn XSLT-Elemente:

Toplevel-Elemente von XSLT 1.0

xsl:attribute-set

xsl:output

xsl:decimal-format

xsl:param

xsl:import

xsl:preserve-space

xsl:include

xsl:variable

xsl:key

xsl:strip-space

xsl:namespace-alias

xsl:template

Tabelle: Liste der Toplevel-Elemente von XSLT 1.0.

Toplevel-Elemente von XSLT 2.0

xsl:attribute-set

xsl:namespace-alias

xsl:character-map

xsl:output

xsl:decimal-format

xsl:param

xsl:function

xsl:preserve-space

xsl:import

xsl:variable

xsl:import-schema

xsl:strip-space

xsl:include

xsl:template

xsl:key

 

Tabelle: Liste der Toplevel-Elemente von XSLT 2.0

Außer diesen sind als Inhalte lediglich Erweiterungsinstruktionen oder sogenannte userdefinierte Datenelemente erlaubt, die mittels eines Präfix und einem nicht leeren Namensraum als solche gekennzeichnet sind. Unmittelbare Child-Elemente mit Null-Namensraum sind folglich grundsätzlich verboten. Textknoten, die nicht ausschließlich aus Weißraumzeichen bestehen, dürfen in xsl:stylesheet ebenfalls nicht auftreten. Kommentare dagegen sind, wie in jedem XML-Dokument, überall erlaubt.

Die Reihenfolge der in xsl:stylesheet enthaltenen Deklarationen ist für den eigentlichen Ablauf der Transformation irrelevant – abgesehen davon, dass aus technischen Gründen xsl:import-Deklarationen stets vor allen anderen Anweisungen stehen müssen.

Lediglich für kollidierende Deklarationen (beispielsweise Template-Regeln mit identischem match-Pattern) kann die Reihenfolge von Bedeutung sein, falls der Prozessor nicht entsprechende Doubletten von vornherein als Fehler ansieht.

Das übliche (jedoch nicht vorgeschriebene) Verhalten des XSLT-Prozessors besteht darin, die in Dokumentreihenfolge als letzte erscheinende Deklaration als maßgeblich zu betrachten und die vor diesen stehenden zu verwerfen.

Dieser Mechanismus ist bedeutsam im Zusammenhang mit durch xsl:include inkludierten Stylesheetmodulen. Mit Hilfe von xsl:next-match können solcherart überschriebene Template-Regeln (in XSLT 2.0) unter bestimmten Umständen sogar reaktiviert werden; in XSLT 1.0 ist dies nicht möglich.

Im Fall von importierten Stylesheetmodulen (mit xsl:import) wird Kollisio­nen durch die niedrigere Präzedenz (Rangordnung) importierter Deklarationen vorgebeugt. Dies gilt nicht für alle Deklarationen: Gleichbenannte Deklaratio­nen wie xsl:key addieren sich ungeachtet ihrer Importpräzedenz, bei namens­gleichen Dubletten von xsl:output oder xsl:decimal-format gilt im Kon­fliktfall jeweils das Property mit der höchsten Präzedenz.

Ansonsten werden alle Deklarationen, ähnlich Subroutinen eines Programms, zunächst statisch eingelesen und dabei auf Korrektheit geprüft (hierbei entdeckte »statische« Fehler blockieren die Verarbeitung bereits vor ihrem eigentlichen Start – im Gegensatz dazu stehen die erst zur Laufzeit zu Tage tretenden »dynamischen« Fehler).

Auswirkungen des version-Attributs
Mittels des version-Attributs wird die dem Stylesheet insgesamt zugrunde gelegte XSLT-Version deklariert. Die Aus­wirkung des Wertes des version-Attributs auf den Ablauf der Transformation ist davon abhängig, welchen Versionsstand von XSLT der verarbeitende Prozes­sor unterstützt.

Derzeit ist nur mit XSLT-Prozessoren zu rechnen, die entweder auf XSLT 1.0 oder 2.0 eingerichtet sind (XSLT 1.1 wird gelegentlich unterstützt, ist als Stan­dard aber zurückgezogen).

Ein zu XSLT 2.0 kompatibler Prozessor wird ein mit version="2.0" bezeich­netes Stylesheet problemlos verarbeiten, ein mit version="1.0" gekennzeich­netes entweder zurückweisen oder – wahrscheinlicher – im rückwärtskompa­tiblen (backwards-compatible) Modus (d.h. gemäß den Regeln von XSLT 1.0 und XPath 1.0) verarbeiten. Ist im Stylesheet ein Versionsstand größer als "2.0" angegeben, so wechselt der XSLT 2.0-Prozessor in den vorwärtskompatiblen Modus.

Ein zu XSLT 1.0 kompatibler Prozessor kann ein Stylesheet dann problemlos verarbeiten, wenn es den Versionsstand version="1.0" aufweist. Ein Styles­heet mit version="2.0" (oder höher) wird er jedoch nicht zurückweisen, son­dern im so genannten vorwärtskompatiblen (forwards-compatible) Modus aus­führen: Unbekannte Deklarationen werden ignoriert, für unbekannten Instruktionen werden in diese eingeschlossene xsl:fallback-Elemente ausge­führt.

Hinweis – Einsatz von xsl:fallback für rückwärtskompatible Verarbeitung:
Besteht die Möglichkeit, dass ein XSLT 2.0-Stylesheet von einem älteren Prozessor verarbeitet werden muss, so sollten unbedingt Maßnah­men zur Gewährleistung seiner Abwärtskompatibilität in Form von Fall­back-Elementen bzw. zur Prüfung der Verfügbarkeit neuerer Instruktionen und Funktionen vorgenommen werden.

Deklaration der Namensräume:

Pflicht für jedes XSLT-Stylesheet ist die Deklaration des XSLT-Namensraums für die XSLT-Instruktionen. In der Regel (jedoch nicht zwangsläufig) wird der Namensraum an das Präfix xsl: gebun­den:

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

Weitere Namensräume können bzw. müssen zusätzlich deklariert werden, falls Erweiterungsinstruktionen oder vordefinierte Elemente bzw. Typen anderer XML-Anwendungen (z.B. XSL-FO oder XML Schema) innerhalb des Stylesheets verwendet werden sollen. Die Reihenfolge der Pseudo-Attribute der Namens­raumdeklarationen ist irrelevant. Es dürfen mehrere Präfixe (in entsprechend vielen Deklarationen) an denselben Namensraum-URI gebunden sein, jedoch nicht umgekehrt.

Darüber hinaus kann mit xmlns="http://mein_defaultnamensraum" ein Default-Namensraum für diejenigen Elemente innerhalb des Stylesheets ohne Präfix hinzugefügt werden.

Beispiel:
Sollen zusätzlich zu XSLT-Instruktionen auch Elemente aus XSL-Formatting Objekts eingesetzt werden, so muss der entsprechende Namens­raum ebenfalls vereinbart werden:

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

Folgende festgelegte Namensraum-URIs sind gebräuchlich:

Der XSLT Namensraum – seine Verwendung ist obligatorisch:
"http://www.w3.org/1999/XSL/Transform"
Dieser Namensraum und das an ihn gebundene Präfix dient zur Identifizierung von XSLT-Elemen­ten, -Attributen und weiteren Bezeichnern, die im Rahmen der XSLT-Spezifi­kation besondere Bedeutung besitzen. Der Namensraum gilt für XSLT 1.0 und XSLT 2.0. Gängiges Präfix ist xsl.

Der Namensraum für XPath 2.0-Funktionen:
"http://www.w3.org/2005/xpath-functions"
Dieser Namens­raum kann eingesetzt werden, um Funktionen aus dem XPath 2.0-Core (siehe »XPath/XQuery Functions and Operators«) eindeutig als solche zu kennzeichnen. Die meisten Prozessoren werden die Funktionen voraussichtlich jedoch auch über ihren (lokalen) Namen erkennen. Will man die Funktionsbezeichner mit Präfix versehen, sollte man dieses an diesen Namensraum-URI binden. Gängiges Präfix ist fn. (In XPath 1.0 ist dieser Namensraum nicht gültig.)

Der XML Schema Namensraum:
"http://www.w3.org/2001/XMLSchema"
Mit diesem Namensraum können vordefinierte (built-in) Datentypen aus XML Schema und die ent­sprechenden Konstruktorfunktionen gekennzeichnet werden. Gängiges Präfix ist xs.

Der XML-Namensraum:
"http://www.w3.org/XML/1998/namespace"
Der XML-Namensraum ist in der Spezifikation »XML Namespaces 1.0« für alle XML-Dokumente vordefiniert. Es ist deshalb nicht erforderlich, ihn in xsl:stylesheet extra zu deklarieren. Explizit referenziert wird er bei der Verwendung der Standardattribute xml:lang und xml:space. Festes, unveränderliches Präfix ist xml.

Beispiele:

Beispiel 1 – Einfache Stylesheetdeklaration:

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

Dieses XSLT 1.0-Stylesheet beschränkt sich auf die Deklaration des version-Attributs und des XSLT-Namensraums. Ein XSLT 2.0-Prozessor würde es in rückwärtskompatiblem Modus verarbeiten.

Beispiel 2 – Stylesheetdeklaration für XSLT 2.0-Stylesheet:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2003/05/xpath-functions" xmlns:xs="http://www.w3.org/2001/XMLSchema-datatypes" >
  <!-- Stylesheetinhalt -->
</xsl:stylesheet>

Dieses XSLT 2.0-Stylesheet deklariert sein version-Attribut und drei Namens­räume: den von XSLT, den XPath-Funktions-Namensraum und den für XML Schema-Datentypen. Ein XSLT 1.0-Prozessor würde dieses Stylesheet in vor­wärtskompatiblem Modus verarbeiten.

Beispiel 3 – Namensraum des Quelldokuments im Stylesheet:

Quelldokument:

<?xml version="1.0" encoding="ISO-8859-1"?>
<beispiel xmlns:spezial="http://mein.spezialnamensraum">
  <test>Ein Testelement</test>
  <spezial:test>Ein spezielles Testelement</spezial:test>
</beispiel>

Im XML-Dokument ist ein Namensraum mit Präfix spezial: vereinbart.

Stylesheet (Ausschnitt):

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:spezial="http://mein.spezialnamensraum" exclude-result-prefixes="spezial">
  <xsl:template match="beispiel">
    <ergebnis>
      <xsl:apply-templates/>
    </ergebnis>
  </xsl:template>
  <xsl:template match="test">
    <ausgabe>Das ist ein Testelement!</ausgabe>
  </xsl:template>
  <xsl:template match="spezial:test">
    <ausgabe>Das ist ein Spezial-Testelement!</ausgabe>
  </xsl:template>
</xsl:stylesheet>

Da mit zwei Template-Regeln zwischen test und spezial:test unterschieden werden soll, muss der spezial-Namensraum auch im Stylesheet deklariert werden. Das exclude-result-prefix-Attribut verhindert jedoch, dass er auch in das Ergebnisdokument kopiert wird.

Ergebnisdokument:

<?xml version="1.0" encoding="UTF-8"?>
<ergebnis>
  <ausgabe>Das ist ein Testelement!</ausgabe>
  <ausgabe>Das ist ein Spezial-Testelement!</ausgabe>
</ergebnis>
  

Der spezial-Namensraum ist im Ergebnisdokument nicht vorhanden und wird hier auch gar nicht benötigt. Wäre das exclude-result-prefixes-Attri­but jedoch weggelassen worden, so wäre er dennoch kopiert worden:

<?xml version="1.0" encoding="UTF-8"?>
<ergebnis xmlns:spezial="http://mein.spezialnamensraum">...</ergebnis>

Wären die Namenräume für Funktionen und Schema-Datentypen im Stylesheet vorhanden, so hätten diese ebenfalls vom Kopieren ausgeschlossen werden müssen. Lediglich der XSLT-Namensraum selbst ist vom Kopieren automatisch ausgeschlossen.

Elementdefinition:

XSLT 1.0:

<!-- Category: root-element -->
<xsl:stylesheet 
     id = id 
     extension-element-prefixes = tokens 
     exclude-result-prefixes = tokens 
     version = number>

     <!-- Content: (xsl:import*, top-level-elements) -->
</xsl:stylesheet>

XSLT 2.0:

<!-- Category: root-element -->
<xsl:stylesheet
      id? = id
      extension-element-prefixes? = tokens
      exclude-result-prefixes? = tokens
      version = number
      xpath-default-namespace? = uri
      default-validation? = "strict" | "lax" | "preserve" | "strip">
 
      <!-- Content: (xsl:import*, other-declarations) -->
</xsl:stylesheet>
   
<xsl:stylesheet
   id? = id
   extension-element-prefixes? = tokens
   exclude-result-prefixes? = tokens
   version = number
   xpath-default-namespace? = uri
   default-validation? = "preserve" | "strip"
   default-collation? = uri-list
   input-type-annotations? = "preserve" | "strip" | "unspecified">
 
   <!-- Content: (xsl:import*, other-declarations) -->
</xsl:stylesheet>
  
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Galileo Press, Rheinwerkallee 4, 53227 Bonn