Facets di XSD/Limitazioni

La restrizione (restriction) viene utilizzata per definire i valori accettabili per un elemento XML o un attributo. La restrizione di un elemento XML è chiamata faccia.

Limitazione dei valori

Esempio seguente definisce un elemento con restrizione e denominato "age". 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 la restrizione di enumerazione (enumeration constraint).

Esempio successivo 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ò anche essere scritto 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 la restrizione di modello (pattern constraint).

Esempio successivo definisce un elemento denominato "letter" con una limitazione. I valori accettati sono una delle lettere minuscole a - z:

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

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

Esempio successivo anche 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, ciascuno dei quali va da 0 a 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 che definisce un elemento denominato "letter" con una limitazione. I valori accettati sono zero o più lettere da a - 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 che 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 che 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 che definisce un elemento denominato "password" con una limitazione. I valori accettati sono una riga di 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 spazi bianchi

Per stabilire il modo di gestione dei caratteri di spazi bianchi (whitespace characters), dobbiamo utilizzare la limitazione whiteSpace.

Esempio seguente che 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 (righe, ritorni a capo, spazi e tabulazioni):

<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 spazio (le virgole di ritorno, i ritorni a capo, gli spazi e i tabulatori saranno sostituiti da uno spazio, gli spazi iniziali e finali saranno rimossi e gli spazi consecutivi saranno ridotti a uno 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 del valore dell'elemento, è 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 un elenco di valori accettabili
fractionDigits Definisce il numero massimo di cifre decimali consentite. Deve essere maggiore o uguale a 0.
length Definisce il numero esatto di caratteri o elementi di elenco consentiti. Deve essere maggiore o uguale a 0.
maxExclusive Definisce il limite superiore del valore numerico. I valori ammessi devono essere inferiori a questo valore.
maxInclusive Definisce il limite superiore del valore numerico. I valori ammessi devono essere inferiori o uguali a questo valore.
maxLength Definisce il numero massimo di caratteri o elementi di elenco consentiti. Deve essere maggiore o uguale a 0.
minExclusive Definisce il limite inferiore del valore numerico. I valori ammessi devono essere superiori a questo valore.
minInclusive Definire il limite inferiore del valore numerico. I valori ammessi devono essere maggiori o uguali a questo valore.
minLength Definire il numero minimo di caratteri o elementi ammessi. Deve essere maggiore o uguale a 0.
pattern Definire la sequenza esatta di caratteri accettabili.
totalDigits Definire la precisione dei numeri arabi ammessi. Deve essere maggiore di 0.
whiteSpace Definire il modo di trattare gli spazi bianchi (righe, ritorni a capo, spazi e tabulazioni).