:: Basi di Dati - Complementi ::
XML Schema Definition
Cos'è
L' XML Schema Definition (XSD) è una specifica della struttura dei documenti XML, più precisa e modulare rispetto ai DTD, definita all'interno di un altro documento XML. Un XDS consente di definire elementi e attributi, di dichiarare il tipo di ciascun elemento e attributo sulla base di un insieme ampio di tipi predefiniti, di costruire nuovi tipi con l'aiuto di costruttori di tipi complessi e di esprimere vincoli sulla struttura degli elementi e degli attributi più sofisticati di quelli offerti dai DTD. Un documento XML che rispetta la descrizione del proprio XSD, si dice validato rispetto ad esso.
Dal 2 maggio 2001 l'XSD è felicemente diventato W3C recommendation, con successiva revisione il 28 ottobre 2004.
Componenti
L'XSD è costituito da un insieme di componenti elementari, 13 in tutto, divisi in tre categorie: primari, secondari e di aiuto. Di seguito studieremo solo i primari, ovvero:
- elementi semplici
- elementi complessi
- indicatori
- attributi
Prima di analizzarli singolarmente, anticipiamo che uno XML Schema deve avere la seguente struttura generale:
<?xml version"1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
"definizione della struttura"
</xs:schema>
Notare come il tag <xs:schema> specifichi attraverso l'attributo xmlns che in questo documento sarà applicato lo standard del W3C.
Elementi semplici
Gli elementi semplici sono quei componenti che non possono contenere altri elementi o attributi al loro interno, ma solo tipi standard o loro derivati. I tipi derivati sono generalmente generati con meccanismi di ereditarietà da altri tipi, su cui si applicano alcune restrizioni.
Sono elementi semplici i numeri (es: int, float, double, byte, ...
), le date (es: date, duration, ...
), i booleani (boolean
), valori XML (ID, IDREF, ...
), gli URI (uriReference
), i dati binari o le stringhe di testo (es: string
).
Gli elementi semplici si indicano col tag: <xs:element nomeElemento tipoElemento ...>
Si possono inoltre definire valori fissi (fixed
) o di default (default
); la differenza è che se nel secondo caso il valore viene applicato al contenuto dell'elemento solo se questo è vuoto, con fixed
l'assegnamento avviene sempre. Alcuni esempi:
<xs:element name="Nome1" type="tipo1" />
<xs:element name="Nome2" type="tipo1" default="ciao" />
<xs:element name="Nome3" type="tipo2" fixed="belo" />
E' infine possibile imporre diversi tipi di restrizioni sui valori, tra cui:
- whiteSpace, tipo di gestione dei whitespace
- totalDigit, numero esatto di caratteri alfanumerici
- pattern, sequenza di caratteri
- min/maxLength, lunghezza minima e massima
- min/maxInclusive, limite numerico inferiore/superiore, esso compreso
- min/maxExclusive, limite numerico inferiore/superiore, esso escluso
- length, numero esatto di caratteri (>=0)
- fractionDigit, numero di decimali dopo la virgola (>=0)
- enumeration, lista di valori accettabili
Elementi complessi e Indicatori
Gli elementi complessi sono quei componenti dell'XSD che possono contenere attributi o altri elementi al loro interno. Si indicano col tag: <xs:complexType> ... </xs:complexType>
Nel caso in cui l'elemento ne contenga altri, è possibile definire ordinamenti, cardinalità e raggruppamenti attraverso l'uso degli indicatori. In dettaglio:
- indicatori di ordinamento
- Any: qualunque elemento, in qualunque ordine
- All: tutti gli elementi, in qualunque ordine
- Choice: uno e un solo elemento
- Sequence: tutti gli elementi, nell’ordine specificato
- indicatori di cardinalità
- maxOccurs: max numero di occorrenze (default 1)
- minOccurs: min numero di occorrenze (default 1)
- raggruppamento
- Group name
- Group reference
Un esempio di dichiarazione di elemento complesso è il seguente:
(1) <xs:element name="persona">
(2) <xs:complexType>
(3) <xs:sequence>
(4) <xs:element name="Cognome" type="xs:string" />
(5) <xs:element name="Nome" type="xs:string" maxOccurs="4" minOccurs="1" />
(6) </xs:sequence>
(7) </xs:complexType>
(8) </xs:element>
Commenti punto per punto:
- (1) definisce un nuovo elemento che ha nome "persona"
- (2) annuncia che tale elemento è di tipo complesso
- (3) dichiara che gli elementi seguenti dovranno essere tutti utilizzati nell'ordine specificato
- (4) definisce un nuovo elemento semplice di tipo stringa chiamato "Cognome"
- (5) definisce un nuovo elemento semplice di tipo stringa chiamato "Nome", obbligatorio e che può avere massimo 4 occorrenze (es. Andrea Giovanni Battista)
- (6), (7) e (8) sono tags di chiusura
Infine, sottolineiamo come un elemento di tipo complesso possa essere a sua volta un elemento complesso. Pensiamo ad esempio a un elemento che contenga i dati di una persona, tra cui anche l'indirizzo, anch'esso composto da più elementi (via, numero, città, ...). Oltre a permettere una nidificazione che meglio struttura il nostro documento XML, questa proprietà consente di condividere tra più elementi alcuni tipi complessi.
Attributi
Gli attributi sono quei componenti dell'XSD che forniscono informazioni aggiuntive sugli elementi complessi. Si indicano col tag: <xs:attribute ... ... />
Tra le proprietà che possono essere definite al loro interno ricordiamo senz'altro:
name="NomeAttributo"
per indicare il nome
type="TipoAttributo"
per il tipo, che può essere solo uno di quelli standard, non derivati
use="TipoDiUso"
che specifica se l'attributo è obbligatorio o opzionale
default="valoreDef"
, fixed="valoreFisso"
e le varie restrizioni, tutte proprietà che abbiamo già visto per gli elementi semplici.
Un esempio di dichiarazione di attributo è il seguente:
<xs:attribute name="NomeAttributo1" type="TipoAttributo1" />
<xs:attribute name="NomeAttributo2" type="TipoAttributo1"
default|fixed="ciao" use="required|optional" />
Esempio finale
XML Schema
(1) <?xml version="1.0"?>
(2) <schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
(3) <xs:element name="note">
(4) <xs:complexType>
(5) <xs:sequence>
(6) <xs:element name="to" type="xs:string">
(7) <xs:element name="from" type="xs:string">
(8) <xs:element name="head" type="xs:string">
(9) <xs:element name="body" type="xs:string">
(10) </xs:sequence>
(11) </xs:complexType>
(12) <xs:attribute name="when" type="xs:date" use="required" />
(13) </xs:element>
(14) </schema>
Commento
- (1) e (2), indicano la versione e lo standard di riferimento del documento
- (3) definisce un nuovo elemento che ha nome "note"
- (4) annuncia che tale elemento è di tipo complesso
- (5) dichiara che gli elementi seguenti dovranno essere tutti utilizzati nell'ordine specificato
- (6), (7), (8) e (9) definisce quattro nuovi elementi semplici di tipo stringa che compongono l'elemento complesso "note". Essi si chiamano rispettivamente "to", "from", "head" e "body"
- (10) e (11) sono tags di chiusura
- (12) definisce un attributo di nome "when" per il tipo complesso "nome". E' di tipo "data" ed il suo utilizzo è obbligatorio
- (13) e (14) sono tags di chiusura
Documento XML valido
<?xml version="1.0"?>
<note when="15/07/2006">
<to> Rossi Andrea </to>
<from> Bianchi Riccardo </from>
<head> Promemoria </head>
<body> Compleanno Michela </body>
</note>
Torna alla pagina di Basi di Dati - Complementi