cerca
Basi di Dati - Complementi - Document Type Definition
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Basi di Dati - Complementi - Document Type Definition

 :: 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:

  • stringhe, indicate dalla parola chiave CDATA
  • token, che limitano i valori permessi sull'attributo. Un esempio è ID che identifica in modo univoco un elemento
  • enumerazioni, che specificano una serie di valori permessi indicati tra parentesi tonde e separate da |. Ad esempio:
    <!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:

  • 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