Einfache Typen
Als einfacher Typ wird ein Datentyp bezeichnet, welcher lediglich „einfache“ Werte (z. B. eine Zeichenkette / einen Text oder eine Zahl) annehmen kann. Die definierten Datentypen können dann später sowohl in Attributen als auch in Elementen verwendet werden. Attribute unterstützen jedoch nur einfache Datentypen. Als Basis für alle Datentypen dienen die sogenannten Basisdatentypen. Die Basisdatentypen wurden vom W3C festgelegt und sind fester Bestandteil der XSD-Spezifikation. Die folgende Tabelle zeigt die wichtigsten verfügbaren Basisdatentypen:
Name | Beschreibung | Beispiele |
---|---|---|
string | Zeichenkette (bestehnd aus 0, 1 oder mehreren Zeichen) | Hallo |
boolean | Wahrheitswert | true, 1, false, 0 |
integer | Zahlenwert ggf. mit Vorzeichen | -46, 0, 875 |
nonNegativeInteger | positiver Zahlenwert oder 0 | 0, 72, 875 |
positiveInteger | positiver Zahlenwert | 1, 72, 875 |
nonPositiveInteger | negativer Zahlenwert oder 0 | -463, -97, 0 |
negativeInteger | negativer Zahlenwert | -463, -97, -1 |
float | Fließkommazahl 32bit | 2.4 |
double | Fließkommazahl 64bit | 3.14159 |
decimal | Dezimalzahl | 69, 581.4603 |
date | Datumgsangabe | 2017-01-29 |
time | Uhrzeitangabe | 20:30:45 |
dateTime | Datumsangabe mit Uhrzeit | 2017-01-29T20:30:45 |
ID | eindeutiger Name | arbeitsspeicher |
IDREF | Referenz auf einen eindeutigen Namen | arbeitsspeicher |
IDREFS | Referenz auf einen oder mehrere eindeutige(n) Namen | prozessor arbeitsspeicher |
Wichtig: Verwenden Sie im XSD-Skript einen Namensraum für die Bestandteile von XSD selbst, was i. d. R. der Fall ist,
so müssen Sie bei der Angabe eines solchen vordefinierten Datentyps auch den Namensraumpräfix mit angeben (z. B.
xs:string
an Stelle von string
).
Um nun einen einfachen Datentyp zu deklarieren, nutzen wir das Element simpleType
. Mit dem Attribut name
lässt sich der Name des definierten Datentyps festlegen. Dieser Name kann dann später bei der Datentypangabe in Elementen und
Attributen innerhalb des XSD-Skripts verwendet werden. Innerhalb des simpleType
-Elements notieren Sie nun das
restriction
-Element. Über das Attribut base
können Sie die „Grundlage“ des Datentyps festlegen. Hier
können Sie einen der oberen Datentypen (inklusive dem Namensraumpräfix) oder auch einen eigendefinierten Datentyp angeben. Das
restriction
-Element dient eigentlich dazu, einen Datentyp einzuschränken (z. B. in der Länge oder im Wertebereich).
Darauf gehen wir jedoch erst später ein. Die Angabe eines eigenen
Datentyps als Basis wäre daher aus jetziger Sicht sinnlos bzw. unnötig. Das restriction
-Element hat fürs Erste also
keine Kindelemente und darf deshalb auch als leeres Element notiert werden.
<xs:simpleType name="speicher"> <xs:restriction base="xs:integer" /> </xs:simpleType>
Nachdem wir einen Datentyp definiert haben, können wir den Datentyp in einem Element verwenden. Um ein Element zu deklarieren,
benötigen wir das element
-Element. Über das Attribut name
wird der Name des Elements (dieser wird dann
auch in der XML-Datei als Elementname verwendet) und über das type
-Attribut der dazugehörige Datentyp festgelegt.
<xs:element name="arbeitsspeicher" type="speicher" />
Nachdem unser selbst definierter Datentyp bisher nichts anderes als der Datentyp xs:integer
ist, hätten wir die
Definition des Datentyps auch weglassen können und bei der Element-Definition direkt xs:integer
als Datentyp angeben
können.
<xs:element name="arbeitsspeicher" type="xs:integer" />
Die an dieser Stelle vielleicht etwas ausführliche und „umständliche“ Erklärung soll Ihnen jedoch später den Einstieg in die Themen Einschränkungen und Ableitung erleichtern. Eine weitere Variante zur Datentypdefinition ist die Definition eines anonymen Datentyps. Anonyme Datentypen haben keinen Namen und werden direkt bei der Element- oder Attribut-Deklaration angegeben. Sinnvoll ist diese Variante nur dann, wenn Sie den dort definierten Datentyp an keiner anderen Stelle benötigen. Es gibt jedoch Personen, die von dieser Art und Weise generell komplett abraten. Dies ist letztendlich aber auch wieder eine Geschmacksfrage. Das Beispiel von oben würde mit einem anonymen simplen Datentyp wie folgt aussehen:
<xs:element name="arbeitsspeicher"> <xs:simpleType> <xs:restriction base="xs:integer" /> </xs:simpleType> </xs:element>
Bei größeren oder komplexeren XML-Skripten kommt es immer wieder vor, dass Sie das gleiche Element mehrmals, jedoch an
unterschiedlichen Stellen im XML-Baum, benötigen. Für ein solches Vorhaben dient eine Referenz. Dabei notieren Sie Ihr
Element einmal global (also direkt innerhalb des schema
-Elements) und können es dann mittels des element
-Elements
und des ref
-Attributs referenzieren. Die Referenzierung des Elements arbeitsspeicher
würde wie folgt
aussehen:
<xs:element ref="arbeitsspeicher" />
Das element
-Element verfügt des Weiteren noch über einige Attribute, mit welchen Einstellungen festgelegt werden
können. Die wichtigsten Attribute sind default
(Standardwert, falls das Element keinen Wert hat),
fixed
(Festwert - andere Werte sind nicht erlaubt), minOccurs
(minimale Anzahl an Vorkommnissen) und
maxOccurs
(maximale Anzahl an Vorkommnissen). Der Standardwert für die Attribute minOccurs
und
maxOccurs
ist 1. Für das Attribut maxOccurs
kann auch der Wert unbounded
verwendet
werden, um somit die maximale Anzahl an Elementen nicht zu begrenzen.
<xs:element name="festplatte" type="speicher" maxOccurs="6" />
Listen
Als Liste bezeichnet man einen speziellen Datentyp, dessen Wert aus mehreren Werten getrennt durch ein Leerzeichen bestehen.
Um eine Liste zu definieren, benötigen Sie das Element list
, welches einem simpleType
-Element
untergeordnet wird. Über das Attribut itemType
wird der Datentyp der einzelnen Werte (auch als Item bezeichnet)
festgelegt.
<xs:element name="zahlen"> <xs:simpleType> <xs:list itemType="xs:integer" /> </xs:simpleType> </xs:element>
Übrigens: An Stelle des Attributs itemType
kann dem list
-Element auch ein simpleType
-Element
(anonymer Datentyp) untergeordnet werden.
Vereinigungen
Ein weiterer simpler Typ ist die Vereinigung (engl. union). Bei der Vereinigung werden zwei oder mehrere Datentypen
miteinander verbunden, d. h. der Wert, der diesen Datentyp verwendet, darf einen Wert annehmen, der zu einem der angegebenen
Datentypen der Vereinigung gehört. Um die Vereinigung zu deklarieren, wird das union
-Element verwendet. Die
Datentypen werden durch Leerzeichen getrennt im Attribut memberTypes
angegeben.
<xs:element name="zeitangabe"> <xs:simpleType> <xs:union memberTypes="xs:date xs:dateTime" /> </xs:simpleType> </xs:element>
Übrigens: Sie können an Stelle des memberTypes
-Attributs auch simpleType
-Elemente innerhalb des
union
-Elements notieren.