Tecnologie di Internet
Document Type Definition
Document Type Definition
 Document Type Definition (DTD)
 Documento XML valido
 Sintassi del DTD
 Elementi, attributi e entità
Dott. Nicola Dragoni
Tecnologie di Internet
Document Type Definition
Il Document Type Definition
Una caratteristica fondamentale dell’XML è l’estensibilità. L’autore di un
documento XML può creare nuovi tag per descrivere i contenuti semantici
dei propri dati.
Ciò ha portato alla necessità di definire delle regole grammaticali, o
vincoli, alle quali gli elementi devono attenersi.
Queste regole grammaticali sono definite nelle specifiche XML e sono
codificate nel Document Type Definition.
Dott. Nicola Dragoni
2
Tecnologie di Internet
Document Type Definition
Documento XML valido
Le regole grammaticali o vincoli specificano:
• qual’è l’insieme degli elementi e degli attributi che si
possono usare nel documento XML
• quali sono le relazioni gerarchiche fra gli elementi
• qual’è l’ordine in cui gli elementi appariranno nel
documento XML
• quali elementi ed attributi sono opzionali
Quando un documento XML è ben formato e rispetta le regole del
DTD a cui si riferisce si dice che è un documento XML valido.
Dott. Nicola Dragoni
3
Tecnologie di Internet
Document Type Definition
Tipologie DTD
Le DTD possono essere di due tipologie:
 PUBBLICHE:
sono depositate e note a tutti. E’ possibile trovarle in archivi
(repository) di DTD su Internet. HTML per esempio è definito
come DTD pubbliche depositate presso il W3C.
 DI SISTEMA:
sono disponibili e fruibili tramite l’azienda o la realtà che le ha
prodotte. Non sono note al mondo intero e per sfruttarle occorre
rivolgersi a chi le ha prodotte, anche solo per scaricarle.
Dott. Nicola Dragoni
4
Tecnologie di Internet
Document Type Definition
DTD interne ed esterne
Quando lavoriamo con documenti XML, se vogliamo associare loro delle
DTD possiamo inserirle come parte integrante del loro contenuto (DTD
interna), oppure possiamo fare riferimento a una definizione esterna, di
sistema o pubblica (DTD esterna).
Le DTD vanno comunque dichiarate nel prologo del documento XML.
Sintassi DTD esterna:
<!DOCTYPE nome SYSTEM “URL_al_file_DTD”>
<!DOCTYPE nome PUBLIC “nome_pubblico_della_DTD”>
a seconda che si voglia indicare una DTD di sistema o pubblica.
Sintassi DTD interna:
<!DOCTYPE nome [contenuto della DTD]>
Dott. Nicola Dragoni
5
Tecnologie di Internet
Document Type Definition
Alcune osservazioni
Come si intuisce dagli esempi precedenti,
• il simbolo di apertura di un’istruzione DTD è <!
• il simbolo di chiusura di un’istruzione DTD è >
Tali istruzioni rappresentano dei marcatori particolari:
<! comando >
il cui contenuto deve corrispondere a comandi previsti dalla definizione
di DTD.
Nei prossimi lucidi ci occuperemo di queste istruzioni analizzando quelle
di uso più comune. Prima però vediamo un esempio...
Dott. Nicola Dragoni
6
Tecnologie di Internet
Document Type Definition
Creazione di una DTD semplice
Consideriamo il file Email.xml.
Si noti che il codice contiene informazioni aggiuntive nel prologo del
documento: si tratta di una DTD interna che identifica gli elementi che
possono essere presenti nel documento e il tipo di dati che deve contenere.
Se questo documento viene
eseguito visualizzando la
pagina XML (ad esempio
con IE5), il documento avrà
questo aspetto:
Dott. Nicola Dragoni
7
Tecnologie di Internet
Document Type Definition
Esempio validazione (1)
Modifichiamo la struttura del file Email.xml in questo modo EmailERR.xml e
proviamo a validare i due documenti.
Risultato validazione del documento Email.xml:
Dott. Nicola Dragoni
8
Tecnologie di Internet
Document Type Definition
Esempio validazione (2)
Risultato validazione del documento EmailERR.xml:
Dott. Nicola Dragoni
9
Tecnologie di Internet
Document Type Definition
Definizione di elementi (1)
Per definire all’interno di una DTD la presenza di un elemento (tag)
occorre utilizzare la parola chiave ELEMENT, la quale accetta la
seguente sintassi
<!ELEMENT nome regola_dtd >
dove:
 nome è il nome che il tag avrà nel documento XML (ovviamente
deve rispettare le regole che rendono i documenti XML ben
formati)
 regola_dtd indica il tipo di contenuto che questo tag avrà ed
eventualmente la sua relazione con altri contenuti descritti nella
DTD.
Dott. Nicola Dragoni
10
Tecnologie di Internet
Document Type Definition
Definizione di elementi (2)
I possibili valori che può assumere regola_dtd sono:
 ANY: indica che il contenuto del tag può essere qualunque cosa,
cioè tag e/o testo.
 PCDATA (Parsed Character Data): dichiara che il tag può
contenere solo e unicamente contenuto di tipo testo,
sintatticamente corretto dal momento che i parser dovranno
leggerlo e interpretarlo.
 EMPTY: comunica al parser che il tag sarà costituito solo di
attributi e non conterrà al suo interno nè testo nè altri tag.
 GRUPPI DI ELEMENTI
Dott. Nicola Dragoni
11
Tecnologie di Internet
Document Type Definition
Definizione di elementi (3)
Vediamo qualche esempio:
 Tag chiamato Titolo che contiene al suo interno solo testo:
<!ELEMENT Titolo (#PCDATA) >
 Tag chiamato Libro che può contenere sia testo che tag:
<!ELEMENT Libro ANY >
 Tag chiamato Libro che non ha contenuto e rappresenta le
sue informazioni solo tramite attributi:
<!ELEMENT Libro EMPTY >
Dott. Nicola Dragoni
12
Tecnologie di Internet
Document Type Definition
Definizione gruppi (1)
Per gruppi di elementi si intende la possibilità per un determinato tag di
contenere non solo testo, non solo qualsiasi combinazione di testo e tag, ma bensì
una precisa sequenza di tag e/o gruppi di tag che rappresentano diverse
alternative.
Esempio:
consideriamo il
seguente documento
XML.
Vogliamo descrivere
il tag Struttura
utilizzando una
DTD.
<?xml version=“1.0”?>
<Libro>
<Titolo>XML tascabile</Titolo>
<Editore>Mondadori Informatica Libri</Editore>
<Struttura>
<Pagine>288</Pagine>
<Capitoli>12</Capitoli>
<Appendici>2</Appendici>
</Struttura>
</Libro>
Dott. Nicola Dragoni
13
Tecnologie di Internet
Document Type Definition
Definizione gruppi (2)
<Struttura>
<Pagine>288</Pagine>
<Capitoli>12</Capitoli>
<Appendici>2</Appendici>
</Struttura>
Volendo descrivere il tag Struttura possiamo utilizzare la
seguente sintassi DTD:
<!ELEMENT Struttura (Pagine, Capitoli, Appendici) >
tramite la quale indichiamo che il tag Struttura deve contenere
un tag di nome Pagine, uno di nome Capitoli e uno di nome
Appendici.
Dott. Nicola Dragoni
14
Tecnologie di Internet
Document Type Definition
Definizione gruppi (3)
<Struttura>
<Pagine>288</Pagine>
<Capitoli>12</Capitoli>
<Appendici>2</Appendici>
</Struttura>
In una definizione di DTD completa,
dovremo quindi indicare sia la
definizione del tag contenitore che
dei tag contenuti.
Il blocco di definizione del tag Struttura e dei tag al suo interno contenuti
sarà:
<!ELEMENT Struttura (Pagine, Capitoli, Appendici) >
<!ELEMENT Pagine (#PCDATA) >
<!ELEMENT Capitoli (#PCDATA) >
<!ELEMENT Appendici (#PCDATA) >
In questo modo, non solo formiamo i dettagli sulla natura di Struttura, ma
anche sui tag in essa contenuti.
Dott. Nicola Dragoni
15
Tecnologie di Internet
Document Type Definition
Definizione gruppi (4)
Per indicare delle condizioni in alternativa tra loro si utilizza il
carattere pipe |.
Esempio:
<!ELEMENT Struttura (Pagine | Capitoli) >
indica che il tag Struttura dovrà contenere o un tag Pagine o un tag
Capitoli, non entrambi e tanto meno nessuno dei due.
E’ anche possibile utilizzare più parentesi tonde annidate le une
nelle altre per raggruppare le informazioni all’interno di una DTD.
Esempio: <!ELEMENT Struttura (Pagine | (Capitoli, Appendici)) >
dichiara che nel tag Struttura possiamo trovare o un tag Pagine o
una coppia di tag Capitoli e Appendici, rappresentati esattamente
nell’ordine indicato.
Dott. Nicola Dragoni
16
Tecnologie di Internet
Document Type Definition
Molteplicità
Qualora sia necessario indicare la presenza di più occorrenze di uno stesso
tag all’interno di una struttura dobbiamo ricorrere a una simbologia
apposita, per mezzo della quale indichiamo quante istanze di un
determinato tag possiamo consentire all’interno di un documento XML.
Tale sintassi è:
<!ELEMENT nome (elemento_secondario[Molteplicità]) >
dove al posto di [Molteplicità] possiamo trovare uno dei seguenti simboli:
SIMBOLO
SIGNIFICATO
?
0 o 1 volte
+
Da 1 a  volte
*
Da 0 a  volte
Dott. Nicola Dragoni
17
Tecnologie di Internet
Document Type Definition
Molteplicità: esempi
 <!ELEMENT Libro (Autore+) >
significa che il tag Libro potrà contenere un numero di tag Autore
in quantità variabile tra 1 e .
 <!ELEMENT Libro (Autore?) >
significa che il tag Libro potrà avere un solo Autore, oppure potrà
essere privo di Autore.
 <!ELEMENT Libro (Autore*) >
significa che il tag Libro potrà avere un numero di tag Autore in
quantità variabile tra 0 e .
Dott. Nicola Dragoni
18
Tecnologie di Internet
Document Type Definition
Definizione di attributi (1)
Per definire gli attributi di un documento XML si usa il comando
ATTLIST, secondo la seguente sintassi:
<!ATTLIST elemento nome_attributo tipo valore_default >
dove:
 elemento è il nome del tag del quale stiamo definendo l’attributo
 nome_attributo è ovviamente il nome dell’attributo
 tipo è la definizione del tipo di valore associato all’attributo
 valore_default è un eventuale valore di default (predefinito)
Dott. Nicola Dragoni
19
Tecnologie di Internet
Document Type Definition
Definizione di attributi: esempio
<!ATTLIST Libro ISBN CDATA “N.D.” >
Indica che
• stiamo definendo un attributo di nome ISBN
• tale attributo deve essere associato a un tag di nome Libro
• tale attributo può contenere qualsiasi carattere, tranne < > & ‘ “
(CDATA)
• il valore di default dell’attributo è “N.D.”
Dott. Nicola Dragoni
20
Tecnologie di Internet
Document Type Definition
Definizione di attributi (2)
Se vogliamo fornire un set di valori per un attributo possiamo
utilizzare la seguente sintassi:
<!ATTLIST Giornale Tipo (quotidiano | settimanale | mensile) “mensile” >
dove il simbolo di pipe | indica proprio l’alternativa tra i possibili
valori.
Notare l’ultima informazione “mensile”: serve per indicare che nel
caso in cui l’attributo Tipo non venga fornito il suo valore
predefinito deve essere mensile.
Dott. Nicola Dragoni
21
Tecnologie di Internet
Document Type Definition
Valori di default di attributi
Quando si definiscono gli attributi per gli elementi è anche possibile
dichiarare dei vincoli relativi alla presenza o meno degli stessi tag.
Si utilizzano le seguenti parole chiave:
VINCOLO
SIGNIFICATO
#IMPLIED
Il valore dell’attributo non è obbligatorio.
#REQUIRED
Il valore dell’attributo è obbligatorio.
#FIXED
Il valore dell’attributo è una costante che non
può essere modificato.
Dott. Nicola Dragoni
22
Tecnologie di Internet
Document Type Definition
Esempi
 Definiamo un tag Libro descritto da un tag Titolo, da uno o più tag
Autore e da un attributo ISBN obbligatorio.
<!ELEMENT Libro (Titolo, Autore+) >
<!ATTLIST Libro ISBN #REQUIRED >
<!ELEMENT Titolo (#PCDATA) >
<!ELEMENT Autore (#PCDATA) >
 La seguente istruzione <!ATTLIST indirizzo cap #FIXED “02115”
indica che il valore 02115 è l’unico che può essere assegnato
all’attributo cap. Il documento XML non è valido se l’attributo cap
contiene un valore diverso da 02115 . Se l’elemento indirizzo non
contiene l’attributo cap, il valore di default 02115 sarà passato
all’applicazione che elabora il documento XML.
Dott. Nicola Dragoni
23
Tecnologie di Internet
Document Type Definition
Tipi di dato per attributi
Quando definiamo
degli attributi XML
possiamo associare
loro dei tipi di dato,
tra quelli definiti
dal W3C.
Tipi di Dato
Descrizione
CDATA
Dati di tipo carattere.
ENTITY
Entità esterna dichiarata nella DTD.
ID
Identificatore univoco di un elemento.
IDREF
ID univoci che puntano a elementi con
un attributo ID.
NMTOKEN
Il valore dell’attributo è formato da
lettere, cifre, punti, caratteri di
sottolineatura, trattini e due punti.
NOTATION
Notazione dichiarata nella DTD.
Sequenze di valori
Corrisponde a una enumerazione.
Dott. Nicola Dragoni
24
Tecnologie di Internet
Document Type Definition
Entità interne
Tramite le DTD possiamo definire delle entità. Per entità si intendono dei
nostri entity-name che corrispondano a caratteri, parole o frasi da noi
impostati.
La sintassi da utilizzare per definire delle entità è la seguente:
<!ENTITY nome “Valore”>
In questo modo si dichiarano entità interne, in quanto il loro valore è
fornito esplicitamente all’interno della DTD.
Esempio: <!ENTITY CopyRight “(C) Copyright XML Tascabile - 2002”>
Per un esempio completo vedi il documento DTDEntità.xml.
Dott. Nicola Dragoni
25
Tecnologie di Internet
Document Type Definition
Entità esterne
Se vogliamo ottenere il valore di una entity da un documento esterno
possiamo utilizzare una delle tre seguenti forme:
1) <!ENTITY nome SYSTEM “URL”>
Entità esterna caricata direttamente dalla URL.
2) <!ENTITY nome PUBLIC “nome pubblico” “URL”>
Entità esterna caricata direttamente dalla URL solo nel caso in cui
non sia già nota al parser tramite il suo nome pubblico.
3) <!ENTITY nome SYSTEM “URL” NDATA tipo_notazione>
Entità esterna da non interpretare con il perser (NDATA) e il cui tipo
di formato è indicato tramite il parametro tipo_notazione.
E’ anche possibile utilizzare le entità all’interno della definizione di altre
entità, cioè annidare le entità le une all’interno delle altre.
Dott. Nicola Dragoni
26
Tecnologie di Internet
Document Type Definition
Esempio completo di DTD:
vedi il documento Libro.xml
Dott. Nicola Dragoni
27
Tecnologie di Internet
Document Type Definition
Document Type Definition
Sommario
 In questa lezione abbiamo appreso:
• cos’è una Document Type Definition
• validazione di documenti XML
• sintassi di una DTD
• elementi, attributi, entità di una DTD
 Passi successivi:
la prossima lezione sarà dedicata alla formattazione di contenuti.
Dott. Nicola Dragoni
28
Scarica

Corso Integrativo XML 6 - Dipartimento di Informatica