eXtensible Markup Language Tutorial - by Marco Giannì
Capitolo III: Definizione del tipo di documento (DTD)

Creazione di una DTD semplice

Creiamo un documento XML di messaggio di posta elettronica con un sottoinsieme DTD interno.

<?xml version="1.0"?>

 <!DOCTYPE EMAIL [
  <!ELEMENT EMAIL (TO, FROM, CC, SUBJECT, BODY)>
  <!ELEMENT TO (#PCDATA)>
  <!ELEMENT FROM (#PCDATA)>
  <!ELEMENT CC (#PCDATA)>
  <!ELEMENT SUBJECT (#PCDATA)>
  <!ELEMENT BODY (#PCDATA)>
 ]>

 <EMAIL>
  <TO>Jodie@msn.com</TO>
  <FROM>Bill@msn.com</FROM>
  <CC>Philip@msn.com</CC>
  <SUBJECT>My first DTD</SUBJECT>
  <BODY>Hello, World</BODY>
 </EMAIL>

Si noti che il codice contiene informazioni aggiuntive nella dichiarazione del tipo di documento. In questo caso si tratta del sottoinsieme DTD interno e identifica gli elementi che possono essere presenti nel documento e il tipo di dati che deve contenere. Se questo documento viene eseguito visualizzando la pagina XML, il documento avrà questo aspetto:

In questo caso l'elaboratore sta convalidando il documento in base alla DTD. In altri termini la pagina XML che visualizza il documento esegue l'analisi utilizzando un elaboratore di convalida. Ciò significa che l'elaboratore verifica il documento in base alle regole della DTD per accertare che tutto il codice utilizzato nel documento sia valido.

Per verificare il funzionamento della convalida, aggiungiamo un elemento non incluso nella DTD al documento, ad esempio un elemento Signature, al termine del documento, come:

<?xml version="1.0"?>

 <!DOCTYPE EMAIL [
  <!ELEMENT EMAIL (TO, FROM, CC, SUBJECT, BODY)>
   <!ELEMENT TO (#PCDATA)>
   <!ELEMENT FROM (#PCDATA)>
   <!ELEMENT CC (#PCDATA)>
   <!ELEMENT SUBJECT (#PCDATA)>
   <!ELEMENT BODY (#PCDATA)>
 ]>
<EMAIL> <TO>Jodie@msn.com</TO> <FROM>Bill@msn.com</FROM> <CC>Philip@msn.com</CC> <SUBJECT>My first DTD</SUBJECT> <BODY>Hello, World</BODY> <SIGNATURE>Bill</SIGNATURE> </EMAIL>


Se si cerca di eseguire questo documento, verrà visualizzato un messaggio di errore perché l'elaboratore non trova la dichiarazione relativa all'elemento Signature nella DTD simile a questo :

Element content is invalid according to the DTD/Schema. (Il contenuto dell'elemento non è valido in base alla DTD/Schema.)

Modifichiamo adesso una parte della DTD. Notiamo che la prima dichiarazione dell'elemento è relativa all'elemento Email:

<!ELEMENT EMAIL (TO,FROM,CC,SUBJECT,BODY)>

All'interno di questa riga di codice tra le parentesi è presente un elenco degli altri elementi che possono essere contenuti nel documento. Questo elenco viene definito modello di contenuto e identifica gli elementi secondari che l'elemento Email deve contenere e l'ordine in cui sono elencati.

Ad esempio rimuoviamo l'elemento Subject dal modello di contenuto.

<!DOCTYPE EMAIL [
 <!ELEMENT EMAIL (TO, FROM, CC, BODY)>
 <!ELEMENT TO (#PCDATA)>
 <!ELEMENT FROM (#PCDATA)>
 <!ELEMENT CC (#PCDATA)>
 <!ELEMENT SUBJECT (#PCDATA)>
 <!ELEMENT BODY (#PCDATA)>
]>

L'esecuzione del documento causerebbe un errore, perché il documento non ha seguito il modello di documento specificato. Torniamo al documento originale per modificare l'ordine degli elementi From e Cc affinché la parte superiore del documento assuma l'aspetto seguente:

<EMAIL>
 <TO>Jodie@msn.com</TO>
 <CC>Philip@msn.com</CC>
 <FROM>Bill@msn.com</FROM>
 <SUBJECT>My first DTD</SUBJECT>
 <BODY>Hello, World</BODY>
 <SIGNATURE>Bill</SIGNATURE>
</EMAIL>

Ancora una volta al momento dell'esecuzione del documento, verrà restituito un errore perché l'elaboratore prevedeva un altro elemento al posto di quello ottenuto.

E' dunque chiaro che la DTD ha il ruolo di un rigido regolamento per i documenti XML, quindi è importante fare attenzione al momento della creazione delle DTD.

<indietro home page avanti>

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