# 4 - La definizione dei tipi di dati (DTD)

Una Data Type Definition consiste in un set di regole strutturali chiamante dichiarazioni

Le dichiarazioni specificano un set di elementi che puo' apparire nel documento e come cio' debba avvenire. Non tutti i documenti xml hanno bisogno di utilizzare DTD, perche' l'utilizzo di queste definizioni e' legato a quello dei fogli di stile esterni dei documenti html. Le DTD vengono impiegate quando un insieme di documenti utilizza la stessa definizione di set di tag. Puo' darsi che sia un gruppo di utenti a servirsi di tale insieme di documenti.

Una DTD puo' essere annidata nel documento xml di cui descrive le regole sintattiche. In questo caso prende il nome di DTD interna. Si parla invece di DTD esterna quando la DTD viene memorizzata in un file separato. Queste ultime sono da preferire perche' possono venire utilizzate con piu' di un documento. Di frequente infatti gruppi di utenti definiscono le DTD per i loro tipi di dati particolari. In questo modo tutti gli utenti di un gruppo possono utilizzare la stessa DTD.

Nel mondo dell'informatica e' opinione comune che nei sistemi software prima vengono individuati gli errori e meno si spende per correggerli. La situazione e' simile a quella della DTD. Una DTD contenente una dichiarazione scorretta o inappropriata puo' avere conseguenze in tutto il documento xml. Il primo e piu' semplice passo consiste nel correggere la DTD e tutte le sue copie. Successivamente e' necessario elaborare tutti i documenti che utilizzano quella DTD e spesso modificarli in base alle modifiche della DTD dovute alla correzione. Si possono rendere necessarie anche modifiche a fogli di stile associati.

Una DTD e' una sequenza di dichiarazioni all'interno del blocco di una dichiarazione markup `DOCTYPE`. Ogni dichiarazione all'interno di questo blocco ha la forma di una dichiarazione di markup:

`<!parola_chiave ... >`

E' possibile utilizzare le seguenti parole chiave in una dichiarazione:

`DOCTYPE, ELEMENT, ATTLIST, ENTITY, NOTATION`

Queste parole chiave hanno rispettivamente la funzione di definire il tipo del documento, i tag, gli attributi, le entita' e le notazioni dei tipi di dati.

Vediamo di seguito, brevemente, la prima dichiarazione, `DOCTYPE`.

La dichiarazione del tipo di documento e' costituita da codice di markup che indica le regole grammaticali o la definizione del tipo di documento DTD per una particolare classe di documenti. Questa dichiarazione puo' anche essere diretta a un file esterno che contiene tutta o parte della DTD e deve essere visualizzata dopo la dichiarazione XML e prima dell'elemento Document radice. Queste stringhe di codice mostrano un esempio di dichiarazione del tipo di documento:

`<?xml version="1.0"?>
<!DOCTYPE planes_for_sale SYSTEM "planes.dtd">`

dove `planes_for_sale` e' la radice del documento xml in cui appare il rimando al file esterno DTD `planes.dtd` (si veda l'approfondimento nella lezione 4.5)