Limites/Facettes XSD

La restriction (restriction) est utilisée pour définir les valeurs acceptables pour un élément XML ou une propriété. La restriction d'un élément XML est appelée facette.

Restriction des valeurs

L'exemple suivant définit un élément nommé "age" avec une restriction. La valeur de age ne peut pas être inférieure à 0 ou supérieure à 120 :

<xs:element name="age">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="120"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Limitation d'un ensemble de valeurs

Pour limiter le contenu d'un élément XML à un ensemble de valeurs acceptables, nous devons utiliser une contrainte d'énumération (enumeration constraint).

Le prochain exemple définit un élément nommé "car" avec une limitation. Les valeurs acceptées ne sont que : Audi, Golf, BMW :

<xs:element name="car">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

L'exemple précédent peut également être écrit comme suit :

<xs:element name="car" type="carType"/>
<xs:simpleType name="carType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>

Remarque :Dans ce cas, le type "carType" peut être utilisé par d'autres éléments, car il ne fait pas partie de l'élément "car".

Limitation d'une série de valeurs

Pour limiter le contenu d'un élément XML à une série de valeurs utilisables, nous devons utiliser une contrainte de modèle (pattern constraint).

Le prochain exemple définit un élément nommé "letter" avec une limitation. Les valeurs acceptées ne sont qu'une lettre minuscule a - z :

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Le prochain exemple définit un élément nommé "initials" avec une limitation. Les valeurs acceptées sont trois lettres majuscules A - Z :

<xs:element name="initials">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[A-Z][A-Z][A-Z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Le prochain exemple définit également un élément nommé "initials" avec une limitation. Les valeurs acceptées sont trois lettres majuscules ou minuscules a - z :

<xs:element name="initials">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Le prochain exemple définit un élément nommé "choice" avec une limitation. Les valeurs acceptées sont les lettres x, y ou z :

<xs:element name="choice">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[xyz]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Le prochain exemple définit un élément nommé "prodid" avec une limitation. Les valeurs acceptées sont une séquence de cinq chiffres arabes, chaque chiffre se situant entre 0 et 9 :

<xs:element name="prodid">
<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>

Autres limitations pour une série de valeurs

L'exemple suivant définit un élément nommé "letter" avec une limitation. Les valeurs acceptées sont zéro ou plusieurs lettres de a à z :

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="([a-z])*"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

L'exemple suivant définit un élément nommé "letter" avec une limitation. Les valeurs acceptées sont un ou plusieurs paires de lettres, chaque paire composée d'une lettre minuscule suivie d'une lettre majuscule. Par exemple, "sToP" passera cette validation, mais "Stop", "STOP" ou "stop" ne le feront pas :

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="([a-z][A-Z])+"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

L'exemple suivant définit un élément nommé "gender" avec une limitation. Les valeurs acceptées sont male ou female :

<xs:element name="gender">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="male|female"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

L'exemple suivant définit un élément nommé "password" avec une limitation. Les valeurs acceptées sont une ligne de caractères composée de 8 caractères, ces caractères doivent être des lettres majuscules ou minuscules a - z ou des chiffres 0 - 9 :

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z0-9]{8}"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Limitation des caractères blancs

Pour définir le traitement des caractères blancs (caractères d'espace), nous devons utiliser la limitation whiteSpace.

L'exemple suivant définit un élément nommé "address" avec une limitation. Cette limitation whiteSpace est définie sur "preserve", ce qui signifie que le processeur XML ne supprimera aucun caractère blanc :

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="preserve"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Cet exemple définit également un élément nommé "address" avec une limitation. Cette limitation whiteSpace est définie sur "replace", ce qui signifie que le processeur XML supprimera tous les caractères blancs (retours chariot, retour ligne, espaces et tabulations) :

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="replace"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Cet exemple définit également un élément nommé "address" avec une limitation. Cette limitation whiteSpace est définie sur "collapse", ce qui signifie que le processeur XML supprimera tous les caractères d'espace (les retours chariot, les entêtes, les espaces et les tabulations seront remplacés par un espace, les espaces de début et de fin seront supprimés, et les espaces multiples consécutifs seront réduits à un seul espace) :

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="collapse"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Limitation de la longueur

Pour limiter la longueur des valeurs des éléments, il faut utiliser les limitations length, maxLength et minLength.

Dans cet exemple, un élément nommé "password" avec une limitation est défini. Sa valeur doit être exactement de 8 caractères :

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:length value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Cet exemple définit également un élément nommé "password" avec une limitation. Sa valeur doit être comprise entre 5 et 8 caractères :

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:minLength value="5"/>
    <xs:maxLength value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Limitation du type de données

Limitation Description
enumeration Définir une liste de valeurs acceptables
fractionDigits Définir le nombre maximum de décimales autorisées. Il doit être supérieur ou égal à 0.
length Définir le nombre exact de caractères ou d'éléments de liste autorisés. Il doit être supérieur ou égal à 0.
maxExclusive Définir la limite supérieure des valeurs numériques. Les valeurs autorisées doivent être inférieures à cette valeur.
maxInclusive Définir la limite supérieure des valeurs numériques. Les valeurs autorisées doivent être inférieures ou égales à cette valeur.
maxLength Définir le nombre maximum de caractères ou d'éléments de liste autorisés. Il doit être supérieur ou égal à 0.
minExclusive Définir la limite inférieure des valeurs numériques. Les valeurs autorisées doivent être supérieures à cette valeur.
minInclusive Définir la limite inférieure du nombre. Les valeurs autorisées doivent être supérieures ou égales à cette valeur.
minLength Définir le nombre minimum de caractères ou d'éléments autorisés. Doit être supérieur ou égal à 0.
pattern Définir la séquence précise de caractères acceptés.
totalDigits Définir le nombre précis de chiffres arabes autorisés. Doit être supérieur à 0.
whiteSpace Définir le traitement des caractères blancs (retours à la ligne, retours chariot, espaces et tabulations).