Swappa : Uni / Tecnologie Web - XML Schema Definition
Creative Commons License

Torna alla pagina di Tecnologie Web


 :: Tecnologie Web ::

XML Schema Definition

Indice

  1. Cos'è
  2. Elemento <schema>
  3. Componenti
  4. Esempio finale

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.

Quindi riassumendo i vantaggi che un XML Schema offre rispetto ad un DTD sono:

Dal 2 maggio 2001 l'XSD è felicemente diventato W3C recommendation, con successiva revisione il 28 ottobre 2004.

Elemento <schema>

L'elemento <schema> è l'elemento radice di ogni XML schema e può contenere diversi attributi.
Esempio:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.miosito.org"
    elementFormDefault="qualified">
  "definizione della struttura"
</xs:schema>

Analizziamo questo frammento di codice:

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

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).
XML Schema ha 41 tipi di dati predefiniti ed i più utlizzati sono: xs:string; xs:decimal; xs:integer; xs:boolean; xs:data; xs:time.

La sintassi per definire un elemento semplice è:

<xs:element name="xxxx" type="yyyy" />

Un elemento semplice può avere valore:

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 possibili valori degli elementi:

Elementi complessi e Indicatori

Gli elementi complessi sono quei componenti dell'XSD che possono contenere attributi o altri elementi al loro interno.
La sintassi per definire un elemento complesso è:

<xs:complexType> ... </xs:complexType>

Ci sono quattro tipi di elementi complessi;

Esempio:

<prodotto id="12345"/>

Esempio:

<docente>
   <nome>Gabriele</nome>
   <cognome>Gianini</cognome>
</docente>

Esempio:

<cibo tipo="dessert"> Gelato<cibo/>

Esempio:

<descrizione>
          Accaduto il
          <data lang=italian">
              17-05-2007
          </data>
</descrizione>

Nel caso in cui l'elemento ne contenga altri, è possibile definire ordinamenti, cardinalità e raggruppamenti attraverso l'uso degli indicatori. In dettaglio:

Un complexType si può riferire un due modi:

Esempio:

<xsd:element name="Studenti">
 <xsd:complexType>
  <xsd:choice>
       <xsd:element name="studente" ref="StudentType"/>
       <xsd:element name="studente-diplomato" type="GraduateStudent"/>
  </xsd:choice>
 </xsd:complexType>
</xsd:element>

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.

NOTA: Se un elemento complesso contiene testo, altri elementi che a loro volta contengono attributi bisogna utilizzare il campo mixed settato al valore TRUE. Vedere l'esercizio 1 di questo appello d'esame per capire a cosa mi riferisco ESEMPIO

Attributi

Gli attributi sono quei componenti dell'XSD che forniscono informazioni aggiuntive sugli elementi complessi, anche se vengono dichiarati come tipi semplici.
La sintassi per la definizione di un attributo è:

<xs:attribute name="xxxx" type="yyyy" use="zzzz" />

dove:

Inoltre è possibile inserire una delle seguenti proprietà:

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

(Printable View of http://www.swappa.it/wiki/Uni/XMLSchema)