XML Schema (XSD) ist eine leistungsstarke Sprache zur Definition der Struktur und der Datentypen von XML-Dokumenten. Einer der zentralen Bestandteile von XSD ist das Konzept der Datentypen, das es ermöglicht, sowohl die Form als auch den Inhalt von XML-Daten zu validieren. Ein wichtiger aber oft wenig beachteter Datentyp ist anySimpleType. In diesem Beitrag gehen wir detailliert auf diesen Typ ein und zeigen, welche Rolle er in der XML-Schema-Hierarchie spielt. Darüber hinaus betrachten wir praktische Anwendungsfälle und erklären, wie dieser Typ effektiv genutzt werden kann.

Die W3C-Spezifikationen zu XML Schema bestehen aus zwei Teilen: Part 1 beschreibt die allgemeine Struktur von XML-Dokumenten und deren Validierung (XML Schema Part 1: Structures), während Part 2 die verschiedenen Datentypen, einschließlich anySimpleType, detailliert erklärt (XML Schema Part 2: Datatypes).
Was ist anySimpleType?
Der anySimpleType ist ein abstrakter Basistyp in XML Schema, der als Grundlage für alle einfachen Datentypen dient. Er stellt eine direkte Ableitung von anyType dar und ist somit die Wurzel aller einfachen Typen in XSD. Dadurch kann er als universelle Basis für alle primären Datentypen betrachtet werden.
Eigenschaften von anySimpleType
- anySimpleType umfasst alle Werte, die in XML als einfache Typen existieren.
- Er kann jedoch nicht direkt als Datentyp für XML-Elemente oder -Attribute verwendet werden.
- Er dient als Elternklasse für alle anderen einfachen Typen, einschließlich der primitiven Datentypen wie string, decimal, boolean und vielen weiteren.
- Er hat keine Einschränkungen bezüglich des Inhalts, kann aber nicht mit komplexen Strukturen kombiniert werden.
- anySimpleType bietet ein hohes Maß an Flexibilität, da er als allgemeine Basis für spezifischere Typen dient.
Die XSD-Typenhierarchie
In XML Schema existiert eine gut definierte Typenhierarchie:
anyType
├── anySimpleType (Basistyp für alle einfachen Typen)
│ ├── string
│ ├── boolean
│ ├── decimal
│ ├── date
│ ├── time
│ ├── duration
│ ├── QName
│ ├── hexBinary
│ ├── base64Binary
│ ├── usw.
├── complexType (Enthält sowohl Elemente als auch Attribute)
Vergleich mit anyType
anyType ist der allgemeinste Typ in XML Schema und umfasst sowohl einfache als auch komplexe Typen. anySimpleType hingegen ist ausschließlich für einfache Typen gedacht.
Eigenschaft | anyType | anySimpleType |
---|---|---|
Kann komplexe Inhalte enthalten | ✅ Ja | ❌ Nein |
Kann als Basistyp für andere Typen dienen | ✅ Ja | ✅ Ja |
Erlaubt Elemente mit gemischtem Inhalt | ✅ Ja | ❌ Nein |
Erlaubt einfache Werte wie Zeichenketten oder Zahlen | ✅ Ja | ✅ Ja |
Wird für komplexe Typen verwendet | ✅ Ja | ❌ Nein |
Praktische Verwendung von anySimpleType
Obwohl anySimpleType nicht direkt als Typ für XML-Elemente oder -Attribute angegeben werden kann, spielt er dennoch eine entscheidende Rolle in der Definition und der Validierung von XML-Daten. Viele standardisierte XML-Schemas nutzen ihn als Basis für die Definition weiterer spezifischer Datentypen.
Beispiel für primitive einfache Typen
Ein einfacher XML-Schema-Ausschnitt könnte wie folgt aussehen:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="price" type="xs:decimal"/>
</xs:schema>
Hier wird der Typ decimal verwendet, welcher von anySimpleType abgeleitet ist. Das bedeutet, dass price nur eine numerische Dezimalzahl enthalten darf.
Abgeleitete einfache Typen
Neben primitiven Typen können aus anySimpleType auch abgeleitete Typen entstehen, etwa durch Einschränkungen (restriction) oder Erweiterungen (extension).
Ein Beispiel für eine abgeleitete Einschränkung:
<xs:simpleType name="limitedString">
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
Hier wird ein neuer Typ limitedString definiert, der maximal 10 Zeichen lang sein darf. Er basiert auf xs:string, welches wiederum von anySimpleType abgeleitet ist. Dies ist eine nützliche Methode, um Eingabedaten in XML-Dokumenten zu kontrollieren.
Verwendung mit anySimpleType in Elementen und Attributen
anySimpleType kann indirekt über anyAtomicType oder als abstrakter Basistyp in XML-Schema verwendet werden.
<xs:element name="data" type="xs:anySimpleType"/>
Hier kann data jeglichen einfachen Typ enthalten, ohne dass es auf einen spezifischen Typ beschränkt ist. Dadurch kann dieser Ansatz flexibel genutzt werden, um allgemeine XML-Daten zu erfassen, ohne vorher eine spezifische Typisierung festlegen zu müssen.
Vorteile von anySimpleType
- Flexibilität: Da anySimpleType keine Einschränkungen hat, kann er in verschiedenen Kontexten als Basistyp dienen.
- Erweiterbarkeit: Durch die Ableitung können eigene Typen mit spezifischen Einschränkungen erstellt werden.
- Konsistenz: Er ermöglicht eine einheitliche Basis für alle einfachen Typen in XML.
- Validierung: Durch die Verwendung von abgeleiteten Typen können XML-Daten effizient überprüft werden.
Zusammenfassung
- anySimpleType ist der abstrakte Basistyp für alle einfachen Typen in XML Schema.
- Er kann nicht direkt für XML-Elemente oder -Attribute verwendet werden.
- Alle primitiven und abgeleiteten einfachen Typen stammen von anySimpleType ab.
- anySimpleType erlaubt einfache Werte, aber keine komplexen Strukturen.
- Er spielt eine wichtige Rolle in der XSD-Typenhierarchie und ist somit die Grundlage für viele spezifische Typen.
- Durch Einschränkungen und Erweiterungen lassen sich gezielt angepasste Datentypen definieren.
Dieses umfassende Verständnis von anySimpleType ist entscheidend, wenn man sich mit XML Schema und der Definition validierbarer XML-Dokumente beschäftigt. Ansonsten kann ich auch meinen Beitrag „XML – Effiziente Datenstrukturierung“ empfehlen. Und falls du weitere Fragen hast oder tiefer in verwandte Themen wie anyAtomicType oder complexType eintauchen möchtest, lass es mich einfach wissen!