Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

27
Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Transcript of Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Page 1: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Document Type Definition per XML

Presentazione 8.1

Informatica Generale (Prof. Luca A. Ludovico)

Page 2: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Un documento XML

<?XML version=“1.0”><books><book><entry isbn=“1-55860-622-X”>

<title>Data on the Web:...</title><publisher>Morgan Kaufmann</publisher>

</entry><author>Serge Abiteboul</author> <bookRef to=“0-201-53771-O 1-55860-463-4”/><articleLink href=“http://…/articles.xml#id(Abi97)”/>

</book> <book>

<entry isbn=“0-201-53771-O”> <title>Foundation of Databases</title>

<publisher>Addison Wesley</publisher></entry><author>Serge Abiteboul</author>...

</book>...

</books>

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 3: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Tipi di Documento

• Idea base: associare un tipo al documento XML

• Un documento XML contiene informazione codificata secondo le regole sintattiche dell’XML.– Vedi presentazione 7.1

• Un tipo di documento rappresenta una classe di documenti con una struttura ed una semantica simile

• Esempi: articoli di giornale, ricette di cucina, note, partiture, …

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 4: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Document Type Definition (DTD)

• Il/la Document Type Definition (definizione del tipo di documento) fornisce un significato standard per descrivere dichiarativamente la struttura di un tipo di documento.

• Lo scopo è definire le componenti ammesse nella costruzione di un documento XML.

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 5: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Cosa fa un DTD

• Definisce:– gli elementi leciti all'interno del documento. Non si possono

usare altri elementi se non quelli definiti;– la struttura di ogni elemento, ossia cosa può contenere

ciascun elemento, l'ordine, la quantità di elementi che possono comparire e se sono opzionali o obbligatori;

– una serie di attributi per ogni elemento e che valori possono o devono assumere questi attributi.

• Fornisce infine alcuni meccanismi per semplificare la gestione del documento, come la possibilità di dichiarare entity e la possibilità di importare parti di altri DTD.

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 6: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

DTD

• Un DTD è logicamente composto da due parti:

1. Element Type Definition

2. Attribute List Declaration

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 7: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Element Type Definition (1/2)

• La Element Type Definition specifica:

– Struttura del documento

– Contenuti consentiti (content model)

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 8: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Element Type Definition (2/2)

• Ciascun elemento deve essere dichiarato in un DTD con definizioni di tipo di elemento.

• Tali definizioni hanno la forma

• Esempio (guardare solo la sintassi)

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

<!ELEMENT nome_elemento (modello di contenuto)>

<!ELEMENT armadio (vestito+)>

Page 9: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Modello di contenuto

• All’interno del modello di contenuto vengono elencati gli eventuali sottoelementi.– La virgola , implica una sequenza di sotto-elementi– Il pipe | implica una scelta tra sotto-elementi

• Cardinalità dei sotto-elementi (da specificare subito dopo il loro nome):– Non specificata 1 e 1 solo– ? 0 o 1– * da 0 a molti– + da 1 a molti

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

<!ELEMENT nome_elemento (modello di contenuto)>

Page 10: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Esempi di definizione di elementi

Sintassi DTD:<!ELEMENT codice_isbn EMPTY>Elemento vuoto (empty content)In ogni file XML aderente a un DTD siffatto, troveremo:<codice_isbn/> oppure <codice_isbn></codice_isbn>

Sintassi DTD:<!ELEMENT titolo (#PCDATA)>Elemento con testo semplice (simple content)In ogni file XML aderente a un DTD siffatto, troveremo:<titolo>Il mio titolo</titolo>

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 11: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Esempi di definizione di elementi

Sintassi DTD:

<!ELEMENT simbolo (nota | pausa)>Elementi con sottoelementi (element content)

In un file XML aderente a un DTD così fatto, potremo trovare:<simbolo> <nota>…</nota></simbolo>

oppure<simbolo> <pausa>…</pausa></simbolo>

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 12: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Esempi di definizione di elementi

Sintassi DTD:<!ELEMENT libro

(titolo, autore*, anno_pubblicazione?)>Elementi con sottoelementi (element content)

In un file XML aderente a un DTD così fatto, potremo trovare:

<libro> <titolo>Titolo del libro</titolo> <autore>Primo autore</autore> <autore>Secondo autore</autore></libro>

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 13: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Esempi di definizione di elementi

Sintassi DTD:<!ELEMENT annotazione (#PCDATA | nome | data)*>Elemento con contenuto misto (mixed content)

In un file XML aderente a un DTD così fatto, potremo trovare:<annotazione>Oggi appuntamento con <nome>Luca</nome> alle

15.30</annotazione><annotazione>Il <data>15/10/2010</data> appuntamento con il

Dott. <nome>Antonio Rossi</nome></annotazione>

Cosa sarebbe successo omettendo nella sintassi del DTD l’asterisco?

Cosa sarebbe successo scegliendo una virgola al posto del pipe?

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 14: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Attribute-List Declaration

• E’ la lista (opzionale) degli (eventuali) attributi permessi o richiesti per ogni elemento.

• Ogni attributo è specificato da: nome, tipo, e altre informazioni.

• Le dichiarazioni degli attributi hanno la forma:

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

<!ATTLIST nome_elemento nome_attributo1 (tipo) valori_predefiniti… nome_attributoN (tipo) valori_predefiniti>

Page 15: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Tipi di attributo

• Si hanno tre gruppi di tipi di attributo:– string types ossia stringhe di tipo CDATA;– enumerated types per i quali viene indicata

una serie di valori validi fra cui scegliere;– tokenized types indicati da token dichiarati

quali ID, IDREF e IDREFS.

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

<!ATTLIST nome_elemento nome_attributo1 (tipo) valori_predefiniti… nome_attributoN (tipo) valori_predefiniti>

Page 16: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Esempi con tipi tokenized

• Attributi di tipo ID: quando si vuole che il valore dell’attributo sia univoco nel documento XML. Ad esempio:– <studente matricola=“”>…– <scheda_anagrafica codice_fiscale=“”>…– <libro isbn=“”>…

– Attributi di tipo IDREF: quando si vuole far riferimento a valori di attributi ID specificati nel documento XML. Ad esempio:

– <voto_esame matricola=“”>… ove matricola fa riferimento a un valore immesso nella scheda anagrafica

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 17: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Valori predefiniti per gli attributi

• #REQUIRED Specifica che l'attributo è obbligatorio.

• #IMPLIED L'attributo è facoltativo.

• #FIXED Fornisce una dichiarazione di costante per il valore di un attributo. Se il valore nel documento è diverso da quello dichiarato nel DTD, il documento non è valido.

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

<!ATTLIST nome_elemento nome_attributo1 (tipo) valori_predefiniti… nome_attributoN (tipo) valori_predefiniti>

Page 18: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Esempi

Sia dato ad esempio:<!ELEMENT Indirizzo EMPTY>

(definizione di elemento)

<!ATTLIST Indirizzo nome_via CDATA #REQUIRED>

<!ATTLIST Indirizzo nome_via CDATA #REQUIRED n_civico CDATA #IMPLIED>

<!ATTLIST Indirizzo n_civico CDATA #REQUIRED “1”>

<!ATTLIST Indirizzo intestazione CDATA #FIXED “via”>

<!ATTLIST Indirizzo intestazione (via|piazza) #REQUIRED>

<!ATTLIST Indirizzo identificativo ID #REQUIRED>

<!ATTLIST Indirizzo riferimento IDREF #IMPLIED>

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 19: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Scheda di una raccolta di libri

<?XML version="1.0"><books><book><entry isbn="isbn_1-55860-622-X">

<title>Data on the Web:...</title> <publisher>Morgan Kaufmann</publisher>

</entry><author>Serge Abiteboul</author> <bookRef to="isbn_0-201-53771-O isbn_1-55860-463-4"/><articleLink href="http://…/articles.xml#id(Abi97)"/>

</book> <book>

<entry isbn="isbn_0-201-53771-O"> <title>Foundation of Databases</title>

<publisher>Addison Wesley</publisher></entry><author> Serge Abiteboul</author><bookRef />

</book>...

</books>

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 20: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

DTD di una raccolta di libri

<!DOCTYPE Books[

<!ELEMENT books(book)+><!ELEMENT book(entry, author+, bookRef, articleLink*)><!ELEMENT entry(title, publisher)><!ELEMENT bookRef EMPTY><!ELEMENT articleLink EMPTY><!ELEMENT title (#PCDATA)><!ELEMENT author (#PCDATA)><!ELEMENT publisher (#PCDATA)>

<!ATTLIST entry isbn ID #REQUIRED><!ATTLIST bookRef to IDREFS #IMPLIED><!ATTLIST articleLink xmlns:xlink CDATA #FIXED “http://w3c.org/xlink”xlink:type CDATA #FIXED “simple”xlink:href CDATA #REQUIRED>

]>

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 21: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Esercizio: dal DTD a un documento XML

<!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>

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 22: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Una possibile soluzione

<?xml version="1.0" encoding="UTF-8"?><articolo titolo="Il mio titolo"> <paragrafo titolo="paragrafo con immagini"> <immagine file="C:\pippo.jpg"/> <immagine file="C:\immagini\pluto.bmp"/> <testo>Questo è il paragrafo 1.</testo> </paragrafo> <paragrafo tipo="note"> <testo>Questo è il paragrafo 2...</testo> <testo>...e questo è altro testo.</testo> <codice>ABC-123_XYZ</codice> </paragrafo></articolo>

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 23: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Esercizio: dal documento XML al DTD

<?xml version="1.0"?><libri aggiornamento="25/11/2009"> <libreria nome="Librissimi" indirizzo="Via Adda, 3" /> <libro codice="id0001"> <autore>J.K. Rowlings</autore> <titolo>Harry Potter e la pietra filosofale</titolo> <editore anno="1997">Salani</editore> </libro> <libro codice="id0002"> <autore>J.R. Tolkien</autore> <autore>J.R. Tolkien</autore> <titolo>Il signore degli Anelli</titolo> <editore>Bompiani</editore> <prezzo valuta="euro">24</prezzo> </libro> …</libri>

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 24: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Una possibile soluzione

<!ELEMENT libri (libreria,libro+)><!ELEMENT libreria EMPTY><!ELEMENT libro (autore+,titolo,editore,prezzo?)><!ELEMENT autore (#PCDATA)><!ELEMENT titolo (#PCDATA)><!ELEMENT editore (#PCDATA)><!ELEMENT prezzo (#PCDATA)>

<!ATTLIST libri aggiornamento CDATA #IMPLIED><!ATTLIST libreria nome CDATA #REQUIRED indirizzo CDATA #IMPLIED><!ATTLIST libro codice ID #REQUIRED><!ATTLIST editore anno CDATA #IMPLIED><!ATTLIST prezzo valuta CDATA #REQUIRED>

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

In blu le scelte sulla cardinalità forzate dal testo. Le altre scelte risultano logiche ma non sono necessarie per la validità dell’XML contro questo DTD

Page 25: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Esercizio

Si crei un documento XML ben formato contenente le informazioni su un rivenditore di auto usate.

• Il rivenditore dispone di più autovetture.• Le auto devono essere raggruppate per casa

automobilistica tramite un’opportuna marcatura.• Ogni auto, infine, è caratterizzata da una targa, un colore,

un anno di immatricolazione e un chilometraggio attuale (esprimibile in km o in miglia).

• Il documento XML deve contenere almeno un attributo e almeno un elemento vuoto.

• Si dia esempio di tale documento ipotizzando un totale di 3 auto, di cui due della stessa casa automobilistica.

• Si scriva un DTD che generalizza il documento così creato.

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

Page 26: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Soluzione: un documento XML

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

<?xml version="1.0" encoding="UTF-8"?><rivenditore> <casa nome="Fiat"> <auto> <targa>AB123CV</targa> <colore tonalità="rosso" /> <anno_immatricolazione>1987</anno_immatricolazione> <chilometraggio unita_misura="km">120000</chilometraggio> </auto> <auto> <targa>DB478CH</targa> <colore tonalità="blu" /> <anno_immatricolazione>2001</anno_immatricolazione> <chilometraggio unita_misura="km">56000</chilometraggio> </auto> </casa> <casa> <auto nome="Chrysler"> <targa>AC111JK</targa> <colore tonalità="grigio" /> <anno_immatricolazione>2005</anno_immatricolazione> <chilometraggio unita_misura="miglia">7000</chilometraggio> </auto> </casa></rivenditore>

Page 27: Document Type Definition per XML Presentazione 8.1 Informatica Generale (Prof. Luca A. Ludovico)

Soluzione: un possibile DTD

Informatica Generale (Prof. Luca A. Ludovico)Presentazione 8.1

<!ELEMENT rivenditore (casa+)><!ELEMENT casa (auto+)><!ELEMENT auto (targa, colore, anno_immatricolazione,

chilometraggio)><!ELEMENT targa (#PCDATA)><!ELEMENT colore EMPTY><!ELEMENT anno_immatricolazione (#PCDATA)><!ELEMENT chilometraggio (#PCDATA)>

<!ATTLIST casa nome CDATA #REQUIRED><!ATTLIST colore tonalità CDATA #REQUIRED><!ATTLIST chilometraggio unita_misura (km|miglia) #REQUIRED>