Soluzioni Esercizi

Laboratorio di Tecnologie Web
Laurea in Scienze e Tecnologie Multimediali
Docente: Carlo Drioli
17 marzo 2014
1
XML e DTD: esercizi introduttivi
Esercizio 1.1
Si crei un file address book.xml contenente il seguente codice XML, che rappresenta una
collezione di indirizzi:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE address-book SYSTEM "address-book.dtd">
<address-book>
<entry>
<name>Homer Simpson</name>
<tel>+1-039-1234567</tel>
<email ref="mailto:[email protected]"/>
</entry>
<entry>
<name>Barney Gamble</name>
<address>
<street>Moe Street</street>
<region>SP</region>
<postal-code>99999</postal-code>
<locality>Springfield</locality>
<country>US</country>
</address>
<tel preferred="true">+1-039-77777777</tel>
<tel>+1-039-77777888</tel>
<email ref="mailto:[email protected]"/>
</entry>
</address-book>
1. Si crei un file address book.dtd contenente una definizione di tipo documento (DTD)
coerente con il documento XML.
Soluzione:
1
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ATTLIST
<!ATTLIST
<!ATTLIST
address-book (entry)+>
entry (name,address?,tel+,email*)>
name (#PCDATA) >
address (street,region,postalcode,locality,country)>
tel (#PCDATA) >
email EMPTY >
street (#PCDATA) >
region (#PCDATA) >
postalcode (#PCDATA) >
locality (#PCDATA) >
country (#PCDATA) >
tel preferred (true|false) "false">
email ref CDATA #REQUIRED>
entry ident ID #REQUIRED>
2. Si validi il file XML secondo il DTD proposto, usando il tool di validazione presente
all’indirizzo: http://validator.w3.org/check .
Esercizio 1.2
Siano dati i seguenti DTD:
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
records (cd|dvd|tape|lp)+>
cd (#PCDATA) >
dvd (#PCDATA) >
tape (#PCDATA) >
lp (#PCDATA) >
e
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
records (cd,dvd,tape,lp)+>
cd (#PCDATA) >
dvd (#PCDATA) >
tape (#PCDATA) >
lp (#PCDATA) >
Si costruiscano degli esempi di documento XML per ciascuna delle seguenti specifiche:
• il documento deve contenere almeno uno di ognuno degli elementi cd, dvd, tape, lp,
e deve essere valido rispetto ad entrambi i DTD.
Soluzione:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE records SYSTEM "records.dtd">
<records>
<cd>il mio primo cd</cd>
<dvd>il mio primo dvd</dvd>
<tape>la mia prima cassetta</tape>
<lp>il mio primo lp</lp>
</records>
• il documento deve contenere almeno uno di ognuno degli elementi cd, dvd, tape, lp,
e deve essere valido rispetto al primo DTD ma non valido rispetto al secondo.
Soluzione:
2
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE records SYSTEM "records.dtd">
<records>
<lp>il mio primo lp</lp>
<tape>la mia prima cassetta</tape>
<dvd>il mio primo dvd</dvd>
<cd>il mio primo cd</cd>
</records>
• il documento deve contenere tutti gli elementi cd, dvd, tape, lp, e almeno una ripetizione (es., due cd). Deve inoltre essere valido rispetto ad entrambi i DTD.
Soluzione:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE records SYSTEM "records.dtd">
<records>
<cd>il mio primo cd</cd>
<dvd>il mio primo dvd</dvd>
<tape>la mia prima cassetta</tape>
<lp>il mio primo lp</lp>
<cd>il mio secondo cd</cd>
<dvd></dvd>
<tape></tape>
<lp></lp>
</records>
• il documento deve contenere solo alcuni fra gli elementi cd, dvd, tape, lp, eventualmente ripetuti: dire rispetto a quale dei due DTD il documento `e valido.
Si modifichi infine il secondo DTD in modo che possano esserci pi`
u ripetizioni per un elemento, fermo restante il vicnolo di ordinamento imposto dalla lista. Es:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE records SYSTEM "records.dtd">
<records>
<cd>il mio primo cd</cd>
<dvd>il mio primo dvd</dvd>
<dvd>il mio secondo dvd</dvd>
<dvd>il mio terzo dvd</dvd>
<lp>il mio primo lp</lp>
</records>
Soluzione:
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
records (cd*,dvd*,tape*,lp*)>
cd (#PCDATA) >
dvd (#PCDATA) >
tape (#PCDATA) >
lp (#PCDATA) >
3
Esercizio 1.3
Si faccia riferimento a un’applicazione per gestire la programmazione degli eventi di una
struttura per la ristorazione. Si vuole progettare un documento XML e relativo DTD che
modellino eventi quali matrimoni, rinfreschi, feste di compleanno, cene a tema, etc.
1. Si crei un file XML evento.xml contenente un elemento radice ”evento” ed un elemento figlio ”titolo” contenente un nome per l’ evento (di tipo PCDATA), ad esempio
”Pranzo di Natale”. Si crei anche il relativo DTD e si validi il file XML con i tool di
validazione.
Soluzione:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE evento [
<!ELEMENT evento (titolo)>
<!ELEMENT titolo (#PCDATA) >
]>
<evento>
<titolo>Pranzo di Natale</titolo>
</evento>
2. Ora si arricchisca il documento XML con i seguenti elementi, modificando di conseguenza anche la definizione di DTD (quando non diversamente specificato, gli
elementi devono apparire una sola volta nel documento):
• data, ora, luogo, prezzo e descrizione. L’elemento prezzo abbia un attributo
include che pu`o valere ”bevande escluse” o ”bevande incluse”.
• un elemento contatto del responsabile dell’organizzazione, composto a sua volta
da nome, cognome, tel. ed email.
• un elemento artista con due nodi figli, nome e genere, che pu`o non esserci o
esserci una sola volta.
Soluzione:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE evento [
<!ELEMENT evento (titolo,data,ora,luogo,prezzo,descrizione,contatto,artista?)>
<!ELEMENT titolo (#PCDATA) >
<!ELEMENT data (#PCDATA) >
<!ELEMENT ora (#PCDATA) >
<!ELEMENT luogo (#PCDATA) >
<!ELEMENT prezzo (#PCDATA) >
<!ELEMENT descrizione (#PCDATA) >
<!ELEMENT contatto (nome,cognome,tel,email) >
<!ELEMENT nome (#PCDATA) >
<!ELEMENT cognome (#PCDATA) >
<!ELEMENT tel (#PCDATA) >
<!ELEMENT email (#PCDATA) >
<!ELEMENT artista (nome,genere) >
<!ELEMENT genere (#PCDATA) >
4
<!ATTLIST prezzo include (bevande_escluse|bevande_incluse) #REQUIRED>
]>
<evento>
<titolo>Pranzo di Natale</titolo>
<data>25 dicembre</data>
<ora>13.00</ora>
<luogo>Sala principale</luogo>
<prezzo include="bevande_incluse">20.0</prezzo>
<descrizione>Da non perdere.</descrizione>
<contatto>
<nome>Direzione</nome>
<cognome>n.a.</cognome>
<tel>1-020-333</tel>
<email>[email protected]</email>
</contatto>
</evento>
Esercizio 1.4
Si aggiunga all’esercizio precedente un elemento menu, composto a sua volta da un elemento
antipasto, un elemento primi, un elemento secondi e un elemento dessert. Ognuno di questi
abbia due elementi figli, pietanza e bevanda, entrambi con un attributo tipo per specificare
il tipo di pietanza (”carne”, ”pesce”, etc.) o di bevanda (”acqua”, ”rosso”, ”bianoo”,
”amaro”, etc.). Sia pietanza che bevanda possono comparire una o pi`
u volte.
5
2
(X)HTML e Form per l’input di dati
Esercizio 1.5
Si scriva un semplice documento (X)HTML che realizza un interfaccia per l’invio delle
seguenti informazioni di testo: nome, et`a, email, password (N.b: per l’attributo name dei
rispettivi elementi input, si usino i valori ”nome”, ”age”, ”email”, ”password”). In prima
istanza, si lascino vuoti gli attributi action e method del tag form. In un secondo momento,
si assegnino all’attributo action il valore:
"http://users.dimi.uniud.it/~carlo.drioli/WebTech/elabora.php"
e all’attributo method il valore "post".
Soluzione:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Form example</title>
</head>
<body>
<p> Inserisci i tuoi dati: </p>
<form action="http://users.dimi.uniud.it/~carlo.drioli/WebTech/elabora.php" method="post" id="formsemplice">
<p>
<label for="Nome">Nome</label>
<input type="text" id="Nome" name="nome" size="10"/>
</p>
<p>
<label for="age">Eta’</label>
<input type="text" id="age" name="age" size="10" maxlength="3"/>
</p>
<p>
<label for="email">Email</label>
<input type="text" id="email" name="email" size="20"/>
</p>
<p>
<label for="password">Password</label>
<input type="password" id="password" name="password" size="20"/>
</p>
<p>
<input type="submit" value="Spedisci" />
<input type="reset" value="Cancella" />
</p>
</form>
</body>
</html>
Esercizio 1.6
Si aggiunga al documento (X)HTML precedente, il supporto per l’invio di testo su pi`
u
6
righe usando il costrutto textarea (N.b: per l’attributo name si usi il valore ”commento”).
Soluzione:
...
<p>
<label for="comment_id">Un commento</label>
<textarea cols="70" rows="7" name="commento" id="comment_id"></textarea>
</p>
...
Esercizio 1.7
Si aggiunga un elemento ”radio button” per la selezione del genere (maschio/femmina)
(N.b: per l’attributo name dell’elemento input, si usi il valore ”genere”).
Soluzione:
...
<p>
Maschio<input type="radio" name="genere" value="M"/>
Femmina<input type="radio" name="genere" value="F"/>
</p>
...
Esercizio 1.8
Si aggiunga un elemento ”Checkbox” per la selezione multipla di interessi personali (cucina, sport, libri, viaggi) (N.b: per l’attributo name dei rispettivi elementi input, si usino i
valori ”interessi[a]”, ”interessi[b]”, ”interessi[c]”, ”interessi[d]”).
Soluzione:
...
<p> Interessi personali:
<input name="interessi[a]"
<input name="interessi[b]"
<input name="interessi[c]"
<input name="interessi[d]"
</p>
...
type="checkbox"
type="checkbox"
type="checkbox"
type="checkbox"
value="cucina" /> cucina
value="sport" /> sport
value="libri" /> libri
value="viaggi" /> viaggi
Esercizio 1.9
Si aggiunga un elemento ”select” per fornire un men`
u a scelta singola o multipla per la voce
7
”professione” (studente, dipendente, lavoratore autonomo, artigiano) (N.b: per l’attributo
name dell’elemento select si usi il valore ”professione”).
Soluzione:
...
<p> La tua professione:
<select name="professione" multiple="multiple"/>
<option value="studente">Studente</option>
<option value="dipendente">Dipendente</option>
<option value="autonomo">Lavoratore Autonomo</option>
<option value="artigiano">Artigiano</option>
</select>
</p>
...
8