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