Datentypen

1. XML Schema - Datentypen


...definiert Datentypen, die auf Elemente und Attribute angewendet und die in XML Schemas und anderen XML Spezifikationen verwendet werden können.

(http://www.w3.org/TR/xmlschema-2/)

2. Einfache Datentypen

Natürlich verfügt XML Schema über vorgefertigte Standarddatentypen. In der folgenden Liste sind sie zusammengefasst:

Datentyp Beispiel Erläuterung
String Einfacher Text  
Boolean True, False, 0, 1  
Decimal -1.23, 210, +1000.00
 
Float -1E4, 1.256E12, 21.78e-2, 42 32 bit
Double -1E4, 1.256E12, 21.78e-2, 42 64 bit
Duration P1Y2M3D10H30M
1 Jahr, 2 Monate, 3 Tage
dateTime 2002-05-31T13:20:00 date, time separierbar
anyURI http://www.XML.de/index.htm  
ID, IDREF n42, _2156
Nur Attribute!

In XML Schema werden Datentypen mit Hilfe des Attributes "type" zugewiesen.

<xs:element name="titel" type="xs:string"/>

Datentypen einschränken:

Nehmen wir einmal nur ein kleines Beispiel. Man innerhalb unserer Adressabfrage das Element <alter>. Der Wert dieses Elementes soll logischerweise mindestens 0 sein, aber maximal 120 (wobei das wohl schon hoch gegriffen ist).
Zunächst wird das Element definiert, durch <xs:element>. Da XML Schema aber nun davon ausgeht das es sich hier um einen komplexen Typ handelt, es aber keiner ist, müssen wir mit dem nächsten Befehl <xs:simpleType> angegeben, dass es sich um ein einfaches Element handelt. Jetzt kommt die Festlegung, bzw. die Eingrenzung des Wertebereichs, durch den Befehl <xs:restriction>.
Ihm wird eine Basis gegeben, in dem Fall ist es der Datentyp integer, also eine Ganzzahl. Von dieser Basis aus, wird das Element weiter eingegrenzt. Die folgenden Befehle definieren den Minimalwert, und den Maximalwert. Somit haben wir nun das Element in seinem Wertebereich eingeschränkt.

<xs:element name="alter">
   <xs:simpleType>
      <xs:restriction base="xs:integer">
         <xs:minInclusive value="0"/>
         <xs:maxInclusive value="120"/>
      </xs:restriction>
   </xs:simpleType>
</xs:element>

Facetten:

Günstiger wäre es natürlich einmal den Typ zu definieren und ihn auf beliebige
Elemente anzuwenden. In dem Fall spricht man auch von "FACETTEN".

<xs:element name="alter" type="alter">
   <xs:simpleType name="alter">
      <xs:restriction base="xs:integer">
         <xs:minInclusive value="0"/>
         <xs:maxInclusive value="120"/>
      </xs:restriction>
   </xs:simpleType>
</xs:element>

Reguläre Ausdrücke verwenden:

Bei der Definition von Wertebereichen kann auch eine Form von Regulären Ausdrücken verwendet werden. Mit dem Befehl xs:pattern wird der Wertebereich in Form eines Regulären Ausdrucks definiert. Dies bringt uns auf die Anwendung für unsere Postleitzahl. Hierbei wird das Element "<plz>" definiert.

<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>

3. Komplexe Datentypen:

Neben den einfachen Datentypen kann man in XML Schema auch Komplexe Datentypen definieren. Elemente mit komplexe Typen können andere Elemente und/oder Attribute enthalten.Es gibt vier Arten von komplexen Elementen mit komplexen Datentypen die anschließend mit je einem Beispiel aufgeführt werden.

Leere Elemente:

Leere Elemente enthalten nur Attribute

<xs:complexTypename="prodtype">
   <xs:attributename="prodid" type="xs:positiveInteger"/>
</xs:complexType>

<xs:elementname="product" type="prodtype"/>

Element mit Text und Attribut simpleContent:

<xs:complexType name="shoesizetype">
   <xs:simpleContent>
      <xs:extensionbase="xs:positiveInteger">
         <xs:attributename="country" type="xs:string"/>
      </xs:extension>
   </xs:simpleContent>
</xs:complexType>

Element mit Kind Elementen sequence:

<xs:complexType name="persontype">
   <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
   </xs:sequence>
</xs:complexType>

Element mit Kind Elementen: all Element mit Kind Elementen all:

<xs:complexType name="personType">
   <xs:all>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
   </xs:all>
</xs:complexType>