xsl:import-schema

(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

 

Man verwendet das Toplevel-Element xsl:import-schema, um XML Schema-Definitionen, die für die Verarbeitung des Stylesheets benötigt werden, statisch verfügbar zu haben. Es wird zwingend ein »Schema-Aware XSLT Processor« vorausgesetzt.

Klassifizierung Deklaration
Funktionsgruppe Import von Schema-Datentypen
Einführung XSLT 2.0

Position im Stylesheet und erlaubte Inhalte:

xsl:import-schema gehört zu den Toplevel-Elementen, tritt also ausschließlich als unmittelbares Child-Element der Root-Elemente xsl:stylesheet bzw. xsl:transform auf.

Das Element kann optional eine Schema-Deklaration <xs:schema> enthalten. In diesem Fall muss das schema-location-Attribut entfallen.

Attribute:

Es gelten die Standardattribute. Desweiteren besitzt die Deklaration xsl:import-schema zwei optionale, alternativ zu verwendende Attribute namespace und schema-location. Eines der beiden Attribute sollte (sinnvollerweise) gesetzt werden.

namespace

Wert

uri-reference

Verwendung

Optional

Einführung

XSLT 2.0

Das namespace-Attribut bezeichnet den Namensraum-URI, der für die zu importierenden Definitionen in Verwendung ist. Der leere String ist als Wert verboten, da er keinen gültigen Namensraum-URI darstellt.

Hinweis: Das namespace-Attribut von xsl:import-schema deklariert nicht gleichzeitig den betreffenden Namensraum für das Stylesheet selbst! Dies muss zusätzlich im Rahmen einer Namensraumdeklaration im Wurzelelement xsl:stylesheet erfolgen.

schema-location

Wert

uri-reference

Verwendung

Optional

Einführung

XSLT 2.0

Das schema-location-Attribut enthält einen URI-String, der die relative oder absolute Adresse eines XML Schema-Dokuments darstellt, das die zu importierenden Definitionen enthält. Das Attribut kann nur alternativ zu einem Inhalt der Deklaration verwendet werden.

Hinweis: Wird das schema-location-Attribut eingesetzt, obwohl die Deklaration über einen Inhalt in Form einer Schema-Definition <xs:schema> verfügt, so gilt dies als statischer Fehler (ERR XTSE0215).

Verwendungszweck:

Die xsl:import-schema-Deklaration wird einge­setzt, um Schema-Komponenten in Form von Typdefinitionen bzw. Toplevel-Element- oder Attributdeklarationen aus einer externen XML Schema-Datei zu importieren und diese so im statischen Kontext zur Verfügung zu stellen.

Sie wird ebenfalls benötigt, wenn zur Prüfung eines Stylesheets während dessen Einlesens – mit anderen Worten, bevor ein Quelldokument verarbeitet wird – externe XML Schema-Definitionen benötigt werden. Durch den Import von externen Definitionen wird beispielsweise eine statische Prüfung von Style­­sheets möglich, für die ein Quelldokument mit verknüpftem XML Schema noch nicht zur Verfügung steht.

Die Anweisung kann nur durch einen Schema-Aware-XSLT-Processor verar­beitet werden.

Die importierten, userdefinierten Typen stehen anschließend in allen Style­­sheetmodulen neben den in XML Schema und XPath 2.0 vordefinierten Typen (built-in types) zur Verfügung: Sie können also im Rahmen von Typumwandlun­gen verwendet werden, beispielsweise um explizite Typumwandlung in user­definierte Typen vorzunehmen.

Importierte Element- oder Attributdeklarationen werden in den statischen Kontext eingegliedert und können damit ebenfalls in allen Stylesheetmodulen zur Formulierung von Sequenztyp-Ausdrücken innerhalb von type- oder as-Attributen entsprechender XSLT-Instruktionen eingesetzt werden.

Zum Auffinden der Schemadateien bzw. der zu importierenden Definitionen dienen die URI-Strings aus dem schema-location- oder alternativ dem name­space-Attribut. Diese Informationen können verwendet werden, um entweder ein externes Schema-Dokument unmittelbar zu identifizieren (über seinen URI oder das targetNamespace-Attribut des xsd:schema-Wurzelelements) oder aber Schema-Definitionen, die in einem für die Anwendung erreichbaren (lokalen) Repository gelagert sein können.

Werden beide Attribute gleichzeitig verwendet, so muss das identifizierte Schema-Dokument auch für den genannten Namensraum gültig sein:

Das Schema-Dokument beispiel.xsd

<xsd:schema targetNamespace="http://beispielnamensraum" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
  <xsd:element name="test" type="xsd:string"/> 
</xsd:schema>

könnte folgendermaßen lokalisiert werden:

<xsl:import-schema schema-location="beispiel.xsd" namespace="http://beispielnamensraum"/>

aber auch mit jedem einzelnen der Lokalisierungs-Attribute:

<xsl:import-schema schema-location="beispiel.xsd"/>
<xsl:import-schema namespace="http://beispielnamensraum"/>

Das genaue Vorgehen zum Auffinden der entsprechenden Ressource ist nicht spezifiziert und bleibt damit der jeweiligen Implementierung überlassen.

Ist der XSLT-Prozessor aufgrund der in den namespace- und schema-location-Attributen zur Verfügung gestellten Angaben nicht in der Lage, das entspre­chende Schema zu lokalisieren, oder erweist sich die aufgefundene Ressource als ungültig bzw. wegen mehrdeutiger Definitionen als nicht verwendbar, so gilt dies als statischer Fehler. Eine Verarbeitung des Stylesheets ist in diesem Fall nicht möglich.

Elementdefinition:

XSLT 1.0:

Element in XSLT 1.0 nicht verfügbar.

XSLT 2.0:

<!-- Category: declaration -->
<xsl:import-schema
  namespace? = uri-reference
  schema-location? = uri-reference>
  <!-- Content: xs:schema? -->
</xsl:import-schema>
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