Come abbiamo visto negli scorsi articoli un documento XML è valido se associato ad una DTD e conforme con essa.
A questo punto c’è da chiedersi quali siano le regole per creare DTD.
DOCTYPE
Innanzi tutto un documento XML viene associato ad una DTD attraverso l’elemento.
La sintassi di questo elemento varia in funzione della tipologia di associazione da effettuare, le varie tipologie sono le seguenti:
/
dove gli attributi hanno il seguente significato:
- [DTD] è il nome facoltativo della grammatica
- URL è l’url di una DTD raggiungibile via HTTP
- SYSTEM identifica una DTD tradizionale
- PUBLIC identifica una DTD pubblica che segue regole leggermente più complesse
Riprendiamo l’esempio visto qualche tempo fa:
…/
in questo caso stiamo inserendo una DTD utilizzando un file.dtd contenuto sullo stesso file-system del documento XML da validare.
ELEMENT
Ogni singolo elemento viene indicato all’interno del DTD attraverso il tag.
La sintassi generica di questo tag è la seguente:, dove i singoli attributi hanno il seguente significato:
- NAME è il nome dell’elemento che si sta dichiarando
- CONTENT_MODEL è un attributo che può assumere i seguenti valori:
- EMPTY: l’elemento non può contenere figli
- ANY: l’elemento può contenere qualsiasi figlio
- Contenuto misto: il contenuto dell’elemento dipende dalla grammatica
Vediamo alcuni esempi.
/
L’elemento Persona può contenere soltanto elementi con il nome indicato.
/
L’elemento Rubrica_Telefonica può contenere un numero qualsiasi di elementi, ma tutti si devono chiamare Persona.
/
L’elemento Nome può contenere solo dati di tipo carattere, cioè diversi da altri elementi figli.
/
L’elemento BR non può avere nessun valore e nessun figlio, questo è il caso del tag dell’HTML.
/
L’elemento HTML può avere qualsiasi valore e qualsiasi figlio, questo è il caso del tag dell’HTML.
Elementi multipli
Prendiamo ancora l’elemento.
Esso stabilisce che l’elemento Rubrica_Telefonica possa avere un numero qualsiasi di figli, a condizione che si tratti sempre dell’elemento Persona.
La sintassi utilizzata prevede una regola generale di questo tipo:/
dove value può assumere le forme seguenti:
- value+ una o più occorrenze di value
- value* zero o più occorrenze di value
- value? una occorrenza di value oppure niente
- value1,value2 una occorrenza di value1 seguita da una occorrenza di value2
- value1|value2 value1 oppure value2
Queste regole devono essere considerate tenendo conto che ogni espressione racchiusa tra parentesi viene considerata come un singolo elemento, di conseguenza è possibile aspettarsi elementi di questo tipo:
/
/
/
Nel prossimo articolo parleremo di entità ed attributi delle DTD.