# 4.2 - La dichiarazione degli attributi

Gli attributi di un elemento vengono dichiarati separatamente dalle dichiarazioni di elemento in una DTD. una dichiarazione di attributo deve includere il nome dell'elemento a cui apparrtiene l'attributo, il nome di quest'ultimo e il suo tipo. E' possibile che la dichiarazione inlcuda anche un valore predefinito. La forma generale di una dichiarazione di attributo e' la seguente:

`<!ATTLIST nome_elemento nome_attributo tipo_attributo [valore predefinito]>`

Se viene dichiarato piu' di un attributo per un dato elemento, e' possibile combinare le dichiarazioni come nell'esempio:

`<!ATTLIST nome_elemento
`

nome_attributo_1 tipo_attributo_1 valore_predefinito_1
nome_attributo_2 tipo_attributo_2 valore_predefinito_2
...
nome_attributo_n tipo_attributo_n valore_predefinito_n
>

I tipi di attributi e il relativo significato sono mostrati nella seguente tabella:

Valore | Significato
--- | ---
`CDATA` | Dati carattere
`ID` | Un ID univoco
`IDREF` | L'ID di un altro elemento
`IDREFS` | Un elenco di altri ID
`NMTOKEN` | Un nome XML valido
`NMTOKENS` | Un elenco di nomi XML validi
`ENTITY` | Un'entita'
`ENTITIES` | Un elenco di entita'
(valore_1 | valore_2 | ... | valore_n) | Un tipo elencato

Possibili tipi di attributi e relativi significati

Il valore predefinito in una dichiarazione di attributo puo' specificare un valore effettivo o la necessita' di attribuire un valore all'attributo nel documento xml.

I valori predefiniti alternativi sono mostrati nella seguente tabella:

Valore | Significato
--- | ---
un valore | il valore
valore `#FIXED` | Il valore che verra' assegnato a ogni elemento e che non puo' essere modificato
`#REQUIRED` | Ogni istanza dell'elemento deve specificare un valore
`#IMPLIED` | Nessun valore predefinito e il valore non ha bisogno di venire specificato in un elemento

Possibili valori predefiniti per gli attributi

Per esempio si supponga che la DTD includa le seguenti specifiche di attributo:

`<!ATTLIST airplane places CDATA "4">
<!ATTLIST airplane engine_type CDATA #REQUIRED>
<!ATTLIST airplane price CDATA #IMPLIED>
<!ATTLIST airplane manufacturer CDATA #FIXED "Cessna">`

Il seguente elemento xml e' valido per questa DTD:

`<airplane places = "10" engine_type = "jet"> ... </airplane>`

Gli attributi che includono `#FIXED` nella DTD possono venire specificati o meno in particolari istanze di elemento.

.