Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Gli elementi di XML Schema

Le tipologie degli elementi da includere in un file XML Schema: elementi semplici e complessi
Le tipologie degli elementi da includere in un file XML Schema: elementi semplici e complessi
Link copiato negli appunti

Una volta aperto il tag <schema> bisogna inserire al suo interno tutti gli elementi che vogliamo definire per il nostro documento. Esistono sostanzialmente due tipi di elementi:

  • gli elementi semplici non possono contenere altri elementi e avere attributi. Possono contenere solo testo.
  • gli elementi complessi possono contenere testo, altri elementi e attributi in qualsiasi combinazione.

Anche qui vediamo qualche esempio:

<titolo>Al di là del bene e del male</titolo>

Titolo è un elemento semplice poichè contiene solo testo, non ha attributi e non contiene altri elementi.

Vediamo un esempio di elemento complesso:

<libro>
        <titolo>Al di là del bene e del male</titolo>
        <autore>Nietzsche</autore>
        <numeroDiPagine>272</numeroDiPagine>
</libro>

Libro è sicuramente un elemento complesso poichè contiene altri elementi. Contiene infatti titolo, autore e numeroDiPagine.

Dichiarare un elemento semplice è piuttosto facile. Il metodo base consiste nel digitare

<xs:element name="xxx" type="yyy" />

dove al posto di xxx è sufficiente scrivere il nome che si desidera usare per l'elemento mentre yyy va sostituito con il tipo dell'elemento (che può far parte dei tipi base o di quelli che abbiamo definito noi).

Per gli elementi è anche possibile definire un valore di default (sarà assegnato quando nessun altro valore è specificato) o un valore fisso (che sarà sempre automaticamente assegnato all'elemento).

<xs:element name="titolo" type="xs:string" default="nessun titolo specificato" />
<xs:element name="titolo" type="xs:string" fixed="divina commedia" />

Definire un attributo per un elemento complesso è altrettanto semplice.

<xs:attribute name="xxx" type="yyy" />

Naturalmente xxx va sostituito con il nome dell'attributo e yyy con il suo tipo. È interessante notare che un attributo è considerato un elemento di tipo semplice e pertanto non può contenere altri elementi e avere attributi. Il fatto che l'attributo sia considerato un tipo semplice spiega anche perchè un elemento che lo contiene dev'essere necessariamente di tipo complesso.

Anche per gli attributi valgono i valori fissi e di default. È inoltre possibile specificare se un attributo è opzionale o richiesto. Vediamo i due esempi:

<xs:attribute name="votato" type="xs:integer" use="optional" />
<xs:element name="votato" type="xs:integer" use="required" />

Dichiarare un elemento complesso è naturalmente più complicato. Questo è vero a maggior ragione se decidiamo di limitare la sua "complessità", per esempio consentendo solo attributi o solo elementi. Un tipo complesso può essere infatti di molti tipi diversi:

  • può essere un elemento vuoto
  • può contenere solo elementi
  • può contenere solo testo
  • può contenere sia elementi che testo

Infine, per ognuna di queste ipotesi l'elemento può anche essere dotato di attributi. Noi, per semplicità, ci limitiamo alla sintassi base per dichiarare un elemento complesso che permette sia testo che altri elementi ed attributi:

<xs:element name="nomeElemento">
<xs:complexType>
<!-- .... elementi o attributi contenuti ... -->
<xs/complexType>
<xs:element>

Naturalmente, anche se abbiamo scelto di spiegare solo la sintassi base, è bene sapere che tra il tag che indica il tipo complesso <xs:complexType> e gli elementi o attributi dichiarati esistono una serie di "opzioni" per ottenere uno schema più preciso e più coerente nella gestione dei dati. Tuttavia la nostra guida è dedicata ai Web service e non ad XML Schema, quindi vedremo rapidamente solo alcuni indicatori. Per chi volesse approfondire tralasciamo volutamente gli indicatori di gruppo, le estensioni, le restrizioni, le sostituzioni, gli elementi <any> ed alcune particolari forme di dichiarazione utili in scenari di sviluppo particolarmente complessi.

Gli indicatori principali sono quelli di ordine e di presenza.

  • all* specifica di default che gli elementi child possono apparire in qualsiasi ordine e che ogni elemento child deve apparire una ed una sola volta.
  • choice* specifica che gli elementi in esso contenuti possono apparire in alternativa l'uno all'altro.
  • sequence* specifica che gli elementi child devono apparire nell'ordine specifico (quello con cui sono dichiarati al suo interno).
  • maxOccurs** specifica quante volte un elemento può ripetersi
  • minOccurs** specifica quanti elementi di quel tipo devono ripetersi perchè il documento sia considerato valido

(*) L'esempio che abbiamo fatto con l'elemento libro introduce il metodo per avvelersi di questo indicatore (nell'esempio abbiamo usato l'indicatore "all").
(**) minOccurs e maxOccurs vanno applicati direttamente come attributo nella dichiarazione dell'elemento ed hanno un valore di default pari ad 1 per gli indicatori any, all, choice, sequence, group name e group reference. Esempio: <xs:element name="libro" type="xs:string" maxOccurs="3" minOccurs="1" />.

Ti consigliamo anche