XML Validierung - wozu? / XML Schema / Datentypen, Designs

Datentypen, Designs

Datentypen, Designs

XML Schema bietet eine Vielzahl unterschiedlicher Datentypen und Design-Alternativen.

Datentypen, Designs

XML Schema unterscheidet zwischen simplen (atomaren) und komplexen Datentypen.

Simple Datentypen

Simple Datentypen finden Verwendung z.B. bei Text in Attributen oder zwischen Start- und Endetags von Elementen.

xs:byte Zahlen von -128 bis + 127
xs:decimal Dezimalzahlen von hoher Genauigkeit
xs:double Dezimalzahlen von doppelter Genauigkeit. 64-bit. Default-Rückgabe bei ()-Funktion.
xs:float Dezimalzahlen von einfacher Genauigkeit, 32-bit
xs:int Zahlen von -2147483648 bis 2147483647
xs:integer Restriction: xs:decimal; Pattern: "[\-+]?[0-9]+"
xs:long Zahlen von -9223372036854775808 bis 9223372036854775807
xs:negativeInteger Restriction: xs:nonPositiveInteger. MaxInclusive: -1
xs:nonNegativeInteger MinInclusive: 0
xs:nonPositiveInteger Restriction: xs:integer. MaxInclusive: 0
xs:positiveInteger Restriction: xs:nonNegativeInteger. MinInclusive: 1
xs:short Zahlen von -32768 bis 32767
xs:unsignedByte Zahlen von 0 bis 255
xs:unsignedInt Zahlen von 0 bis 4294967295
xs:unsignedLong Zahlen von 0 bis 18446744073709551615
xs:unsignedShort Zahlen von 0 bis 65535

Die Wertebereiche ganzer Zahlen (xs:byte, xs:short, xs:integer und xs:long) stimmen mit den entsprechenden Datentypen in Java und C#.NET überein. Schwieriger wird es freilich bei den Dezimalzahlen xs:float, xs:double und xs:decimal. Die Minimal- und Maximalwerte von float und double weichen in Java und C#.NET voneinander ab.

Nicht weniger schwer fällt der Vergleich zwischen java.math.BigDecimal und "decimal" in C#.NET. Freilich hat der decimal-Wertebereich in C#.NET bereits eine respektable Größe, die auch in Java unschwer dargestellt werden kann:


//C#.NET: decimal : 79.228.162.514.264.337.593.543.950.335
//C#.NET: decimal : -79.228.162.514.264.337.593.543.950.335
//Java: java.text.NumberFormat;
NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMANY);
BigDecimal bd   = new BigDecimal("-79228162514264337593543950335");
System.out.println("BigDecimal        : " + nf.format(bd));

... und auch in XSLT 2.0 gibt es hier keine Pobleme:


<xsl:decimal-format 
     name="df" 
     decimal-separator="," 
     grouping-separator="." />
<xsl:variable 
     name="vdecimal" 
     as="xs:decimal">79228162514264337593543950335</xsl:variable>
<decimalformat>
    <xsl:value-of select="format-number($vdecimal, '#.##0', 'df')"/>
</decimalformat>

Es mag Grenzfälle geben, in denen diverse XSL-Prozessoren abweichend arbeiten, die vor anderem technischen Hintergrund implementiert sind. Prozessoren müssen bei xs:decimal jedoch mindestens 18 Zeichen unterstützen.

Neben Zahlen stehen auch simple Typen anderer Art zur Verfügung:

Die simplen Datentypen können noch durch sog. "Facets" präzise definiert werden; dadurch können selbst definierte Datentypen entstehen. Beispiel mit Patterns:


  <xs:simpleType name="stringmax20">
    <xs:restriction base="xs:string">
      <xs:pattern value="^[A-Z]{1}[a-z]{1,19}$"/>
    </xs:restriction>
  </xs:simpleType>

Der xs:simpleType unterscheidet sich intern zwischen einem "topLevelSimpleType", der ein Attribut "name" zwingend haben muß, und einem "localSimpleType", der kein Attribut "name" haben darf.

Ein zweites Beispiel mit Enumerations:


  <xs:simpleType name="Wochentage">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Montag"/>
      <xs:enumeration value="Dienstag"/>
      <xs:enumeration value="Mittwoch"/>
      <xs:enumeration value="Donnerstag"/>
      <xs:enumeration value="Freitag"/>
      <xs:enumeration value="Sonnabend"/>
      <xs:enumeration value="Sonntag"/>
    </xs:restriction>
  </xs:simpleType>

Die Facets


length, minLength, maxLength, 
pattern, enumeration, whiteSpace

stehen jeweils für die folgenden Typen zur Verfügung:

Die Facets


pattern, enumeration, whiteSpace, 
maxInclusive, maxExclusive, 
minInclusive, minExclusive

stehen dagegen jeweils für die folgenden Typen zur Verfügung:

Eine Sonderrolle nimmt der Typ xs:boolean ein; hier stehen nur die Facets pattern und whiteSpace zur Verfügung.

Eine weitere Sonderrolle nimmt der Typ xs:decimal ein, hier stehen die folgenden Facets bereit:


totalDigits, fractionDigits, 
pattern, whiteSpace, enumeration, 
maxInclusive, maxExclusive, 
minInclusive, minExclusive

wg / 19. Januar 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info2018@wilfried-grupe.de

www.wilfried-grupe.de/XSD3_.html