Das erweiterte Typsystem von XPath 2.0 ausnutzen

(Auszug aus "XSLT Kochbuch" von Sal Mangano)

Problem

Sie benutzen bei der Verarbeitung von XML äußerst gewissenhaft XML Schema und würden gern die Belohnung dafür einheimsen.

Lösung

Wenn Sie Ihre Dokumente anhand eines Schemas validieren, werden die resultierenden Knoten mit Typinformationen versehen. Sie können dann in XPath 2.0 (und während Sie Templates in XSLT 2.0 filtern) auf diese Typen testen.

(: Test, ob alle invoiceDate-Elemente tatsächlich als Datum validiert worden sind. :)

if (order/invoiceDate instance of element(*, xs:date)) then "Rechnung vollständig" else "Rechnung unvollständig"

Achtung!
instance of ist nur bei einer Schema-Validierung sinnvoll. Außerdem ist es nicht das Gleiche wie castable as. Zum Beispiel ist 10 castable as xs:positiveInteger immer wahr, wohingegen 10 instance of xs:positiveInteger niemals wahr ist, weil literale Integer-Typen als xs:decimal gekennzeichnet werden.

Der Vorteil der Validierung besteht jedoch nicht einfach nur in der Möglichkeit, Typen mit Hilfe von instance of zu testen, sondern in der Sicherheit und der Annehmlichkeit zu wissen, dass nach einer erfolgreichen Validierung keine bösen Überraschungen aufgrund von Typfehlern mehr lauern. Dies kann zu übersichtlicheren Stylesheets führen.

(: Ohne Validierung sollten Sie den Code so schreiben. :)

for $order in Order return xs:date($order/invoiceDate) - xs:date($order/createDate)

(: Wenn Sie wissen, dass alle Datumselemente validiert wurden, können Sie ohne den xs:date-Konstruktor fertig werden. :)

for $order in Order return $order/invoiceDate - $order/createDate

Diskussion

Ich persönlich ziehe es vor, XML Schema zur Spezifikation von Dokumenten und nicht zur Validierung einzusetzen. Daher schreibe ich XSLT-Transformationen üblicherweise auf eine Art, die tolerant gegenüber Typfehlern ist, und benutze im Bedarfsfall ausdrückliche Konvertierungen. Stylesheets, die auf diese Weise geschrieben werden, funktionieren mit und ohne Validierung.

Sobald Sie damit beginnen, Stylesheets zu schreiben, die von einer Validierung abhängen, sind Sie an Implementierungen gebunden, die Validierungen durchführen. Falls andererseits Ihre Unternehmensstandards besagen, dass alle XML-Dokumente vor der Verarbeitung anhand eines Schemas validiert werden, können Sie Ihr XSLT mit Hilfe der Zusicherungen vereinfachen, dass bestimmte Datentypen in bestimmten Situationen auftauchen.

  

<< 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