Les types de données des schémas XML peuvent être soit simples, soit complexes.

Un type complexe signifie qu'un élément peut contenir des attributs, des éléments, voire même une valeur simple.

Un type simple signifie que le contenu d'un élément ou d'un attribut ne peut être qu'une valeur d'un type de données prédéfinies comme un nombre entier ou une chaîne de caractères. Ces valeurs peuvent également être restreintes par l'intermédiaire de facettes.

Les types de données des schémas XML sont représentés par trois parties distinctes : les espaces de valeurs, les espaces lexicaux et un ensemble de facettes.

un espace de valeur est un ensemble de valeurs possibles pour un type de données spécifié. Le type de données int accepte les valeurs comprises dans l'intervalle suivant : {-2147483648 - 2147483647}.

Chaque possibilité dans l'espace de valeur d'un type de données est représentée par un ou plusieurs littéraux dans son espace lexical.

Un espace lexical est un ensemble de littéraux valides pour un type de données. Les littéraux 9.9 et 9.90 sont différents mais tous les deux valides et égaux pour le type de données float.

Une facette est un aspect définissant un espace de valeur. Ce dernier caractérisé par des propriétés, peut subir des restrictions par rapport à une liste de valeurs spécifiées, à un intervalle de valeurs, à un modèle de valeurs, à une longueur de champ, à un nombre de chiffres et à un comportement vis-à-vis des espaces blancs.

Les types de données prédéfinies sont divisés en deux ensembles distincts, les primitifs et les dérivés, les seconds découlants des premiers. La hiérarchie des types de données prédéfinies est décrite à la page suivante.

Les types de données primitifs
Type Description
string représente une chaîne de caractères.
boolean représente une valeur booléenne true ou false.
decimal représente un nombre décimal
float représente un nombre à virgule flottante.
double représente un nombre réel double.
duration représente une durée.
dateTime représente une valeur date/heure.
time représente une valeur horaire (format : hh:mm:ss.sss ).
date représente une date (format : CCYY-MM-DD).
gYearMonth représente un mois et une année grégorienne (format : CCYY-MM).
gYear représente une année (format : CCYY).
gMonthDay représente le jour d'un mois (format : MM-DD).
gDay représente le jour d'un mois (format : DD).
gMonth représente le mois (format : MM).
hexBinary représente un contenu binaire hexadécimal.
base64Binary représente un contenu binaire de base 64.
anyURI représente une adresse URI (ex.: http://www.site.com).
QName représente un nom qualifié.
NOTATION représente un nom qualifié.
Les types de données dérivés
Type Description
normalizedString représente une chaîne de caractères dont les espaces blancs sont normalisés.
token représente une chaîne de caractères sans espaces blancs.
language représente un langage exprimé sous forme de mot clés répondant à la RFC 1766.
NMTOKEN représente le type d'attribut NMTOKEN de XML 1.0.
NMTOKENS représente le type d'attributs NMTOKENS de XML 1.0.
Name représente un nom XML.
NCName représente un nom non-implanté (non-colonized) dans .
id représente le type d'attribut ID de XML 1.0.
IDREF représente le type d'atribut IDREF de XML 1.0.
IDREFS représente le type d'attribut IDREFS de XML 1.0.
ENTITY représente le type d'attribut ENTITY de XML 1.0.
ENTITIES représente le type d'attribut ENTITIES de XML 1.0.
integer représente un nombre entier.
nonPositiveInteger représente un nombre entier négatif incluant le zéro.
negativeInteger représente un nombre entier négatif dont la valeur maximum est -1.
long représente un nombre entier long dont l'intervalle est {-9223372036854775808 - 9223372036854775807}.
int représente un nombre entier dont l'intervalle est {-2147483648 - 2147483647}.
short représente un nombre entier court dont l'intervalle est {-32768 - 32767}.
byte représente un entier dont l'intervalle est {-128 - 127}.
nonNegativeInteger représente un nombre entier positif incluant le zéro.
unsignedLong représente un nombre entier long non-signé dont l'intervalle est {0 - 18446744073709551615}.
unsignedInt représente un nombre entier non-signé dont l'intervalle est {0 - 4294967295}.
unsignedShort représente un nombre entier court non-signé dont l'intervalle est {0 - 65535}.
unsignedByte représente un nombre entier non-signé dont l'intervalle est {0 - 255}.
positiveInteger représente un nombre entier positif commençant à 1.
Exemple [voir]
<?xml version="1.0" encoding="ISO-8859-1"?>
<element_racine 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xsi:noNamespaceSchemaLocation="c:\schema.xsd">
  <element_enfant>
  Une chaîne de caractères est attendue.
  </element_enfant>
  <element_enfant>
  Les chiffres ne sont pas acceptées !
  </element_enfant>
</element_racine>

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        elementFormDefault="qualified">
  <xsd:element name="element_enfant">
  <xsd:simpleType>
      <xsd:restriction base="xsd:string">
        <xsd:pattern value="[^0-9]"/>
      </xsd:restriction>
  </xsd:simpleType>
  </xsd:element>
  <xsd:element name="element_racine">
  <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="element_enfant" 
                       maxOccurs="unbounded"/>
      </xsd:sequence>
  </xsd:complexType>
  </xsd:element>
</xsd:schema>
Sommaire