xsl:document

(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

 

Die Instruktion xsl:document wird eingesetzt, wenn ein im Zuge einer Transformation erzeugter temporärer Dokumentbaum validiert werden muss.

Klassifizierung Instruktion
Funktionsgruppe Temporären Baum erzeugen
Einführung XSLT 2.0

Position im Stylesheet und erlaubte Inhalte:

Die Instruktion xsl:document darf in XSLT-Elementen eingesetzt werden, die einen temporären oder nicht als Dokument serialisierten Baum erzeugen.

Die Instruktion enthält einen Sequenzkonstruktor, der eine Knotensequenz erzeugt, die als Dokumentbaum fungieren soll.

Attribute:

Für xsl:document gelten die Standardattribute. Die Instruktion besitzt zudem zwei optionale elementspezifische Attribute validation und type.

type

Wert

QName

Verwendung

Optional

Einführung

XSLT 2.0

Da der erzeugte Dokumentknoten selbst keinen Typ besitzt, wird das type-Attribut nicht unmittelbar auf diesen angewendet. Der hier übergebene QName eines Schema-Datentyps bezieht sich vielmehr auf den Typ des primären Knotens des erzeugten Dokumentbaums, also dessen Wurzelelementknoten. Es ist ein statischer Fehler, wenn keine Deklaration mit dem übergebenen QName existiert (ERR XTSE1520).

Das folgende Verfahren des Validierung des Wurzelelementknotens entspricht dem für Elementknoten üblichen (Anmerkung: Eine formale, allerdings recht theoretische Beschreibung des Verfahrens finden Sie in der Spezifikation zu XML Schema, Teil 1, Abschnitt 3.3.4): Ist die Validierung erfolgreich, d.h., hat das validity-Property des entsprechend erzeugten PSVI für den Knoten den Wert valid, so wird der übergebene Datentyp mit dem Element verknüpft, andernfalls wird die Verarbeitung des Stylesheets abgebrochen (ERR XTTE1540).

validation

Wert

"strict" | "lax" | "preserve" | "strip"

Verwendung

Optional

Einführung

XSLT 2.0

Das valida­tion-Attribut bestimmt, ob und gemäß welcher Vorschrift das Wurzelelement des Dokumentknotens des erzeugten Dokumentbaums validiert wird. Es gibt keinen direkten Defaultwert: Bei Abwesenheit des Attributs wird stattdessen der Wert des default-validation-Attributs des Stylesheet-Elements (xsl:stylesheet oder xsl:transform) verwendet, in dem sich die Instruk­tion befindet. Ist das default-validation-Attribut im Stylesheet-Element nicht gesetzt, so gilt dessen Defaultwert strip.

Die vier möglichen expliziten Werte des validation-Attributs sind strict, lax, preserve und strip – sie haben im Einzelnen folgende Wirkung:

  • validation = "strict"
    Der Wert strict erzwingt eine strikte Validierung des Wurzelelements des Dokumentbaums gemäß eines Schemas. Das ent­sprechende Wurzelelement und sein erlaubter Inhalt müssen also in einem Schema deklariert sein, das an dieser Stelle mit Hilfe der in XML Schema üblichen Methoden zur Verfügung stehen muss. Dies kann beispielsweise implizit über den verwendeten Namensraum oder explizit für dessen Ele­mente über ein ihnen beigefügtes xsi:schemaLocation-Attribut geschehen. Das so für den Knoten ermittelte validity-Property im Rahmen des ent­sprechenden PSVI muss den Wert valid besitzen – in diesem Fall erhält das Wurzelelement die entsprechende Typbindung. Bestehende Typbindun­gen innerhalb des Dokumentbaums bleiben erhalten. Hat das Property den Wert invalid oder notKnown, so schlägt die Transformation an dieser Stelle mit einem Typfehler (type error) fehl. Ein Typfehler tritt ebenfalls auf, wenn der Inhalt des Dokumentknotens neben einem einzigen Elementknoten (dem Wurzelelement) nicht ausschließlich aus Kommentar und PI-Knoten besteht.
  • validation = "lax"
    Der Wert lax erfordert eine Validierung des Wurzel­elements des erzeugten Dokumentbaums gemäß eines zur Verfügung stehenden Sche­mas – allerdings gilt es nicht als Fehler, wenn kein solches Schema zur Verfügung steht oder das Wurzelelement im Rahmen eines vorhandenen Schemas nicht deklariert ist. Das für den Knoten ermittelte validity-Property darf also neben valid auch den Wert notKnown besitzen. In letzterem Fall wird dem (nicht validierten) Wurzelelement der Typ xs:untyped zugewiesen. Die bestehenden Typbindungen innerhalb des Dokumentbaums bleiben erhalten. Hat das validity-Property dagegen den Wert invalid, so schlägt die Transformation an dieser Stelle mit einem Typfehler (type error) fehl. Ein Typfehler tritt ebenfalls auf, wenn der Inhalt des Dokumentknotens neben einem einzigen Elementknoten (dem Wurzelelement) nicht ausschließlich aus Kommentar und PI-Knoten besteht.
  • validation = "preserve"
    Der Wert preserve erhält im validierten Dokumentbaum die Bindung von Elementen und Attributen an bestimmte Datentypen, sofern diese explizit erfolgt ist. Eine explizite Bindung kann bei­spielsweise durch Verwendung des validation-Attributes bei xsl:element oder xsl:copy-of vorgenommen sein. Für alle anderen Element- und Attri­butknoten wird eine eventuelle Typbindung aufgelöst – ihnen wird der Datentyp xs:anyType für Elemente und xs:anySimpleType für Attribute zugewiesen. Dies entspricht für diese Knoten dem Verhalten bei valida­tion="none".
  • validation = "strip"
    Der Wert strip löst für alle Knoten innerhalb des validierten Dokumentbaums jegliche erfolgte Datentypbindung und weist allen Elementknoten den Typ xs:untyped und allen Attributknoten den Typ xs:anySimpleType zu.

Verwendungszweck:

Die Instruktion xsl:document erzeugt einen Dokumentknoten in der gleichen Weise, wie dies auch mittels xsl:result-document geschieht. Der Inhalt des neu erzeugten Dokuments ergibt sich aus dem in der Instruktion enthaltenen Sequenzkonstruktor. Der Dokumentkno­ten kann unmittelbar der Ergebnissequenz hinzugefügt werden, oder – dann als temporärer Baum – in einer Variable abgelegt werden.

Zusätzlich – und hierin besteht der Hauptzweck der Instruktion – kann das erzeugte Dokument bei der Erzeugung validiert werden. Hierfür stehen der Instruktion entweder das validation- oder alternativ das type-Attribut zur Verfügung.

Mit Hilfe der Instruktion wird es möglich, einen temporären Dokumentbaum, wie er in einer Variable erzeugt wird, unmittelbar zu validieren. Ansonsten könnte dies erst zum Zeitpunkt der Referenzierung der Variable geschehen, wenn der Baum beim Kopieren mit xsl:copy (das, im Gegensatz zu xsl:variable selbst, die entsprechenden Möglichkeiten bietet) validiert wird:

<xsl:variable name="temp-baum">
  <xsl:document validation="strict">
    <!-- Erzeugung des Baums -->
  </xsl:document>
</xsl:variable>

Hintergedanke ist, den temporären Dokumentbaum möglichst frühzeitig vali­dieren zu können, um den möglicherweise auftretenden Fehler unmittelbar mit der Erzeugung des Baums zusammenfallen zu lassen.

Elementdefinition:

XSLT 1.0:

Element in XSLT 1.0 nicht verfügbar.

XSLT 2.0:

<!-- Category: instruction -->
<xsl:document
     validation? = "strict" | "lax" | "preserve" | "strip"
     type? = sequence-type >

   <!-- Content: sequence-constructor -->

</xsl:document>
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