Swappa : Uni / Basi di Dati - Complementi - XML Schema Definition
Creative Commons License

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

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:

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:

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:

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:

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

(Printable View of http://www.swappa.it/wiki/Uni/BDC-XSD)