Creare documenti validi con le DTD Parte 1
- Il prologo del documento deve includere una dichiarazione del tipo di documento adatta, che contenga una DTD in grado di definire il contenuto e la struttura del documento XML;
- Il documento è conforme al contenuto ed alla struttura definiti in uno schema XML compreso in un file separato. Degli schemi ce ne occuperemo tra qualche lezione.
Una DTD è un blocco di tag XML che deve essere aggiunto al prologo. Non sarà possibile includere nel documento qualsiasi elemento o attributo non indicato nella DTD.
La forma della DTD
Una DTD ha la seguente forma:
Nome specifica il nome dell' elemento del documento;
DTD deve essere sostituito con il contenuto effettivo.
N.B. DTD deve essere scritto in maiuscolo.
Una DTd è costituita da una parentesi quadra aperta ([), seguita da una serie di dichiarazioni di tag e da una parentesi quadra chiiusa (]). Ecco un esempio:
<!DOCTYPE INVENTARIO
[
<!ELEMENT INVENTARIO ANY
]
>
Questo esempio che segue è un primo file XML molto semplice e breve contenente una DTD. In questo documento la DTD specifica che può contenere solo elementi di tipo INVENTARIO, che è l'unico tipo di elemento definito, e mediante la parola chiave ANY, possiamo aggiungere qualsiasi tipo di contenuto.
Dichiarazione dei tipi di elementi
In un documento XML valido è necessario dichiarare in modo esplicito tutti i tipi di elementi utilizzati attraverso una dichiarazione del tipo di documento all' interno della DTD. La forma di una dichiarazione del tipo di elemenmto è la seguente:
Nome è il nome del tipo di elemento dichiarato;
Contenuto è la specifica del contenuto che definisce il contenuto dell' elemento. Come esempio, ho realizzato un file con due tipi di elementi. La dichiarazione del tipo di elemento INVENTARIO indica che può contenere uno o più elementi LIBRO e la dichiarazione del tipo di elemento LIBRO specifica che può contenere solo caratteri, indicati dalla parola chiave: #PCDATA. Ecco il file di esempio.
La specifica del contenuto dell' elemento
È possibile specificare il contenuto di un elemento, cioè completare la parte Contenuto della dichiarazione del tipo di elemento, in quattro modi diversi:
- Contenuto EMPTY. Si utilizza la parola chiave EMPTY per indicare che l' elemento deve essere vuoto, o non può avere alcun contenuto. Per esempio:
<!ELEMENT IMAGE EMPTY>
Di seguito un esempio di elemento IMAGE valido: <IMAGE /> - Contenuto ANY. Si utilizza la parola chiave ANY per indicare che l' elemento può contenere qualsiasi contenuto valido, cioè può avere nessuno o più elementi secondari, in qualsiasi ordine o numero di ripetizioni, con o senza caratteri. Un esempio: <!ELEMENT LIBRO ANY>
- Contenuto dell' elemento, noto anche come contenuto secondario. L' elemento può contenere elemenmti secondari, ma non può contenere direttamente caratteri.
- Contenuto misto. L' elemento può contenere qualsiasi quantità di caratteri, alternata con elementi secondari specificati.
Si veda il seguenete esempio di file "xml".
Il tipo di elemento LIBRO è dichiarato in modo tale da disporre di contenuto. I nomi degli elementi (AUTORE e TITOLO), prendono il nome di modello di contenuto. Un modello di contenuto indica i possibili tipi di elementi secondari e il loro ordine. In questo file viene indicato che un elemento LIBRO deve avere un elemenmto secondario AUTORE seguito da un elemento secondario TITOLO. Un modello di contenuto può avere una delle seguenti forme principali:
- Sequenza. La forma della sequenza indica che l' elemento deve avere una sequenza specifica di elementi secondari, come nel caso del file visto nell' esempio. Omettere un elemenmto secondario o includerne più di uno, non sarà ritenuto valido.
- Scelta. Un modello di contenuto indica che un elemento può avere qualsiasi elemento secondario disponibile in una serie, separato dal simbolo pipe (|), che indica or. Vedere il seguente file di esempio.
Si possono modificare queste forme del modello di contenuto grazie a tre caratteri speciali, cioè:
?: Nessuno o uno degli elementi precedenti;
+ : Uno o più elemenmti precedenti;
* : Nessuno o più elementi precedenti.
Per il momento ci fermiamo qui così possiamo "digerire" un pò tutte queste regole sintattiche dell' XML.
Alla prossima.
| < Prec. | Succ. > |
|---|

