In questo articolo riguardante il capitolo XSD cercherò di chiarire cos'è un elemento Simple Type e come è strutturato in modo tale da saperne fornire la dichiarazione XSD.
A volte, definire un tipo di dati di un elemento come 'stringa' o 'intero' potrebbe non essere sufficiente: infatti potremmo voler restringere ad un determinato range, per esempio, i valori numerici di un elemento XSD.
Tutte queste necessità possono essere definite all'interno di un XSD_Schema tramite il linguaggio XSD.
I Simple Type elements comprendono le seguenti categorie:
- elementi semplici;
- attributi;
- restrizioni o facets;
Simple Type
Un Simple Type è un elemento XML, privo di attributi, che contiene solo testo (quindi totale assenza di ulteriori nodi figlio o child nodes).
La sintassi di base per la definizione di un Simple Type e':
<xs:element name="xxx" type="xxx" />
L'attributo name rappresenta il nome dell'elemento, mentre type indica il tipo dei dati in esso contenuti.
Il linguaggio XSD dispone di diversi tipi di dati predefiniti o build in, i più comunemente utilizzati sono:
| Tipo | Descrizione |
|---|---|
| string | Stringhe di caratteri |
| decimal | Valori numerici generici |
| integer | Valori numerici interi |
| boolean | Valori booleani: true o false |
| date | Date |
| time | Orari |
Quindi, per esempio, potremo definire un Simple Type in questa maniera:
<xs:element name="nome" type="xs:string" />
Che corrisponderebbe ad un elemento XML di questo tipo:
<nome>Mirko</nome>
Gli elementi semplici possono avere un valore di default che viene assegnato in mancanza di quello dato:
<xs:element name="nome"
default="Senza Nome" type="xs:string" />Oppure possono avere un valore fixed che viene assegnato sempre.
Da ricordare che fixed e default si escludono a vicenda:
<xs:element name="home"
fixed="http://mirkoagrati.blogspot.com"
type="xs:string" />
Gli Attributi
Se un elemento contiene attributi, per definizione, diventerà necessariamente un Complex Type o Tipo complesso.
Tuttavia gli attributi XSD rientrano nella sfera dei Simple Type: infatti la sintassi per definire un attributo ha molte similitudini con quella per definire un elemento semplice:
<xs:attribute name="xxx" type="xxx" />
E come gli elementi semplici, anche gli attributi possono avere la definizione di fixed o default.
In aggiunta, gli attributi definiti dallo schema, per natura, sono opzionali ovvero anche se presenti nello schema_XSD possono risultare mancanti nel documento XML, a meno che non siano dichiarati con l'attributo use impostato a require: questo é l'unico modo per rendere un attributo obbligatorio.
Per esempio:
<xs:attribute name="id"
use="require" type="xs:string" />
Restrizioni o Facets
A volte potremmo voler restringere ad un determinato range, per esempio, i valori numerici di un elemento XSD.
E' per questo che ai tipi_di_base_XSD possono essere applicate ulteriori restrizioni o facets.
Per esempio:
Vorremmo poter esprimere un elemento stringa che non contenga più di 20 caratteri.
Come fare?
Grazie a questa feature potremmo validare una stringa in questa maniera:
<xs:element name="cognome">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Ovviamente, se fosse necessario utilizzare una facet in più elementi conviene allora definirla esternamente, in modo da condividerla con tutti gli elementi e attributi che devono utilizzarla:
<xs:simpleType name="limitedStr">
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
A questo punto basta assegnare all'attributo type di ogni elemento che necessita di limitazioni il nuovo tipo limitedStr:
<xs:element name="cognome" type="limitedStr" />
La tabella seguente riassume i tipi di restrizioni che il linguaggio XSD fornisce:
| Restrizione | Descrizione |
|---|---|
| enumeration | Lista di valori |
| fractionDigits | Numero massimo di decimali |
| length | Numero esatto di caratteri |
| maxExclusive | Il valore numerico deve essere inferiore a quello specificato |
| maxInclusive | Il valore numerico deve essere inferiore o uguale a quello specificato |
| maxLength | Numero massimo di caratteri ammessi |
| minExclusive | Il valore numerico deve essere superiore a quello specificato |
| minInclusive | Il valore numerico deve essere superiore o uguale a quello specificato |
| minLength | Numero minimo di caratteri ammessi |
| pattern | Sequenza di caratteri ammessi (regular expressions) |
| totalDigits | Numero di cifre ammesse |
| whiteSpace | Specifica come gestire gli spazi bianchi |
Ciò che è stato esposto in questo articolo risulta essere sicuramente importante per una definizione accurata delle tipologie di dati complesse che si vorranno creare a partire dalla loro definizione XSD.
Alla prossima,
MA.
0 commenti:
Posta un commento
Non ti è chiaro qualcosa?
No problem, posta il tuo dubbio ;)
..... e ricordati di firmarlo!