XML: DTD - Dipartimento di Scienze Ambientali, Informatica e

Transcript

XML: DTD - Dipartimento di Scienze Ambientali, Informatica e
XML: DTD
Da un punto di vista cronologico, il primo approccio per la definizione di
grammatiche per documenti XML è rappresentato dai Document
Type Definition (DTD).
Un DTD è un documento che descrive i tag
utilizzabili in un documento XML, la loro reciproca
relazione nei confronti della struttura del
documento ed altre informazioni sugli attributi di
ciascun tag.
La sintassi di un DTD si basa principalmente sulla presenza di quattro
dichiarazioni:
●
●
●
●
<!ELEMENT>
<!ATTLIST>
<!ENTITY>
<!NOTATION>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD
Il DTD è OPZIONALE ed è un insieme di regole per
definire la struttura di un documento XML.
Queste regole definiscono
●
●
quali elementi possono e/o devono essere usati nel
documento
quali attributi si possono usare per ogni elemento
inoltre
●
impongono dei vincoli sulle relazioni tra elementi
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD
I DTD
●
sono utili per chi deve intepretare il documento
XML (programmatori o parser)
●
●
●
●
sono utili per definire fogli di stile
sono utili per verificare la validità di un
documento XML
sono utili per creare interfacce dinamiche per
documenti XML
sono utili per l'interscambio di documenti
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD
I DTD possono essere considerati con una struttura
ad albero:
●
●
I nodi rappresentano elementi ed attributi
Gli archi rappresentano le relazioni
elemento/sottoelemento o elemento/attributo
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD
I DTD possono essere interni o esterni, (anche
misto).
Un DTD esterno ha il vantaggio di poter essere più facilmente
condiviso e riutilizzato. Viene generalmente utilizzato da
organizzazioni che hanno la necessità di rendere standard la
struttura logica dei documenti: W3C
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
Un DTD interno è contenuto all'interno del documento XML stesso.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note
[ <!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Pippo</to>
<from>Pluto</from>
<heading>Reminder</heading>
<body>Ricordati di chiamare Paperino</body>
</note>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Pippo</to>
<from>Pluto</from>
<heading>Reminder</heading>
<body>Ricordati di chiamare Paperino</body>
</note>
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
●
PUBLIC se il DTD esterno è uno standard
●
SYSTEM se il DTD esterno è personale
●
Si usa il carattere “+” per indicare che il DTD è riconosciuto
da un'organismo di controllo per gli standard (es. ISO), “-”
nel caso in cui non lo sia.
●
//proprietario//DTD_descr//lingua
●
URL del DTD
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD
Secondo le specifiche W3C i parser NON TOLLERANO ERRORI,
quindi possono fermarsi al primo errore che incontrano
nell'analisi del documento XML.
Questa scelta è stata fatta per rendere i parser semplici da implementare e per
la natura stessa di XML (compatibilità ed indipendenza dalla piattaforma e
dal parser).
I parser HTML sono molto meno restrittivi come abbiamo già visto, rendendoli
notevolmente più complessi ed incompatibili tra loro.
Gli errori che i parser possono incontrare durante l'analisi sono:
●
FATAL ERROR
●
ERROR
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD
Una violazione di un vincolo espresso in un DTD viene
considerata “ERROR”, mentre una violazione di una regola
di “buona formattazione” viene considerata un “FATAL
ERROR”
Secondo le specifiche un “fatal error” è più grave di
un “error”.
FATAL ERROR: il parser può continuare l'analisi del documento per cercare altri
errori ma non deve continuare a fornirne il contenuto del documento
all'applicazione.
ERROR: il parser può continuare l'analisi del documento per cercare altri errori
e può continuare a fornirne il contenuto del documento all'applicazione, è
compito di quest'ultima decidere cosa fare (ignorarlo, segnalarlo etc...)
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD
RIASSUMENDO, un DTD dichiara:
●
●
●
●
●
NOME degli elementi permessi
CONTENUTO di ogni tipo di elemento
STRUTTURA del documento (ordine e
sequenze)
PROPRIETA' degli elementi (attributi)
ENTITA' (sostituzioni)
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD ELEMENTS
OPERATORI ORDINALI
●
,
sequenza
●
|
scelta
OPERATORI CARDINALI
●
+
indica che l'elemento è presente una o più volte
●
*
indica che l'elemento è presente zero o più volte
●
?
indica che l'elemento è presente zero o una sola volta
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD ELEMENTS
<!ELEMENT Frutta (Fragole, (Mele | Arance))>
<Frutta>
<Fragole>...</Fragole>
<Mele>...</Mele>
</Frutta>
<Frutta>
<Fragole>...</Fragole>
<Arance>...</Arance>
</Frutta>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD ELEMENTS
<!ELEMENT Frutta (Fragole+, (Mele | Arance)*)>
<Frutta>
<Fragole>...</Fragole>
<Fragole>...</Fragole>
<Mele>...</Mele>
<Arance>...</Arance>
<Arance>...</Arance>
</Frutta>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD ELEMENTS
Per la definizione dei tag che non contengono sottoelementi dobbiamo
distinguere il caso dei tag vuoti dai tag che racchiudono testo. Nel
caso di tag vuoto la definizione è
<!ELEMENT NomeElemento EMPTY>
Nel caso di elementi che racchiudono testo abbiamo una definizione
analoga alla seguente:
<!ELEMENT Testo (#PCDATA)>
Esiste la possibilità di definire elementi il cui contenuto non è definito a
priori, possono cioè essere vuoti o contenere altri elementi senza
vincoli particolari.
<!ELEMENT NomeElemento ANY>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD ELEMENTS
Un'ulteriore possibilità è quella di avere del
contenuto misto (mixed content)
<!ELEMENT esempio (#PCDATA|sub|super)*>
<!ELEMENT sub (#PCDATA)>
<!ELEMENT super (#PCDATA)>
<esempio>H<sub>2</sub>O non è altro che acqua</esempio>
<esempio>E=MC<super>2</super></esempio>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD ELEMENTS
<!ELEMENT foo (A, (B | C))>
<!ELEMENT foo (A, B?, C)>
<!ELEMENT foo (A?, (( B, C) | D), E?)>
<!ELEMENT foo ((A, B)+ | (C | D))>
<!ELEMENT foo (A, (B, C)*, D+)>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD ATTRIBUTES
<!ATTLIST articolo titolo tipo #REQUIRED>
Indica che l'elemento <articolo> prevede un attributo titolo
che può avere come valore una qualsiasi combinazione di
caratteri (CDATA). L'indicazione #REQUIRED indica che la
presenza dell'attributo è obbligatoria.
●
#REQUIRED
obbligatorio
●
#IMPLIED
opzionale
●
#FIXED
fisso (specificato)
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD ATTRIBUTES
TIPI DEGLI ATTRIBUTI
●
●
●
●
●
●
●
●
●
●
CDATA
ID
IDREF
IDREFS
ENTITY
ENTITIES
NMTOKEN
NMTOKENS
NOTATION
[Enumerazione]
stringhe
identificatore univoco nel documento (solo uno)
riferimento ad un elemento con attributo ID
serie di IDREF separati da spazi
nome di una predefinita entità
serie di ENTITY separati da spazi
una parola (solo lettere, numeri,” -”, “_”,” .”, “:”
serie di NMTOKEN separati da spazi
un'entità dichiarata nel DTD
serie di valori definiti dall'utente
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD ATTRIBUTES
<!ELEMENT articolo(paragrafo+)>
<!ELEMENT paragrafo (immagine*, testo+, codice*)>
<!ELEMENT immagine EMPTY>
<!ELEMENT testo (#PCDATA)>
<!ELEMENT codice (#PCDATA)>
<!ATTLIST articolo titolo CDATA #REQUIRED>
<!ATTLIST paragrafo
titolo
CDATA #IMPLIED
tipo
(abstract|bibliografia|note) #IMPLIED
>
<!ATTLIST immagine file CDATA #REQUIRED>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD ENTITIES
Quando il testo per un entity reference viene
sostituito dal parser, il risultato deve essere XML
ben formato.
Le entità non possono fare riferimento a sè stesse o
ad altre entità.
ESEMPI DI ENTITA' ERRATE
<!ENTITY self “Dancing with my&self;” >
<!ENTITY una “riferimento a &altra;” >
<!ENTITY altra “riferimento a &una;” >
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD ENTITIES
Parameter Entities
<!ENTITY % ParametriPersona “altezza CDATA #REQUIRED peso
CDATA #IMPLIED ” >
<!ATTLIST DettagliPersona
% ParametriPersona
eta CDATA #IMPLIED >
<!ATTLIST DettagliPersona
altezza CDATA #REQUIRED
peso CDATA #IMPLIED
eta CDATA #IMPLIED >
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD NOTATION
I Notations permettono di definire all'interno del DTD
alcune parti del documento che non siano XML,
descrivendone il formato e facendo in modo che
l'applicazione che gestisce il documento possa
interpretarle.
<!NOTATION name system "external_ID">
“name” identifica il formato utilizzato nel documento ed “external_ID”
spesso identifica il MIME-type. Ad esempio, volendo includere
un'immagine gif nel documento:
<!NOTATION GIF system "image/gif">
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD NOTATION
Oppure
<!NOTATION png SYSTEM "
http://www.sito.it/PNGViewer.exe">
I dati specificati in questo modo saranno utilizzati
ad esempio:
<!ENTITY logo SYSTEM “
http://www.sito.it/img/logo.png” NDATA png>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD NOTATION
<!ELEMENT img EMPTY>
<!ATTLIST img
src CDATA #REQUIRED
type NOTATION (gif|jpg|png) #IMPLIED>
Potrebbe essere la definizione di un'immagine in
XHTML, ovviamente deve essere data una
definizione NOTATION per ogni tipo di immagine.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: DTD CONCLUSIONI
Tuttavia i DTD hanno i seguenti limiti:
●
●
●
la sintassi utilizzata per definire un DTD non segue le
stesse regole di XML
i DTD non consentono di specificare un tipo di dato per
il valore degli attributi
i DTD non consentono di specificare il numero minimo o
massimo di occorrenze di un tag in un documento
Queste limitazioni hanno spinto alla definizione di
approcci alternativi per definire grammatiche per
documenti XML. Tra questi approcci il più noto è XML
Schema.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari