En plus des chaînes de caractères et les autres types primitifs définis par les recommandations XML 1.0, l'analyseur XML de Microsoft supporte un jeu additionnel de types de données. Il supporte aussi les conversions entre les type primitifs et les types de données précités.

Les types de données sont référencés à partir de l'espace de noms urn:schemas-microsoft-com:datatypes. Pour utiliser les types de données à l'intérieur d'un schéma XML, il suffit de déclarer cet espace de noms à l'intérieur de l'élément schema par l'intermédiaire de l'attribut xmlns.

<Schema name="schema"
        xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes">
 <!-- ... -->
</Schema>
Types de données
Type Description
id représente un attribut de type ID.
idref représente une référence à un attribut de type ID.
idrefs représente une liste de références à des attributs ID.
nmtoken représente un attribut de type NMTOKEN.
nmtokens représente des attributs de type NMTOKENS.
enumeration représente une liste de valeurs de type NMTOKEN permises.
string représente un chaîne de caractères CDATA.
number représente un nombre décimal.
int représente un entier.
fixed.14.4 représente un nombre avec 14 chiffres avant la virgule et 4 après.
boolean représente une valeur booléenne true ou false.
dateTime représente une date au format ISO 8601 (2002-05-07T19:40:25).
dateTime.tz représente une date au format ISO 8601 (2002-05-07T19:40:25-05:00).
date représente une date au format ISO 8601 (2002-10-08).
time représente une heure au format ISO 8601 (17:30:54).
time.tz représente une date au format ISO 8601 (17:30:25-08:00).
i1 représente un nombre entier compris entre -128 et 127.
i2 représente un nombre entier compris entre -32768 et 32767.
i4 représente un nombre entier compris entre -2147483648 et 2147483647.
i8 représente un nombre entier compris entre -9223372036854775808 et 9223372036854775807.
ui1 représente un nombre entier non-signé compris entre 0 et 255.
ui2 représente un nombre entier non-signé compris entre 0 et 65535.
ui4 représente un nombre entier non-signé compris entre 0 et 4294967296.
ui8 représente un nombre entier non-signé compris entre 0 et 18446744073709551615).
r8 représente un nombre à virgule flottante compris entre 2.2250738585072014E-308 et 1.7976931348623157E+308.
r4 représente un nombre à virgule flottante compris entre 1.17549435E-38F et 3.40282347E+38F.
uri représente une adresse URI (Uniform Resource Identifier).
bin.hex représente des données binaires encodées en hexédécimal.
bin.base64 représente des données binaires encodées en Base 64.