Presentazione 8.1
Document Type Definition per XML
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
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
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
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
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
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
Element Type Definition
(2/2)
• Ciascun elemento deve essere dichiarato in un
DTD con definizioni di tipo di elemento.
• Tali definizioni hanno la forma
<!ELEMENT nome_elemento (modello di contenuto)>
• Esempio
(guardare solo la sintassi)
<!ELEMENT armadio (vestito+)>
Informatica Generale (Prof. Luca A. Ludovico)
Presentazione 8.1
Modello di contenuto
<!ELEMENT nome_elemento (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
0o1
 da 0 a molti
 da 1 a molti
Informatica Generale (Prof. Luca A. Ludovico)
Presentazione 8.1
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
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
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
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
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:
<!ATTLIST nome_elemento
nome_attributo1 (tipo) valori_predefiniti
…
nome_attributoN (tipo) valori_predefiniti>
Informatica Generale (Prof. Luca A. Ludovico)
Presentazione 8.1
Tipi di attributo
<!ATTLIST nome_elemento
nome_attributo1 (tipo) valori_predefiniti
…
nome_attributoN (tipo) valori_predefiniti>
• 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
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
Valori predefiniti per gli attributi
<!ATTLIST nome_elemento
nome_attributo1 (tipo) valori_predefiniti
…
nome_attributoN (tipo) valori_predefiniti>
• #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
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
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
DTD di una raccolta di libri
<!DOCTYPE Books[
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
books(book)+>
book(entry, author+, bookRef, articleLink*)>
entry(title, publisher)>
bookRef EMPTY>
articleLink EMPTY>
title (#PCDATA)>
author (#PCDATA)>
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
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
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
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
Una possibile soluzione
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
libri (libreria,libro+)>
libreria EMPTY>
libro (autore+,titolo,editore,prezzo?)>
autore (#PCDATA)>
titolo (#PCDATA)>
editore (#PCDATA)>
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>
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
Informatica Generale (Prof. Luca A. Ludovico)
Presentazione 8.1
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
Soluzione: un documento XML
<?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 nome="Chrysler">
<auto>
<targa>AC111JK</targa>
<colore tonalità="grigio" />
<anno_immatricolazione>2005</anno_immatricolazione>
<chilometraggio unita_misura="miglia">7000</chilometraggio>
</auto>
</casa>
</rivenditore>
Informatica Generale (Prof. Luca A. Ludovico)
Presentazione 8.1
Soluzione: un possibile DTD
<!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>
Informatica Generale (Prof. Luca A. Ludovico)
Presentazione 8.1
Scarica

Presentazione DTD - Luca Andrea Ludovico