XML/DTD
- Comprendere che cos'è un Document Type Definition (DTD)
- Imparare come dichiarare elementi e attributi in un DTD
Il DTD descrive la forma che deve avere un documento XML per essere valido. I DTD sono stati sostituiti dallo Schema XML, che è molto più potente, quindi ti incoraggiamo a usare quest'ultimo.
Tuttavia, discutiamo di DTD qui in modo che tu possa comprenderne uno se necessario. In particolare, potrebbe essere necessario trasformare un DTD in uno schema per utilizzare questa nuova tecnologia.
Specifica di un DTD
[modifica | modifica sorgente]A differenza degli schemi, DTD non è un dialetto XML, è un linguaggio specifico.
Il DTD non è obbligatorio. Può essere interno al documento XML o esterno (in un file con l'estensione ".dtd"). Usiamo un DTD esterno quando vogliamo condividerlo tra diversi file XML.
Esempio di dichiarazione di un DTD esterno in un file XML:
<!DOCTYPE directory SYSTEM "directory.dtd">
Il DTD inizia con il tag:
<!DOCTYPE elemento-radice [
e termina con:
]>
Il DTD deve essere inserito dopo la dichiarazione XML iniziale.
I commenti, come in XML, vengono inseriti come segue:
<!-- commenti -->
Elementi
[modifica | modifica sorgente]Ogni elemento del DTD è definito come segue:[1]
<!ELEMENT nome-elemento qualificatore>
Possibili qualificatori sono:
ANY
: la struttura dell'elemento è liberaEMPTY
: l'articolo è vuoto#PCDATA(Parsed Character Data)
: dati testuali analizzabili
Questi qualificatori possono essere specificati dai seguenti elementi:
- uno e un solo sottoelemento:
(solo un telefono a persona)
<! ELEMENT persona (telefono)>
- 0 o più sotto-elementi:
(una persona può avere 0, 1 o più telefoni)
<! ELEMENT persona (telefono*)>
- 1 o più elementi:
(una persona deve avere almeno un telefono)
<! ELEMENT persona (telefono+)>
- 0 o 1 articolo singolo:
(una persona ha al massimo 1 telefono, potrebbe non averne uno)
<! ELEMENT persona (telefono?)>
- Diversi sotto-elementi:
(una persona ha un nome e un telefono)
<! ELEMENT persona (nome, telefono)>
- Sotto-elementi identici o non identici:
(una persona ha un nome e due numeri di telefono)
<! ELEMENT persona (nome, telefono, telefono)>
- Un elemento secondario OR (esclusivo) un altro:
(uno o due telefoni a persona)
<! ELEMENT persona (telefono|(telefono, telefono))>
Esempio di memorizzazione di una directory di servizi. Ogni servizio ha un nome e può avere uno o più telefoni:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE directory [
<!ELEMENT directory (service)*>
<!ELEMENT service (nom, tel*)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT tel (#PCDATA)>
]>
<directory>
<service>
<nom>pompiers</nom>
<tel>18</tel>
</service>
<service>
<nom>police</nom>
<tel>17</tel>
<tel>22</tel>
</service>
<service>
<nom>samu</nom>
<tel>15</tel>
</service>
</directory>
Attributi
[modifica | modifica sorgente]Sono dichiarati con ATTLIST. Ad esempio, definiamo un tipo di pagamento predefinito in contanti:
<!ATTLIST pagamento type CDATA (assegno|liquidi) "liquidi" >
Valori degli attributi
[modifica | modifica sorgente]I valori dell'attributo (attributo-valore[2]) sono:
Valore | Descrizione |
---|---|
value |
valore predefinito dell'attributo |
#REQUIRED |
attributo richiesto |
#IMPLIED |
attributo opzionale |
#FIXED value |
attributo a valore fisso |
Tipi di attributi
[modifica | modifica sorgente]Type | Description |
---|---|
CDATA |
valore dei dati |
(en1|en2|..) |
valore nell'elenco numerato |
ID |
identificatore univoco |
IDREF |
identificatore di un altro elemento |
IDREFS |
elenco di altri identificatori |
NMTOKEN |
nome di un XML valido |
NMTOKENS |
elenco di nomi XML |
ENTITY |
entità |
ENTITIES |
elenco di entità |
NOTATION |
nome di una valutazione |
xml: |
valore di un XML predefinito |
Entità
[modifica | modifica sorgente]Dichiarare un'entità consente di integrarla chiamando il suo nome preceduto da una e commerciale, dal simbolo della percentuale o dalle virgolette (&
, %
o "
[3]) e seguito da un punto e virgola (;
). Per esempio:
<!ENTITY intro! SYSTEM "https://fr.wikibooks.org/wiki/Programmation_XML/Introduction.xml">!
<b>
&intro;
</b>
Questo esempio è estratto dalla specifica XHTML[4] per i collegamenti ipertestuali:
<!ENTITY % attrs "%coreattrs; %i18n; %events;">
...
<!ELEMENT link EMPTY>
<!ATTLIST link
%attrs;
charset %Charset; #IMPLIED
href %URI; #IMPLIED
hreflang %LanguageCode; #IMPLIED
type %ContentType; #IMPLIED
rel %LinkTypes; #IMPLIED
rev %LinkTypes; #IMPLIED
media %MediaDesc; #IMPLIED
target %FrameTarget; #IMPLIED
>
Note
[modifica | modifica sorgente]- ↑ http://www.w3schools.com/dtd/dtd_elements.asp
- ↑ http://www.w3schools.com/dtd/dtd_attributes.asp
- ↑ http://xmlwriter.net/xml_guide/entity_declaration.shtml
- ↑ http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd