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 |
| integer | Zahl ohne Nachkommastellen | 1, +22, -33 |
| positiveInteger | positive Ganzzahl | 1, 2, 3 |
| nonNegativeInteger | positive Ganzzahl oder 0 | 0, 1, 2, 3 |
| date | Datum | 2000-12-31 |
| time | Zeitpunkt | 23:59:00 |
| dateTime | Zeitpunkt nach ISO 8601 | 2000-12-31T23:59:00 |
| boolean | logischer Wert | true, false, 0, 1 |
<?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:
<?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>
...
<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>
...
...
<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>
...
...
<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>
...