eXtensible Markup Language Tutorial - by Marco Giannì
Capitolo IV: Ampliare i documenti XML

Dichiarazioni del tipo di elemento

Il tipo di elemento è dichiarato nell'elemento ElementType. Ogni dichiarazione del tipo di elemento deve includere un attributo Name, che definisce il tipo di elemento. Ad esempio. La dichiarazione del tipo di elemento riportata di seguito dichiara un tipo di elemento con il nome Plant:

<ElementType name="plant">

Il tipo di contenuto di elemento può essere dichiarato con l'attributo content. In questo modo il contenuto dell'elemento è vincolato al tipo specificato.

TIPO DI CONTENUTO

Ogni tipo di elemento può contenere una delle quattro categorie relative al contenuto: vuoto, solo testo, solo sottoelementi o una combinazione di testo e sottoelementi. I valori possibili sono i seguenti:

  • empty - non contiene alcun tipo di contenuto
  • textOnly - contiene solo testo
  • eltOnly - contiene solo sottoelementi
  • mixed - contiene una combinazione di testo e sottoelementi

Oltre ai vincoli relativi al contenuto, una dichiarazione del tipo di elemento può anche specificare il pattern in cui gli elementi nella dichiarazione appaiono, utilizzando l'attributo order.

ORDINAMENTO DEL CONTENUTO

L'attributo order vincola il pattern per i tipi di elementi dichiarati in una dichiarazione del tipo di elemento. I valori possibili sono i seguenti:

  • seq - Gli elementi devono apparire nella stessa sequenza degli elementi a cui si fa riferimento nella dichiarazione del tipo di elemento. Questo è il pattern predefinito per il contenuto eltOnly.
  • one - Un sottoelemento del tipo dichiarato nella dichiarazione del tipo di elemento deve essere contenuto nell'elemento principale.
  • all - Un elemento di ogni tipo dichiarato nella dichiarazione del tipo di elemento deve comparire come sottoelemento, ma i sottoelementi possono avere un ordine qualsiasi.
  • many - Ciascuno degli elementi dichiarati nella dichiarazione del tipo di elemento può avere un ordine qualsiasi. Questo è il pattern predefinito per il contenuto mixed.

L'esempio seguente mostra la dichiarazione del tipo di elemento Plant, che contiene i sottoelementi che devono essere ordinati in modo sequenziale:

<ElementType name="name" content="textOnly"/>
<ElementType name="growth" content="mixed"/>
<ElementType name="saleinfo" content="mixed"/>

<ElementType name="plant" content="eltOnly" order="seq">
 <element type="name"/>
 <element type="growth"/>
 <element type="saleinfo"/>
</ElementType>

E' possibile applicare altri vincoli raggruppando i riferimenti degli elementi mediante l'elemento Group. Questo elemento supporta l'attributo order con gli stessi valori utilizzati per l'elemento ElementType. Ecco un esempio che utilizza l'elemento Group:

<ElementType name="name" content="textOnly"/>
<ElementType name="zone" content="textOnly"/>
<ElementType name="light" content="textOnly"/>
<ElementType name="price" content="textOnly"/>

<ElementType name="plant" content="eltOnly" order="seq">
 <element type="name"/>
 <group order="one">
  <element type="zone"/>
  <element type="light"/>
  <element type="price"/>
 </group>
</ElementType>

In questo caso il tipo di elemento Plant deve contenere un nome a cui deve seguire uno degli elementi Zone, Light o Price.

QUANTITA' DI ELEMENTI E GRUPPI

Come nelle DTD XML, è possibile applicare vincoli in modo da determinare la posizione e il numero delle volte in cui un elemento o un gruppo può essere ripetuto all'interno di un documento. Gli attributi minOccurs e maxOccurs possono essere specificati negli elementi Element e Group. L'attributo minOccurs specifica il numero minimo delle ripetizioni di un elemento, mentre maxOccurs quello massimo. Nella seguente tabella indichiamo le possibili combinazioni di valori per gli attributi minOccurs e maxOccurs con i relativi significati:

minOccurs

maxOccurs
Numero di ripetizioni dell'elemento o del gruppo

1 o non specificato

1 o non specificato

1 (Necessario)

0

1 o non specificato

0 o 1 (opzionale)

Maggiore di 1

Maggiore di n

Almeno minOccurs ripetizione, ma non più di maxOccurs

Maggiore di 1

Minore di 1

0

0

"*"

Qualsiasi numero di ripetizioni

1

"*"

Almeno un'occorrenza

Maggiore di 0

"*"

Almeno minOccurs ripetizioni

Qualsiasi valore

0

0

Il valore predefinito per ambedue gli attributi minOccurs e maxOccurs è 1. Questo significa che, se non specificato diversamente, gli elementi devono occorrere una sola volta all'interno di un determinato tipo di elemento. Nell'esempio che segue il gruppo deve occorrere almeno una volta, quindi anche più volte:

<ElementType name="name" content="textOnly"/>
<ElementType name="zone" content="textOnly"/>
<ElementType name="light" content="textOnly"/>
<ElementType name="price" content="textOnly"/>

<ElementType name="plant" content="eltOnly" order="seq">
 <element type="name"/>

 <group minOccurs="1" maxOccurs="*" order="one">
  <element type="zone"/>
  <element type="light"/>
  <element type="price"/>
 </group>
</ElementType>
<indietro home page avanti>

Copyright © 2000-2005. Tutti i diritti sono riservati. Per informazioni: mgianni@infinito.it