:: Basi di Dati - Complementi ::
Document Type Definition
Il Document Type Definition (DTD) è una specifica della struttura di documenti XML: se il documento rispetta tale specifica si dice valido rispetto ad essa. Il suo utilizzo è opzionale e può essere specificato sia all'interno del documento XML (generalmente all'inizio) che in un documento separato cui fa riferimento con una particolare direttiva (<!DOCTYPE root-element SYSTEM "filename">
).
E' costituito da un insieme di regole, che possono essere di due tipi:
Per definire gli elementi leciti all'interno del documento si utilizza la seguente sintassi:
<! ELEMENT nomeElemento (modelloDiContenuto)>
Il modello di contenuto può essere di vari tipi:
<! ELEMENT nomeElemento (nomeElementoAnnidato1, nomeElementoAnnidato2, ...)>
<! ELEMENT nomeElemento (#PCDATA)>
<! ELEMENT nomeElemento (#PCDATA | nomeElementoAnnidato)>
<! ELEMENT nomeElemento ANY>
<! ELEMENT nomeElemento EMPTY>
Ogni elemento può avere diversi indicatori di occorrenza per i suoi sotto-elementi, quindi diversa cardinalità:
<! ELEMENT nomeElemento (nomeElementoAnnidato)>
<! ELEMENT nomeElemento (nomeElementoAnnidato?)>
<! ELEMENT nomeElemento (nomeElementoAnnidato+)>
<! ELEMENT nomeElemento (nomeElementoAnnidato*)>
Gli attributi forniscono informazioni aggiuntive sugli elementi, e per definire quelli leciti all'interno del documento si utilizza la seguente sintassi:
<!ATTLIST nomeElemento nomeAttributo1 (tipo) valoriPredefiniti nomeAttributo2 (tipo) valoriPredefiniti ... ... ...>
I tipi sono fondamentalmente tre:
<!ATTLIST messaggio Avviso ( basso | normale | urgente) “basso”>Ho tre valori permessi (basso, normale, urgente) di cui basso è quello predefinito.
Per quanto riguarda i valori predefiniti degli attributi, su essi possono essere imposti alcuni vincoli:
Documento XML di partenza:
<elenco> <prodotto codice="123"> <descrizione> libro </descrizione> <prezzo> 50 </prezzo> </prodotto> <prodotto codice="456"> <descrizione> penna stilo </descrizione> </prodotto> </elenco>
DTD risultante:
(1) <!ELEMENT ELENCO (PRODOTTO+)> (2) <!ELEMENT PRODOTTO (DESCRIZIONE, PREZZO?)> (3) <!ATTLIST PRODOTTO codice ID #REQUIRED> (4) <!ELEMENT DESCRIZIONE (#PCDATA)> (5) <!ELEMENT PREZZO (#PCDATA)>
Commenti punto per punto:
Il Document Type Definition è molto semplice da scrivere e questo ha un prezzo: