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

Das Typkonzept

Ein einfacher Typ ("simple type") im Sinne von XML Schema ist ein Datentyp, der weder Attribute noch Kindelemente beinhaltet, der also geeignet ist, Attributwerte und den Inhalt von Elementen zu beschreiben, die nur textuellen Inhalt haben. Ein komplexer Typ ("complex type") besteht hingegen aus einer (gegebenenfalls leeren) Menge von Attributdeklarationen und einem Inhaltsmodell. Dieses Inhaltsmodell kann Kindelemente fordern oder verbieten, textuellen Inhalt eines bestimmten einfachen Typs zulassen und auch gemischten Inhalt ("mixed") vorsehen.

XML Schema definiert eine Vielzahl von Typen. Von diesen ausgehend können weitere, sowohl einfache als auch komplexe Typen definiert werden. Die Abbildung "vordefinierte XQuery-Typen in der Typhierarchie von XML Schema" zeigt die vordefinierten Typen, die – bis auf anyType – alle einfache Typen sind.

Vordefinierte XQuery-Typen in der Typhierarchie von XML Schema

Abb. Vordefinierte XQuery-Typen in der Typhierarchie von XML Schema

Man erkennt, dass diese alle von anyType abgeleitet sind. Die Ableitung besteht im Allgemeinen in einer Einschränkung. Dort, wo sich in der Abbildung dicke unterbrochene Linien finden, handelt es sich um Ableitung durch Listenbildung: Werte dieses Typs bestehen aus Listen von Werten des Basistyps. Ein genauerer Blick auf die verschiedenen Typen lohnt sich:

Die numerischen Typen bestehen aus den Festkommazahlen (decimal), von denen verschiedene Klassen ganzer Zahlen abgeleitet sind (integer usw.) und den Gleitkommazahlen (float und double), die sich in der Genauigkeit unterscheiden. Bei diesen Gleitkommazahlengibt es gemäß des Standards IEEE754 einige spezielle Werte, nämlich die positive und negative Unendlichkeit (+INF und -INF), die positive und die negative Null (+0 und -0) und den Wert NaN ("not a number"). Dieser Wert gehört zum Wertebereich der Gleitkommazahlen, und wir werden sehen, dass XQuery auch Rechenregeln für diesen Wert aufstellt. Es handelt sich also nicht um einen NULL-Wert, wie er etwa aus SQL bekannt ist. Der Sinn dieses Wertes besteht darin, beliebige, auch semantisch zunächst unsinnige Ausdrücke ohne Fehler behandeln zu können.

Zu beachten ist, dass boolean nicht (wie etwa aus der Programmiersprache C bekannt) von einem numerischen Typ abgeleitet ist.

Die Zeichenkette (string) ist Ausgangspunkt vieler abgeleiteterTypen, die sich zum Beispiel in der Zulässigkeit und Behandlung von Leerzeichen unterscheiden. Hier findet sich auch der aus der DTD bekannte Typ ID wieder, für den ebenfalls besondere Syntaxregeln gelten. Nicht von string abgeleitet ist der Typ anyURI zur Darstellung einer URI und der Typ QName, der einen qualifizierten Namen darstellt, konzeptionell also ein Paar bildet aus dem Namen eines Namensraumes und einem lokalen Namen gemäß der Syntaxregeln der W3C-Empfehlungen "Extensible Markup Language (XML) 1.0" und "Namespaces in XML 1.0". Ein QName kann als Kombination von Namensraumpräfix und lokalem Namen auftreten (in der syntaktischen Darstellung durch einen Doppelpunkt getrennt, also xlink:href) oder als expandierter QName, also als Kombination eines Namensraumes mit einem lokalen Namen. Nur in dieser Form sind QName-Werte auf Gleichheit prüfbar, da ja verschiedene Präfixe auf denselben Namensraum verweisen können.

Zur Darstellung von Datum und/oder Zeit gibt es die Datentypen date, time und dateTime. Das Format für die Darstellung von Zeit ist jjjj-mm-ttThh:mm:ss.ss..., wobei die Kleinbuchstaben jeweils für Jahr (j), Monat (m), Tag (t), Stunde (h), Minute (m) und Sekunde (s) stehen. Der Buchstabe "T" trennt den Datumsteil vom Zeitanteil. Nachkommastellen für Sekunden sind optional, deren Anzahl ist beliebig. Als Zeitzonenangabe kann ein Z für Coordinated Universal Time (UTC) oder die Differenz zu UTC in Stunden und Minuten angehängt werden. Die beiden folgenden Zeitpunkte sind gleich:

2004-05-31T13:20:00-05:00
2004-05-31T18:20:00Z

Zur Aufnahme von Zeiträumen gibt es den Datentyp duration und spezielle Typen, die zum Beispiel ein Kalenderjahr (gYear) darstellen. Für einen Wert vom Typ duration gilt folgendes Format:

PjYmMtDThHmMsS.

Komponenten, die null sind, dürfen entfallen. Folgende Werte stellen beide einen Zeitraum von 2 Jahren und 12,5 Sekunden dar:

P2Y0M0DT0H0M12.5S
P2YT12.5S

Binäre Daten können entweder als base64-kodiert (base64Binary) oder in Hexadezimaldarstellung (hexBinary) repräsentiert werden. Die folgenden beiden Zeilen zeigen die Codepointfolge von "Schöning" einmal base64-kodiert und einmal in Hexadezimaldarstellung:

U2No9m5pbmc=
00530063006800F6006E0069006E0067

 

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

<< zurückvor >>