XML: DTD - dsi.unive.itasorato/SlideXML/DTD.pdf · Alessandro Sorato - Linguaggi per la rete: XML...

26
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

Transcript of XML: DTD - dsi.unive.itasorato/SlideXML/DTD.pdf · Alessandro Sorato - Linguaggi per la rete: XML...

XML: DTDDa 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: DTDIl 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: DTDI 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: DTDI 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: DTDI 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: DTDSecondo 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: DTDUna 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: DTDRIASSUMENDO, 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 ELEMENTSOPERATORI 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 ELEMENTSPer 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 ELEMENTSUn'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 ATTRIBUTESTIPI DEGLI ATTRIBUTI

● CDATA stringhe

● ID identificatore univoco nel documento (solo uno)

● IDREF riferimento ad un elemento con attributo ID

● IDREFS serie di IDREF separati da spazi

● ENTITY nome di una predefinita entità

● ENTITIES serie di ENTITY separati da spazi

● NMTOKEN una parola (solo lettere, numeri,” -”, “_”,” .”, “:”

● NMTOKENS serie di NMTOKEN separati da spazi

● NOTATION un'entità dichiarata nel DTD

● [Enumerazione] 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 ENTITIESQuando 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 ENTITIESParameter Entities<!ENTITY % ParametriPersona “altezza CDATA #REQUIRED peso

CDATA #IMPLIED ” >

<!ATTLIST DettagliPersona% ParametriPersonaeta CDATA #IMPLIED >

<!ATTLIST DettagliPersonaaltezza CDATA #REQUIREDpeso CDATA #IMPLIEDeta CDATA #IMPLIED >

Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari

XML: DTD NOTATIONI 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 NOTATIONOppure

<!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 #REQUIREDtype 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 CONCLUSIONITuttavia 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