Numerische Datentypen

(Auszug aus "XML Schema" von Eric van der Vlist)

Die numerischen Datentypen bauen auf vier primitiven Datentypen auf: xs:decimal für alle dezimalen Typen (einschließlich der ganzzahligen Datentypen, die als Dezimalzahlen ohne Nachkommastelle betrachtet werden), xs:double und xs:float für Gleitkommazahlen doppelter bzw. einfacher Genauigkeit sowie xs:boolean für Boolesche Werte. Whitespace wird für alle diese Datentypen zusammengefaßt.

Die Datentypen, die auf dieser Seite behandelt werden, sind in der folgenden Abbildung dargestellt.

 

Numerische Datentypen

Abbildung: Numerische Datentypen

Dezimale Typen

Alle dezimalen Typen sind von dem primitiven Typ xs:decimal abgeleitet. Sie machen zusammen einen Satz vordefinierter Typen aus, der die gebräuchlichsten Verwendungen abdeckt.

xs:decimal

Dieser Datentyp stellt Dezimalzahlen dar. Sie können beliebig viele Stellen haben (der Datentyp erlegt keine Beschränkungen auf); da ein XML-Dokument eine beliebige, jedoch endliche Länge hat, muß die Stellenzahl der lexikalischen Darstellung eines Werts vom Typ xs:decimal jedoch endlich sein. Obwohl die Anzahl der Stellen nicht beschränkt ist, werden wir im nächsten Kapitel sehen, wie der Autor eines Schemas bei Bedarf benutzerdefinierte Datentypen mit einer beschränkten Stellenzahl definieren kann.

Führende sowie hinter dem Dezimaltrennzeichen am Ende stehende Nullen haben keine Bedeutung und können entfernt werden. Das Dezimaltrennzeichen ist stets ein Punkt (».«); ein Vorzeichen (»+«, »–«) kann vorangestellt werden, andere Zeichen außer den zehn Ziffern sind verboten (dies gilt auch für Whitespace). Exponentialschreibweise (»E+2«) ist hier ebenfalls verboten, sie bleibt ausschließlich den Gleitkomma-Datentypen vorbehalten.

Gültige Werte für xs:decimal sind unter anderem:

123.456
+1234.456
–1234.456
–.456
–456

Die folgenden Werte sind ungültig:

1 234.456 (Leerzeichen sind verboten)
1234.456E+2 (Exponentialschreibweise (»E+2«) ist verboten)
+ 1234.456 (Leerzeichen sind verboten)
+1,234.456 (Tausender-Trennzeichen sind verboten)

xs:integer ist der einzige vordefinierte Datentyp, der direkt von xs:decimal abgeleitet ist.

xs:integer

Dieser ganzzahlige Datentyp ist eine Untermenge von xs:decimal, er stellt Zahlen dar, die keine Nachkommastellen im lexikalischen und im Werteraum haben. Die akzeptierten Zeichen werden auf die zehn Ziffern und ein optionales Vorzeichen am Anfang reduziert. Wie sein zugrundeliegender Datentyp erlegt auch xs:integer der Stellenzahl keine Beschränkungen auf, und führende Nullen sind nicht signifikant.

Gültige Werte für xs:integer sind unter anderem:

123456
+00000012
–1
–456

Die folgenden Werte sind ungültig:

1 234 (Leerzeichen sind verboten)
1. (Dezimaltrennzeichen sind verboten)
+1,234 (Tausender-Trennzeichen sind verboten)

xs:integer hat drei abgeleiteten Datentypen das Leben geschenkt: xs:nonPositiveInteger und xs:nonNegativeInteger (die weiterhin eine unbeschränkte Länge zulassen) sowie xs:long (der in ein 64-Bit-Wort paßt).

xs:nonPositiveInteger und xs:negativeInteger

Die W3C XML Schema Working Group hielt es für klarer, daß der Wert »0« mit eingeschlossen ist, wenn man die etwas umständliche verneinende Formulierung als Name verwendet. Daher benutzten sie xs:nonPositiveInteger, wenn die Zahlen negativ oder 0 sein dürfen. xs:negativeInteger ist von xs:nonPositiveInteger abgeleitet, um ganze Zahlen darzustellen, die streng negativ sind. Diese beiden Datentypen lassen ganze Zahlen beliebiger Länge zu.

xs:nonNegativeInteger und xs:positiveInteger

Dementsprechend steht xs:nonNegativeInteger für die ganzen Zahlen, die positiv oder 0 sind, während xs:positiveInteger von diesem Typ abgeleitet ist. Der »vorzeichenlose« (unsigned) Zweig der Familie (xs:unsignedLong, xs:unsignedInt, xs:un-signedShort und xs:unsignedByte) ist ebenfalls von xs:nonNegativeInteger abgeleitet.

xs:long, xs:int, xs:short und xs:byte

Die Datentypen, die wir bis jetzt gesehen haben, haben keine Beschränkungen in der Länge. Dieser Ansatz ist nicht sehr mikroprozessorfreundlich. Diese Unterfamilie stellt vorzeichenbehaftetet ganze Zahlen dar, die in Wörter der Größen 8, 16, 32 bzw. 64 Bit passen. xs:long ist definiert als Gesamtheit der ganzen Zahlen zwischen –9223372036854775808 und 9223372036854775807, d.h., die Werte, die in einem 64-Bit-Wort gespeichert werden können. Derselbe Vorgang wird erneut angewendet, um xs:int mit einem Bereich zwischen –2147483648 und 2147483647 (32 Bits), xs:short mit einem Bereich zwischen –32768 und 32767 (16 Bits) und xs:byte mit einem Bereich zwischen –128 und 127 (8 Bits) abzuleiten.

xs:unsignedLong, xs:unsignedInt, xs:unsignedShort und xs:unsignedByte

Die letzten der vordefinierten ganzzahligen Datentypen bilden die Unterfamilie der vorzeichenlosen (d.h. nicht-negativen) ganzen Zahlen, die in Wörter der Länge 8, 16, 32 und 64 Bit passen. xs:unsignedLong ist definiert als Typ für die ganzen Zahlen im Bereich zwischen 0 und 18446744073709551615, d.h. für die Werte, die in einem 64-Bit-Wort gespeichert werden können. Derselbe Vorgang wird erneut angewendet, um xs:unsignedInt mit einem Bereich zwischen 0 und 4294967295 (32 Bits), xs:unsignedShort mit einem Bereich zwischen 0 und 65535 (16 Bits) und xs:unsignedByte mit einem Bereich zwischen 0 und 255 (8 Bits) abzuleiten.

Gleitkomma-Datentypen

xs:float und xs:double

Sowohl xs:float als auch xs:double sind primitive Datentypen und stellen IEEE-Gleitkommatypen einfacher (32 Bits) bzw. doppelter (64 Bits) Genauigkeit dar. Sie speichern die Werte in Form einer Mantisse und eines Exponenten einer Zweierpotenz (m × 2^e) und erlauben so einen weiten Bereich von Zahlen in einem Speicherbereich fester Länge. Glücklicherweise verlangt der lexikalische Raum nicht, daß wir Zweierpotenzen angeben (tatsächlich erlaubt er das überhaupt nicht), sondern läßt uns statt dessen die traditionelle Exponentialschreibweise mit ganzzahligen Zehnerpotenzen verwenden. Da die Werteräume (Zweierpotenzen) nicht genau den Werten des lexikalischen Raums (Zehnerpotenzen) entsprechen, legt die Empfehlung fest, daß jeweils der nächstmögliche Wert genommen wird. Diese annähernde Entsprechung führt dazu, daß Gleitkomma-Datentypen in den Bereich der Annährungen gehören. Die meisten der Gleitkommawerte können nicht als exakt, sondern nur als Approximationen angesehen werden.

Diese Datentypen nehmen auch verschiedene »Spezialwerte« auf: positive Null (0), negative Null (–0) (dieser Wert ist kleiner als die 0, aber größer als jeder negative Wert), unendlich (INF) (ist größer als jeder andere Wert), negativ unendlich (–INF) (ist kleiner als jeder andere Gleitkommawert) und »keine Zahl« (» not a number «, NaN).

Gültige Werte für xs:float und xs:double sind unter anderem:

123.456
+1234.456
–1.2344e56
–.45E–6
INF
–INF
NaN

Die folgenden Werte sind ungültig:

1234.4E 56 (Leerzeichen sind verboten)
1E+2.5 (der Zehnerexponent muß eine ganze Zahl sein)
+INF (positiv unendlich erwartet kein Vorzeichen)
NAN (in Spezialwerten kommt es auf Groß-/Kleinschreibung an)

xs:boolean

xs:boolean

Dies ist ein primitiver Datentyp, der die Werte true und false (oder 1 und 0) annehmen kann.

   

<< zurück vor >>

 

 

 

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

Copyright © 2003 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 "XML Schema" 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