XSD Limitazioni / Facets

La limitazione (restriction) viene utilizzata per definire i valori accettati per un elemento XML o un attributo. La limitazione di un elemento XML viene chiamata faccia.

Limitazione di valori

Esempio seguente definisce un elemento denominato "age" con una limitazione. Il valore di "age" non può essere inferiore a 0 o superiore a 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>

Limitazione di un insieme di valori

Per limitare il contenuto di un elemento XML a un insieme di valori accettati, dobbiamo utilizzare vincoli di enumerazione (enumeration constraint).

Esempio seguente definisce un elemento denominato "car" con una limitazione. I valori accettati sono solo 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'esempio precedente può essere scritto anche come:

<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>

Nota:In questo caso, il tipo "carType" può essere utilizzato da altri elementi perché non fa parte dell'elemento "car".

Limitazione di una serie di valori

Per limitare il contenuto di un elemento XML a una serie di numeri o lettere ammessi, dobbiamo utilizzare vincoli di modello (pattern constraint).

Esempio seguente definisce un elemento denominato "letter" con una limitazione. Il valore accettato è una singola lettera minuscola a-z:

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

Un altro esempio definisce un elemento denominato "initials" con una limitazione. I valori accettati sono tre lettere maiuscole 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>

Un altro esempio definisce un elemento denominato "initials" con una limitazione. I valori accettati sono tre lettere maiuscole o minuscole 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>

Esempio successivo definisce un elemento denominato "choice" con una limitazione. I valori accettati sono una delle lettere x, y o z:

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

Esempio successivo definisce un elemento denominato "prodid" con una limitazione. I valori accettati sono una sequenza di cinque numeri arabi, e ciascun numero è nel range 0-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>

Altre limitazioni per una serie di valori

Esempio seguente definisce un elemento denominato "letter" con una limitazione. I valori accettati sono zero o più lettere tra a e z:

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

Esempio seguente definisce un elemento denominato "letter" con una limitazione. I valori accettati sono una coppia o più coppie di lettere, ciascuna composta da una lettera minuscola seguita da una lettera maiuscola. Ad esempio, "sToP" passerà la verifica di questo modello, ma "Stop", "STOP" o "stop" non passeranno la verifica:

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

Esempio seguente definisce un elemento denominato "gender" con una limitazione. I valori accettati sono male o female:

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

Esempio seguente definisce un elemento denominato "password" con una limitazione. I valori accettati sono una riga di caratteri costituiti da 8 caratteri, che devono essere lettere maiuscole o minuscole a - z o numeri 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>

Limitazione dei caratteri di spazio bianco

Per determinare il modo di gestione dei caratteri di spazio bianco (whitespace characters), è necessario utilizzare la limitazione whiteSpace.

Esempio seguente definisce un elemento denominato "address" con una limitazione. Questa limitazione whiteSpace è impostata su "preserve", il che significa che il processore XML non rimuoverà alcun carattere di spazio bianco:

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

Questo esempio definisce anche un elemento denominato "address" con una limitazione. Questa limitazione whiteSpace è impostata su "replace", il che significa che il processore XML rimuoverà tutti i caratteri di spazi bianchi (le righe di ritorno, i caratteri di invio, gli spazi e i tabulatori):

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

Questo esempio definisce anche un elemento denominato "address" con una limitazione. Questa limitazione whiteSpace è impostata su "collapse", il che significa che il processore XML rimuoverà tutti i caratteri di spazi bianchi (le righe di ritorno, i caratteri di invio, gli spazi e i tabulatori saranno sostituiti da uno spazio, gli spazi iniziali e finali saranno rimossi e gli spazi consecutivi saranno ridotti a un singolo spazio):

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

Limitazione della lunghezza

Per limitare la lunghezza dei valori degli elementi, è necessario utilizzare le limitazioni length, maxLength e minLength.

Questo esempio definisce un elemento denominato "password" con una limitazione. Il valore deve essere esatto per 8 caratteri:

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

Questo esempio definisce anche un elemento denominato "password" con una limitazione. Il valore minimo è di 5 caratteri e il valore massimo è di 8 caratteri:

<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>

Limitazione del tipo di dati

Limitazione Descrizione
enumeration Definisce una lista di valori accettabili
fractionDigits Definisce il numero massimo di cifre decimali ammesse. Deve essere maggiore o uguale a 0.
length Definisce il numero esatto di caratteri o elementi di una lista ammessi. Deve essere maggiore o uguale a 0.
maxExclusive Definisce il limite superiore di un valore numerico. I valori ammessi devono essere inferiori a questo valore.
maxInclusive Definire il limite superiore del numero. I valori permessi devono essere minori o uguali a questo valore.
maxLength Definire il numero massimo di caratteri o elementi della lista permessi. Deve essere maggiore o uguale a 0.
minExclusive Definire il limite inferiore del numero. I valori permessi devono essere maggiori di questo valore.
minInclusive Definire il limite inferiore del numero. I valori permessi devono essere maggiori o uguali a questo valore.
minLength Definire il numero minimo di caratteri o elementi della lista permessi. Deve essere maggiore o uguale a 0.
pattern Definire la sequenza esatta di caratteri accettabili.
totalDigits Definire la precisione dei numeri arabi permessi. Deve essere maggiore di 0.
whiteSpace Definire il modo di trattare i caratteri bianchi (a capo, ritorno a capo, spazi e tabulazioni).