• +49-(0)721-402485-12
Ihre Experten für XML, XQuery und XML-Datenbanken

Spezielle Typen in XQuery

Wie bereits erwähnt, wird Information aus XML Schema oder aus der DTD benutzt, um atomare Werte, die in einem XML-Dokument vorkommen, dem richtigen Typ zuzuordnen. Was geschieht aber, wenn es keine DTD und kein XML Schema zu einem Dokument gibt? In diesem Fall kann nur ein unspezifischer Typ angenommen werden.

Für Attributwerte, deren Typ unbekannt ist, führt XQuery den Datentyp xdt:untypedAtomic ein. Dabei wird das Präfix xdt an einen speziellen XQuery-Namensraum gebunden (wie alle XQuery-Namensräume ändert sich dieser mit jeder Ausgabe des Standards, weil er das Datum des Standards enthält, zum Beispiel "http://www.w3.org/2003/11/xpath-datatypes").

Elementknoten mit unbekanntem Typ wird der Typ xdt:untypedAny zugewiesen. Atomare Werte unbekannten Typs erhalten ebenfalls den Typ xdt:untypedAtomic. Das Ziel, das XQuery mit der Einführung dieser Typen verfolgt, ist eine "natürliche" Behandlung von Daten auch aus ungetypten Dokumenten bei arithmetischen Operationen oder Vergleichen. Hier gibt es jeweils spezielle Regeln, die eine "vernünftige" Typumwandlung von diesen unbestimmten Typen in "geeignete" Typen für die jeweilige Operation vorschreiben.

XQuery führt außerdem den abstrakten Typ xdt:anyAtomicType ein, der von xs:anySimpleType abgeleitet ist. Von diesem sind wiederum xdt:untypedAtomic und alle anderen einfachen Typen (wie zum Beispiel xs:integer, xs:string) abgeleitet. Dieser Typ ist insbesondere bei der Deklaration von Funktionen hilfreich.

In Analogie zu SQL:1992 führt XQuery außerdem zwei Untertypen von xs:duration ein, die beide (im Gegensatz zu xs:duration) vollständig geordnet sind, nämlich xdt:yearMonthDuration (Zeiträume, die nur in Jahren und Monaten angegeben sind) und xdt:dayTimeDuration (Zeiträume, die nur in Tagen, Stunden, Minuten und Sekunden angegeben sind). Es ist möglich, Werte vom Typ xs:duration in diese Typen umzuwandeln. Dabei entfallen dann die Anteile des Zeitraums, die in dem entsprechenden Typ nicht vorgesehen sind. Zum Beispiel ergibt

xdt:dayTimeDuration(xs:duration("P2Y2M2DT8H30M12.5S"))

denselben Wert wie

xdt:dayTimeDuration("P2DT8H30M12.5S")

Die folgende Abbildung (nach W3C: XQuery 1.0 and XPath 2.0 Functions and Operators) zeigt die Einordnung von XQuery-Datentypen in die Typhierarchie, wie sie XML Schema einführt. Ovale stehen dabei für abstrakte Typen, Rechtecke für konkrete Typen. Die von XQuery eingeführten Typen sind grau hinterlegt. Die Werte komplexer Typen und die Werte von Listen- oder Vereinigungstypen sind keine Werte des XQuery-Datenmodells.

XQuery-Datentypen in der Typhierarchie von XML Schema

Abb. XQuery-Datentypen in der Typhierarchie von XML Schema

 

Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)

<< zurückvor >>