Typen zur Sicherheit und Genauigkeit verwenden

(Auszug aus "XSLT Kochbuch" von Sal Mangano)

Problem

Die eingeschränkte Typprüfung von XSLT 1.0 begrenzte die Robustheit Ihrer Stylesheets.

Lösung

Verwenden Sie das erweiterte Typsystem von XSLT 2.0, um genaue und typsichere Funktionen und Templates zu schaffen.

Verwenden Sie das as-Attribut bei Elementen, die Daten enthalten oder zurückgeben.

Zu diesen Elementen gehören xsl:function, xsl:param, xsl:template, xsl:variable und xsl:with-param.

Verwenden Sie das type-Attribut bei Elementen, die Daten erzeugen.

Zu diesen Elementen gehören xsl:attribute, xsl:copy, xsl:copy-of, xsl:document, xsl:element und xsl:result-document.

Diskussion

Alle Standard-konformen XSLT 2.0-Prozessoren erlauben es Ihnen, die einfachen Datentypen wie xs:integer oder xs:string zu verwenden, um Variablen oder Parameter zu beschreiben. Diese Typen können außerdem mit den Symbolen *, + und ? benutzt werden, um Folgen dieser einfachen Typen zu beschreiben:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" >
  <!-- x ist eine Folge aus null oder mehreren Strings -->
  <xsl:variable name="x" select="para" as="xs:string*"/>
  <!-- y ist eine Folge aus einem oder mehreren Strings. Wir kodieren die Auswahl auf eine Weise, die dies garantiert, obwohl Sie den if-Ausdruck weglassen könnten, falls Sie wüssten, dass es wenigstens ein para-Element gibt -->
  <xsl:variable name="y" select="if (para) then para else ''" as="xs:string+"/>
  <!-- z ist eine Folge aus einem oder mehreren Strings. -->
  <xsl:variable name="z" select="para[1]" as="xs:string?"/>
</xsl:stylesheet>

Mit einem Schema-fähigen Prozessor könnten Sie sogar noch weiter gehen und sowohl auf einfache als auch auf komplexe Typen aus einem benutzerdefinierten Schema verweisen. Ein Schema-fähiger Prozessor muss über die Top-Level-Anweisung xsl:import-schema auf benutzerdefinierte Typen aufmerksam gemacht werden:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:my="http://www.mydomain.com/ns/my">
  <xsl:import-schema schema-location="my-schema.xsd"/>
  <xsl:template match="/">
    <!--Validieren, dass das resultierende Element zu my:BookType konform geht -->
    <xsl:element name="Book" type="my:BookType">
      <xsl:apply-templates/>
    </xsl:element>
  </xsl:template>
  <!-- ... -->
</xsl:stylesheet>

Sie sollten xsl:import-schema nicht verwenden, wenn Sie keinen Zugriff auf einen Schema-fähigen Prozessor haben. Falls Sie einen Schema-fähigen Prozessor einsetzen, aber dafür sorgen wollen, dass Ihre Stylesheets zu nicht-Schema-fähigen Prozessoren kompatibel sind, müssen Sie bei allen Elementen, die einen Schema-fähigen Prozessor erfordern, das Attribut use-when="system-property('xsl:schema-aware') = 'yes'" benutzen.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2006 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT Kochbuch" 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.

O'Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de