Datentypen-Definitionen eines XML-Schema zur Validierung nutzen
https://bildung.social/@oerinformatik/111970765687640258
https://oer-informatik.de/xml-schema-datentypen
XML Schema, XSD, Datentypen, simpleType, Restriction, Facetten, pattern, enumeration, Werteraum, lexikalischer Raum, kanonische Repräsentation
tl/dr; (ca. 13 min Lesezeit): XML Schema (XSD) stellt einen gewaltigen Sprachumfang zur Deklaration und Spezifizierung von Datentypen bereit. Neben vielen bereits vorhandenen Datentypen und den komplexen eigenen Datentypen bietet sich die Möglichkeit, über zahlreiche Restrictions die Werte individuell einzugrenzen und somit die Validität über die reine Struktur auf den Inhalt der Daten auszuweiten [AI-Assisted]. (Zuletzt geändert am 27.10.2026)
Dieser Artikel ist Bestandteil einer Serie zu den XML-Grundlagen:
Vorab: Datenaustauschformate: CSV, XML und JSON vergleichen mit zugehörigen Übungsaufgaben
Teil 1: Die Auszeichnungssprache Extensible Markup Language (XML) mit zugehörigen Übungsaufgaben
Teil 2: Valide XML-Dokumente gegen eine Document-Type-Definition erstellen mit zugehörigen Übungsaufgaben
Teil 4: Die Struktur von XML-Dokumenten gegen ein Schema validieren
Teil 5: Datentypen-Definitionen eines XML-Schema zur Validierung nutzen
Übungsaufgaben zur ganzen Serie: Übungsaufgaben zu XML: Wohlgeformtheit, Gültigkeit, DTD und XSD
Schon fit in diesem Thema? Nutze die Kann-Liste und die Leitfragen unter dem Artikel als Checkliste, ob Du die relevanten Kompetenzen bereits hast.
Dieser Artikel baut auf der Kann-Liste des Artikels Die Struktur von XML-Dokumenten gegen ein Schema validieren auf.
Nach Durchlesen des Artikels kann ich…
… passende einfache Datentypen aus den Built-in-Datatypes auswählen,
… Werteraum, lexikalischen Raum und kanonische Repräsentation eines Datentyps unterscheiden,
… für die Datentypen (unterschiedliche) Literale nennen, die gültige Werte beschreiben,
…
xs:string,xs:normalizedStringundxs:tokenunterscheiden,… eigene Datentypen über Restrictions erstellen,
… Facetten (
pattern,enumeration,minInclusive/maxInclusive,totalDigits/fractionDigits) anwenden, um die Werte eines Datentyps einzugrenzen.
Datentypen
Im Gegensatz zur DTD können in XML Schema Datentypen genauer spezifiziert und sogar im Inhalt deutlicher eingegrenzt werden. Hierbei bietet XML Schema derart viele Möglichkeiten, dass die Datentypen eine eigene Spezifikation (Part 2: Datatypes) mit vielen mehrseitigen Kapiteln bekommen haben.
Verlinkt ist hier die aktuelle Fassung XSD 1.1. Sie ergänzt gegenüber XSD 1.0 u. a. die Datentypen xs:dateTimeStamp (ein xs:dateTime mit verpflichtender Zeitzone), xs:dayTimeDuration und xs:yearMonthDuration (Zeitdauern nur aus Tagen/Stunden/Minuten/Sekunden bzw. nur aus Jahren/Monaten), die Facette explicitTimezone (Zeitzone vorgeschrieben, verboten oder optional) sowie mit <xs:assertion> Bedingungen in Form von XPath-Ausdrücken. Viele Werkzeuge – z. B. die Bibliothek libxml2 und damit xmllint – unterstützen allerdings nur XSD 1.0; alle übrigen Beispiele in diesem Artikel kommen daher mit XSD 1.0 aus.
Wir haben bislang nur einfache Zeichenketten genutzt (type="xs:string"), die komplexen Elemente (mit Unterelementen und/oder Attributen) oder den Irgendwas-„Joker“ (type="xs:anyType"). Der Sprachumfang differenziert jedoch sehr umfangreich weiter aus, wie die folgende Übersicht der Built-in-Datentypen zeigt (die man ähnlich in der Spezifikation findet):
Bei der Definition von Datentypen werden unterschiedliche Eigenschaften gegeneinander abgegrenzt. Beiß die Zähne zusammen, durch diese Theorie müssen wir kurz durch:
Der Werteraum (value space) beschreibt die Menge (set) der Werte eines Datentyps. Bei
xs:bytesind das z. B. alle Ganzzahlen zwischen-128und127.Der lexikalische Raum (lexical space) beschreibt die Menge derjenigen Zeichenketten, die auf Werte des Werteraums gemappt werden können (lexical mapping). Bei
xs:bytewären das alle reinen Ziffernfolgen von-128bis127, aber eben auch+17,00124,-010- also andere Zeichenketten, die eindeutig alsxs:byteausgewertet werden können. Welche das jeweils sind, definiert der Datentyp.Literale sind Zeichenketten aus (keinem oder mehr) Zeichen des Universal Character Set (UCS - der Zeichensatz, der die Basis für UTF ist). Literale können gültige Repräsentationen eines spezifischen Datentyp-Werts sein (dann wären sie im lexikalischen Raum). Sie können aber auch ungültige Zeichenketten sein, für die es kein lexikalisches Mapping gibt.
Wem das zu abstrakt klingt: Der Wert 1, der sich im Werteraum einer Ganzzahl (z.B. xs:int) befindet, kann durch verschiedene lexikalische Repräsentationen (lexical representations) ausgedrückt werden: +1, 01, 0001 usw. Sie alle stellen Literale dar, die auf den Wert 1 gemappt werden. Es gibt aber auch Literale, die auf keinen Wert im Datentyp xs:int gemappt werden: 1.0 beispielsweise oder eins.
Bei einer Ganzzahl vom Typ xs:int stellen beispielsweise die Literale 42, 042, +42 und +0042 lexikalische Repräsentationen desselben Werts dar.
Ein besonderes Literal für jeden Wert stellt hierbei die kanonische Repräsentation (canonical representation) dar. Diese Repräsentation wird so definiert, dass es für jeden möglichen Wert des Werteraums ein einzigartiges kanonisches Literal gibt. Es ist also eine Teilmenge des lexikalischen Raums, die eine Eins-zu-eins-Beziehung zum Werteraum aufspannt (canonical mapping). Für xs:int ist festgelegt, dass die kanonische Repräsentation keine führenden Nullen und bei positiven Zahlen kein Vorzeichen enthält: +0042, 042 und 42 werden alle auf denselben Wert gemappt, kanonisch ist aber nur 42.
Der Werteraum ist zunächst für alle vorgegebenen Typen definiert, kann aber über Facetten für eigene Typen weiter eingegrenzt werden.
Die wesentlichen Datentypen in der Kurzübersicht:
| Datentyp | Beispiel | Eigenschaften |
|---|---|---|
xs:string |
Hallo Welt! |
Jeder beliebige Text |
xs:dateTime |
1999-05-31T13:20:00.000-05:00 |
Für die einzelnen Teilbereiche gibt es eigene Datentypen (xs:date, xs:time, xs:gMonth…) |
xs:long |
von -9223372036854775808, über … -1, 0, 1, …bis 9223372036854775807 |
64 Bit, vorzeichenbehaftet, basiert auf xs:integer |
xs:int |
von -2147483648, über … -1, 0, 1, bis … 2147483647 |
32 Bit, vorzeichenbehaftet, basiert auf xs:long |
xs:float |
-INF, INF, NaN -1E4, -0, 0, 12.78E-2, 12 |
32-bit Gleitkommazahl: geringere Präzision, geringere Bereichsgrenze als xs:double |
xs:double |
-INF, INF, NaN -1E304, -0, 0, 12.78E-2, 12 |
64-bit Gleitkommazahl: größere Präzision, größerer Definitionsbereich als xs:float |
xs:boolean |
truefalse0, 1 |
Wahrheitswert; 1 steht für true, 0 für false |
xs:base64Binary |
Zh8+H6zd |
Gültige Zeichen sind [A-Za-z0-9+/], am Ende ggf. = als Füllzeichen |
Ableitung eigener Datentypen durch Einschränkung (Restriction)
Über Restrictions können auf Basis der simpleTypes eigene Datentypen erstellt werden. Jeder Datentyp bringt dafür einen eigenen Kanon an möglichen Constraining facets mit. Neue Typen werden über ein <xs:simpleType />-Element deklariert. Die Constraining facets werden als Restrictions bezogen auf einen Basis-Typen (base) angegeben (<xs:restriction base="xs:string">). Insgesamt sieht das beispielsweise so aus:
<xs:simpleType name="e-mail">
<xs:restriction base="xs:string">
<xs:pattern value="[^@ \t\r\n]+@[^@ \t\r\n]+\.[^@ \t\r\n]+" />
</xs:restriction>
</xs:simpleType>Alle Code-Beispiele sind Ausschnitte eines Schemas, dessen Wurzelelement den Namensraum deklariert: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">. Im vorigen Teil stand dafür das Präfix xsd: – das Präfix ist frei wählbar, entscheidend ist die Bindung an den Namensraum. In diesem Artikel nutzen wir durchgängig xs:, auch bei den Namen der eingebauten Datentypen (xs:string, xs:int), denn genau so werden sie im Schema referenziert. Facetten nennen wir im Text ohne Präfix (pattern), im Schema stehen sie als Elemente mit Präfix (<xs:pattern />).
Der volle Umfang der Constraining facets lässt sich in der Spezifikation nachlesen, die wesentlichen sind etwa folgende:
| Constraining facets | Beschreibung Constraint gibt es bei… |
Beispiel |
|---|---|---|
pattern |
Value muss RegEx erfüllen möglich an allen einfachen Datentypen (auch xs:boolean) |
<xs:restriction base="xs:string"><xs:pattern value="[0-9A-F]+" /></xs:restriction> |
enumeration |
Wert muss einem der gelisteten Werte entsprechen möglich an allen Datentypen bis auf xs:boolean |
<xs:restriction base="xs:string"><xs:enumeration value="ja"/><xs:enumeration value="nein"/></xs:restriction> |
whiteSpace |
Wie wird mit Whitespaces umgegangen (Carriage Return, Line Feed, Tabs, Spaces)?preserve = keine Normalisierung,replace= alle werden zu Spaces, collapse= wie replace, dazu werden aufeinanderfolgende Spaces zu einem zusammengefasst und Spaces an Beginn/Ende entferntänderbar nur an xs:string und davon abgeleiteten Typen (z. B. xs:normalizedString, xs:token); alle anderen atomaren Typen nutzen fest collapse |
<xs:restriction base='xs:normalizedString'><xs:whiteSpace value='collapse'/></xs:restriction> |
lengthminLengthmaxLength |
Legt die (Mindest-/Maximal-)Anzahl der Zeichen fest, die der Wert enthalten darf. möglich an xs:string und davon abgeleiteten Typen sowie an xs:anyURI, xs:hexBinary und xs:base64Binary (dort Anzahl der Bytes) |
<xs:restriction base='xs:string'><xs:minLength value='1'/></xs:restriction> |
minExclusiveminInclusivemaxExclusivemaxInclusive |
Legt die untere/obere Grenze des Zahlenbereichs fest (inkl. bzw. exkl. dieser Grenze) möglich an allen Zahlentypen sowie an Datums- und Zeittypen |
<xs:restriction base='xs:integer'><xs:maxInclusive value='100'/></xs:restriction> |
fractionDigitstotalDigits |
Legt die Anzahl der Nachkomma-Stellen bzw. der Stellen insgesamt fest (also inkl. Nachkommastellen) möglich an xs:decimal und davon abgeleiteten Typen (z. B. xs:integer) |
<xs:restriction base='xs:decimal'><xs:fractionDigits value='1'/><xs:totalDigits value='4'/></xs:restriction> |
Zeichenketten-Datentypen
| Datentyp | Beispiel | Eigenschaften |
|---|---|---|
xs:string |
Hallo Welt! |
Jeder beliebige Text |
xs:normalizedString |
Max Mustermann |
Basiert auf xs:string, enthält aber keine Carriage Returns, Line Feeds und Tabs (sie werden beim Einlesen durch Spaces ersetzt) |
xs:token |
ab in den Urlaub |
Basiert auf xs:normalizedString, enthält zusätzlich keine Spaces am Anfang und Ende und keine doppelten Spaces hintereinander |
xs:anyURI |
http://www.oer-informatik.de/xml-schema |
Absoluter oder relativer URI (z. B. URL) |
Datums / Zeittypen
| Datentyp | Beispiel | Eigenschaften |
|---|---|---|
xs:duration |
P1Y2M3DT10H30M12.3S | Zeitdauer, beginnt mit P, T trennt Datums- und Zeitanteil |
xs:dateTime |
1999-05-31T13:20:00.000-05:00 | Zeitpunkt, Zeitzone optional |
xs:time |
13:20:00.000 | Uhrzeit |
xs:date |
1999-05-31 | Datum |
xs:gYearMonth |
1999-02 | Monat eines Jahres |
xs:gMonthDay |
–05-31 | Wiederkehrender Tag im Jahr |
xs:gYear |
1999 | Jahr |
xs:gMonth |
–05 | Monat |
xs:gDay |
—31 | Wiederkehrender Tag im Monat |
Ganzzahlen- und Festkommazahltypen
| Datentyp | zulässige Literale | Eigenschaften |
|---|---|---|
xs:decimal |
-1.23 0 123 +001000.00 |
Festkommazahl; führendes Plus und führende/endende Nullen sind erlaubt |
xs:integer |
-1, 0, 1 | Basiert auf xs:decimal |
xs:nonNegativeInteger |
0, 1, 2 | Basiert auf xs:integer |
xs:positiveInteger |
1, 2, … | Basiert auf xs:nonNegativeInteger |
xs:nonPositiveInteger |
-2, -1, 0 | Basiert auf xs:integer |
xs:negativeInteger |
-2, -1 | Basiert auf xs:nonPositiveInteger |
xs:long |
-9223372036854775808, … -1, 0, 1, … 9223372036854775807 | 64 Bit, vorzeichenbehaftet, basiert auf xs:integer |
xs:unsignedLong |
0, 1, … 18446744073709551615 | 64 Bit, vorzeichenlos, basiert auf xs:nonNegativeInteger |
xs:int |
-2147483648, … -1, 0, 1, … 2147483647 | 32 Bit, vorzeichenbehaftet, basiert auf xs:long |
xs:unsignedInt |
0, 1, …4294967295 | 32 Bit vorzeichenlos, basiert auf xs:unsignedLong |
xs:short |
-32768, … -1, 0, 1, … 32767 | 16 Bit, vorzeichenbehaftet, basiert auf xs:int |
xs:unsignedShort |
0, 1, … 65535 | 16 Bit vorzeichenlos, basiert auf xs:unsignedInt |
xs:byte |
-128, …-1, 0, 1, … 127 | 8 Bit, vorzeichenbehaftet, basiert auf xs:short |
xs:unsignedByte |
0, 1, … 255 | 8 Bit vorzeichenlos, basiert auf xs:unsignedShort |
Gleitkommatypen
| Datentyp | Beispiel | Eigenschaften |
|---|---|---|
xs:float |
-INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN | 32-bit |
xs:double |
-INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN | 64-bit |
Weitere Datentypen
| Datentyp | Beispiel | Eigenschaften |
|---|---|---|
xs:boolean |
true false 0, 1 |
Wahrheitswert |
xs:base64Binary |
GpM7 | Base64-kodierte Binärdaten |
xs:hexBinary |
0FB7 | Hexadezimal kodierte Binärdaten (zwei Ziffern je Byte) |
XML-spezifische Datentypen
| Datentyp | Beispiel | Eigenschaften |
|---|---|---|
xs:Name |
adresse | Basiert auf xs:token. Für XML-Elemente zulässiger String (z. B. keine Zahlen am Anfang). |
xs:QName |
kunde:adresse | Voller Name eines Elements/Attributs (Bsp.: namespaceprefix:localpart) |
xs:NCName |
adresse | Basiert auf xs:Name. Local Part eines Element-/Attributnamens (“non-colonized”). |
xs:language |
de-DEen-US |
Basiert auf xs:token. Zeichenketten, die gemäß XML 1.0 Standard eine Sprache repräsentieren |
xs:ID |
k4711 | Ein einzigartiger xs:Name, der ein Element identifiziert |
xs:IDREF |
k4711 | Muss dem Wert einer xs:ID entsprechen, da auf diese referenziert wird. |
xs:IDREFS |
k4711 k4712 | Space-getrennte Liste von xs:IDREF |
xs:ENTITY |
logo | Name einer in der DTD deklarierten ungeparsten Entity (Attributtyp ENTITY aus XML 1.0) |
xs:ENTITIES |
logo banner | Space-getrennte Liste von xs:ENTITY |
xs:NOTATION |
png | xs:QName einer im Schema deklarierten Notation (xs:notation); nur über eine Aufzählung (enumeration) nutzbar |
xs:NMTOKEN |
US, Brésil |
Basiert auf xs:token. NMToken nutzen die gleichen Zeichen wie xs:Name, haben aber nicht die Einschränkung mit bestimmten Zeichen nicht beginnen zu dürfen. |
xs:NMTOKENS |
US UK, Brésil Canada Mexique |
Space-getrennte Liste von xs:NMTOKEN |
Leitfragen
- Was unterscheidet Werteraum, lexikalischen Raum und kanonische Repräsentation eines Datentyps?
Der Werteraum ist die Menge der Werte eines Datentyps, der lexikalische Raum die Menge der Zeichenketten (Literale), die auf diese Werte abgebildet werden – z. B. stehen 1, +1 und 0001 für denselben xs:int-Wert. Die kanonische Repräsentation ist genau ein festgelegtes Literal je Wert. Siehe Abschnitt „Datentypen“.
- Wie leitest Du einen eigenen Datentyp durch Einschränkung ab?
Du deklarierst ein xs:simpleType-Element und darin eine xs:restriction mit einem Basistyp (base="xs:string"); innerhalb der Restriction grenzt Du die Werte mit Facetten wie xs:pattern ein. Siehe Abschnitt „Ableitung eigener Datentypen durch Einschränkung (Restriction)“.
- Mit welchen Facetten grenzt Du Zeichenketten und Zahlen ein?
Zeichenketten schränkst Du mit pattern (regulärer Ausdruck), enumeration (Liste erlaubter Werte), length, minLength und maxLength ein; Zahlen mit minInclusive/maxInclusive bzw. minExclusive/maxExclusive sowie bei Dezimalzahlen mit totalDigits und fractionDigits. Siehe Abschnitt „Ableitung eigener Datentypen durch Einschränkung (Restriction)“.
- Worin unterscheiden sich
xs:string,xs:normalizedStringundxs:token?
xs:string erlaubt beliebigen Text, xs:normalizedString enthält keine Zeilenumbrüche und Tabs, und xs:token hat zusätzlich keine Spaces am Anfang und Ende und keine mehrfachen Spaces hintereinander. Siehe Abschnitt „Zeichenketten-Datentypen“.
- Welche Ganzzahltypen gibt es, und wie hängen sie zusammen?
Alle basieren auf xs:decimal über xs:integer; davon abgeleitet sind die vorzeichenbehafteten Typen xs:long (64 Bit), xs:int (32 Bit), xs:short (16 Bit) und xs:byte (8 Bit) sowie über xs:nonNegativeInteger die vorzeichenlosen xs:unsignedLong bis xs:unsignedByte. Siehe Abschnitt „Ganzzahlen- und Festkommazahltypen“.
- Wie notierst Du Datum, Uhrzeit und Zeitdauer in XML Schema?
Ein Datum (xs:date) schreibst Du als JJJJ-MM-TT, eine Uhrzeit (xs:time) als hh:mm:ss, einen Zeitpunkt (xs:dateTime) als Kombination mit T dazwischen und optionaler Zeitzone wie -05:00; eine Zeitdauer (xs:duration) beginnt mit P, z. B. P1Y2M3DT10H30M12.3S. Siehe Abschnitt „Datums / Zeittypen“.
Links und weitere Informationen
W3C-Dokumente zu XML Schema: Primer (Kurzübersicht)/ Part 1: Structures / Part 2: Datatypes
Infos von w3schools zu XML
Hinweis zur Nachnutzung als Open Educational Resource (OER)
Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Datentypen-Definitionen eines XML-Schema zur Validierung nutzen” von oer-informatik.de (H. Stein), Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/xml-schema-datentypen veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/datenformate/xml. Erstellt mit KI-Assistenz; von mir umfassend redaktionell überarbeitet, geprüft und freigegeben. Stand: 27.10.2026.
[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]
