Link zu www.kneller-gifs.de

XML-Schema - Datentypen (Basistypen und Ableitungen)

XML-Dokumente transportieren Daten innerhalb von Elementen und Attributen. Per XML-Schema legt man fest, welche Inhalte in Elementen und Attributen erlaubt sind. Dies geschieht konkret mit Hilfe sogenannter Schema-Datentypen. Basis aller Schema-Datentypen sind ca. 50 vordefinierten Datentypen des W3C. Man spricht auch von Basis- oder Standardtypen. Hier eine Auswahl von wichtigen Typen:

Typ Beschreibung Beispiel(e)
string Zeichenkette Hello World
decimal Dezimalzahl mit "." als Trennzeichen 1.23, +1,23, -1.23, -.12
integerZahl ohne Nachkommastellen1, +22, -33
positiveIntegerpositive Ganzzahl1, 2, 3
nonNegativeIntegerpositive Ganzzahl oder 00, 1, 2, 3
dateDatum2000-12-31
timeZeitpunkt23:59:00
dateTimeZeitpunkt nach ISO 86012000-12-31T23:59:00
booleanlogischer Werttrue, false, 0, 1

Beispiel für die Anwendung der Standard-Datentypen
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Fahrzeug">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Bezeichnung" type="xs:string"/>
        <xs:element name="Kw" type="xs:integer"/>
        <xs:element name="Verbrauch" type="xs:decimal"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Die Basistypen reichen nicht immer, um Datenelemente genau genug zu beschreiben.
Dann legt man eigene Datentypen an, die von bestehenden Basistypen abgeleitet/eingeschränkt werden (Facetten).

Folgende Ableitungen/Einschränkungen sind u.a. möglich:

Beispiel einer eingeschränkten String-Typdefinition auf eine Länge von 1 bis 20 Zeichen
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Fahrzeug">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Bezeichnung">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:minLength value="1"/>
              <xs:maxLength value="20"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <xs:element name="Kw" type="xs:integer"/>				
        <xs:element name="Verbrauch" type="xs:decimal"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
Der Type "xs:string" wird nicht mehr direkt in der Elementdefinition eingetragen.
Zur Einschränkung wird eine Typdefinition geöffnet (xs:simpleType) und darin als Basistyp "xs:string" definiert.
Dieser wird dann weiter eingeschränkt, hier die Länge des Strings auf "1" bis "20" Zeichen.

Beispiel einer eingeschränkten Integer-Typdefinition auf Grenzwerte (Ober- und Untergrenze)
...
<xs:element name="Kw">
  <xs:simpleType>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1"/>
      <xs:maxInclusive value="999"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>
...
Der Type "xs:integer" wird auf den Minimalwert "1" und den Maximalwert "999" eingeschränkt.
Somit ist "0" ungültig, "1" ok, 01 als Wert auch ok, "999" ok, 1000 aber nicht mehr.

Beispiel für eine Aufzählung von erlaubten Werten, hier "m" und "w":
...
<xs:element name="Geschlecht">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:enumeration value="m"/>
      <xs:enumeration value="w"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>
...
In einem Geschlecht-Element ist entweder ein "m" oder ein "w" erlaubt, nichts anderes.

Beispiel für einen regulären Ausdruck, um eine Postleitzahl zu beschreiben (5stellige Ziffer)
...
<xs:element name="PLZ">
  <xs:simpleType>
    <xs:restriction base="xs:integer">
      <xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>
...
Jedes Klammerpaar [...] beschreibt einen Zeichenvorrat. Je Zeichenvorrat ist ein Zeichen erlaubt.
Somit ist laut Definition in einem PLZ-Element genau 5 mal eine Ziffer von 0 bis 9 gefordert.