cerca
Tecnologie Web - XML Schema Definition
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Tecnologie Web - XML Schema Definition

Torna alla pagina di Tecnologie Web


 :: Tecnologie Web ::

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.

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

  • sono adatti per futuri ampliamenti.
  • sono più completi e dettagliati dei DTD.
  • sono documenti XML.
  • supportano i tipi di dati, quindi è più facile: controllare la correttezza dei dati, lavorare con dati provenienti da database, definire restrizioni sui dati, convertire dati da un tipo all'altro.
  • supportano i namespace.
  • sono estendibili, quindi è possibile: riusare uno schema all'interno di altri, creare tipi di dati personalizzati derivandoli da quelli standard, fare riferimento a più schemi dallo stesso documento.

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:

  • <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema": il tag <xs:schema> specifica attraverso l'attributo xmlns che in questo documento sarà applicato lo standard del W3C e che quindi tutti gli elementi e i datatype presenti appartengono al namespace http://www.w3.org/2001/XMLSchema. Di conseguenza gli elementi appartenenti a questo namespace devono essere preceduti da xs.
  • targetNamespace="http://www.miosito.org": indica che gli elementi definiti dallo schema appartengono al namespace http://www.miosito.org.
  • elementFormDefault="qualified">: indica che gli elementi usati nei documenti XML conformi a questo schema, hanno nomi qualificati.

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

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:

  • default: il valore di default viene automaticamente assegnato all'elemento nel caso non ne siano assegnati altri.
  • fixed: il valore fixed viene automaticamente assegnato all'elemento.

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:

  • 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.
La sintassi per definire un elemento complesso è:

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

Ci sono quattro tipi di elementi complessi;

  • elementi vuoti.

Esempio:

<prodotto id="12345"/>
  • elementi che contengono solo altri elementi.

Esempio:

<docente>
   <nome>Gabriele</nome>
   <cognome>Gianini</cognome>
</docente>
  • elementi che contengono solo testo.

Esempio:

<cibo tipo="dessert"> Gelato<cibo/>
  • elementi che contengono altri elementi e testo.

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:

  • indicatori di ordinamento, indicano quale deve essere l'ordine con cui devono apparire gli elementi:
    • 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à, indicano quanti elementi possono comparire nel documento:
    • maxOccurs: max numero di occorrenze (default 1). Con "unbounded" l'elemento può comparire infinite volte.
    • minOccurs: min numero di occorrenze (default 1).
  • indicatori di gruppo, definiscono insiemi di elementi correlati:
    • Group name. Dopo aver definito un gruppo sarà possibile usarlo all'interno di altre definizioni più complesse.
    • attributeGroup name. Dopo aver definito un gruppo di attributi, sarà possibile richiamarli in altre dichiarazioni.

Un complexType si può riferire un due modi:

  • ref: riferisce un elemento e quindi anche il suo nome.
  • type: riferisce un tipo e quindi solo le sue componenti.

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:

  • (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.

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:

  • 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(required) o opzionale(optional).

Inoltre è possibile inserire una delle seguenti proprietà:

  • default="valoreDef", fixed="valoreFisso".

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