:: Basi di Dati - Complementi ::
Document Type Definition
Cos'è
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:
- regole che definiscono gli elementi XML ammissibili e il loro contenuto
- regole che specificano gli attributi degli elementi XML, il loro tipo e i vincoli sul loro valore
Sintassi
Elementi
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:
- se l'elemento ne contiene altri annidati:
<! ELEMENT nomeElemento (nomeElementoAnnidato1, nomeElementoAnnidato2, ...)>
- se l'elemento ha contenuto testuale:
<! ELEMENT nomeElemento (#PCDATA)>
- se l'elemento ha contenuto misto si utilizza il simbolo | come separatore:
<! ELEMENT nomeElemento (#PCDATA | nomeElementoAnnidato)>
- se l'elemento non è sicuramente vuoto, ma non se ne conosce il modello di contenuto:
<! ELEMENT nomeElemento ANY>
- se l'elemento è vuoto:
<! ELEMENT nomeElemento EMPTY>
Ogni elemento può avere diversi indicatori di occorrenza per i suoi sotto-elementi, quindi diversa cardinalità:
- se ho una sola occorrenza, non ho indicatori
<! ELEMENT nomeElemento (nomeElementoAnnidato)>
- se l'occorrenza è facoltativa (0 o 1 volta), si indica col simbolo ?
<! ELEMENT nomeElemento (nomeElementoAnnidato?)>
- se l'occorrenza è obbligatoria e ripetibile (1 o più volte), si indica col simbolo +
<! ELEMENT nomeElemento (nomeElementoAnnidato+)>
- se l'occorrenza è facoltativa e ripetibile (0 o più volte), si indica col simbolo *
<! ELEMENT nomeElemento (nomeElementoAnnidato*)>
Attributi
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:
Per quanto riguarda i valori predefiniti degli attributi, su essi possono essere imposti alcuni vincoli:
- se l'attributo è obbligatorio, si indica col simbolo #REQUIRED
- se l'attributo è facoltativo, si indica col simbolo #IMPLIED
- se all'attributo deve essere associato un valore costante, si indica col simbolo #FIXED "valore"
- per dare un valore di default all'attributo, basta metterlo tra virgolette. Es: "valore1"
Esempio
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:
- (1) l'elemento ELENCO contiene altri elementi di tipo PRODOTTO. In particolare ne deve avere obbligatoriamente almeno 1
- (2) l'elemento PRODOTTO contiene altri due elementi: DESCRIZIONE (che può avere un'unica occorrenza) e PREZZO, la cui presenza è facoltativa
- (3) l'elemento PRODOTTO deve avere come attributo il suo codice identificativo
- (4) e (5) gli elementi DESCRIZIONE e PREZZO sono stringhe di testo
Limiti
Il Document Type Definition è molto semplice da scrivere e questo ha un prezzo:
- gli unici tipi di dati ammessi sono quelli testuali (niente numeri interi o reali, booleani, ecc)
- possono esprimere un numero di vincoli sugli attributi molto limitato
- non sono estendibili
- non gestiscono namespace
Torna alla pagina di Basi di Dati - Complementi