Sei sulla pagina 1di 28

Indice

Introduzione..........................................................................................................................................3 Uno sguardo a XML.............................................................................................................................3 La sintassi XML...................................................................................................................................4 Le grammatiche DTD...........................................................................................................................8 Collegare un file XML ad un foglio di stile CSS............................................................................... 4 Introduzione a XML Schema.............................................................................................................. ! "ltre tecnologie legate a XML...........................................................................................................#3 XML e le $agine %e&' X(TML.........................................................................................................#4 )uer* con LI+) to XML...................................................................................................................#4 ,sercizi...............................................................................................................................................#! -i&liografia e Sitografia.....................................................................................................................#8

Introduzione
XML significa eXtensible Markup Language, cio Linguaggio a marcatori estensibile E' un insieme di regole e convenzioni che consentono di descrivere qualunque linguaggio di markup, basato quindi sui marcatori L'idea in parte derivata dai concetti di base di S !L "standard eneralized !arkup Language# $l vantaggio di %!L su S !L dato dalla semplicit& con la quale in %!L possibile definire una struttura gerarchica per le informazioni

Uno sguardo a XML


'no dei linguaggi a marcatori pi( conosciuto )*!L e i marcatori sono prefissati %!L non definisce una propria collezione di marcatori "detti tag# ma definisce le regole sintattiche per generare marcatori personalizzati e i loro eventuali attributi %!L un meta+linguaggio, cio uno strumento estensibile con cui possibile realizzare altri linguaggi descrivendo i nuovi marcatori e gli eventuali attributi di questi E' anche possibile, ma non obbligatorio, definire le regole semantiche di relazione tra gli stessi marcatori $ documenti %!L sono di puro testo e non binari, ci, garantisce la portabilit& tra sistemi differenti %!L non legato ad una azienda particolare, una specifica prodotta dal -./ "-orld -ide -eb /onsortium# Un esempio di documento XML: esempio012ml 342ml version560176 encoding56utf+8649 3prenotazione9 3id:olo9;<.=03>id:olo9 3id/liente9;;=.7?3>id/liente9 3data9==+07+=7703>data9 3prezzo valuta5Euro9=@?3>prezzo9 3>prenotazione9 esempio=12ml 342ml version560176 encoding56'*A+8649 3html9 3head9 3title9 *itolo del documento )*!L 3>title9 3>head9 3bodB9 3h09'n documento )*!L scritto in %!L3>h09 3>bodB9 3>html9

Esercizio Con un editor di testo (anche Blocco note di Windows) scrivere il codice esempio2 !ml e memorizzarlo in due "ile diversi: #)esempio2 html 2)esempio2 !ml $prire con un %rowser prima un "ile e poi l&altro e osservare i risultati

'n esempio pi( complesso di documento %!LC esempio.12ml


342ml version560176 encoding56utf+8649 3 ranD;remio9 3Eazione9Felgio3>Eazione9 3/ircuito9S;<3>/ircuito9 3<nno9=70.3><nno9 3 rigliaDdiD;artenza9 3;ilota9 3;osizione903>;osizione9 3Eome9Guan ;ablo !ontoHa3>Eome9 3:ettura9-illiams F!-3>:ettura9 3*empo901?=17I=3>*empo9 3>;ilota9 3;ilota9 3;osizione9=3>;osizione9 3Eome9Jalph Schumaker3>Eome9 3:ettura9-illiams F!-3>:ettura9 3*empo901?.1=IK3>*empo9 3>;ilota9 3;ilota9 1111111111111 3>;ilota9 3> rigliaDdiD;artenza9 3> ranD;remio9

La sintassi XML
La prima rigaC 342ml version5017 encoding5'*A+849

0#$dentifica la tipologia del documento =#Specifica la versione di %!L e la codifica utilizzata .#$l tag non obbligatorio ma la sua presenza pu, evitare problemi legati a incompatibilit& tra file sviluppati con versioni differenti *utto il documento contenuto all'interno dei due tagC 3 ranD;remio9 L1111111111111 3> ranD;remio9 0#Muesto elemento chiamato root element =#E' consentita la presenza di un solo root element .#$ tag sono case sensitive @#Eon ammesso avere coppie di tag che si intersecano ?#Ngni tag deve essere sempre chiuso O#;u, accadere che un tag non contenga valori

Esempio: '(uali"icato)'*(uali"icato) oppure in "orma a%%reviata: '(uali"icato *) Attributi $ tag %!L possono essere corredati di attributi che specificano alcune caratteristiche 1 li attributi sono delle coppie nome=valore che devono esse inserite all'interno dei tag1 Esempio: '+!ml version,-# .-) L'attributo version arricchisce il tag di intestazione del documento %!L aggiungendo l'informazione sulla versione li attributi vanno sempre racchiusi tra doppi apici o apice singolo li attributi possono essere utilizzati in alternativa ad alcuni elementi nidificatiC esempio@12ml 342ml version560176 encoding56utf+8649 3;ilota9 3;osizione903>;osizione9 3Eome9Guan ;ablo !ontoHa3>Eome9 3:ettura9-illiams F!-3>:ettura9 3*empo901?=17I=3>*empo9 3>;ilota9 ;u, diventareC esempio?12ml 342ml version560176 encoding56utf+8649 3;ilota ;osizione5606 *empo501?=17I=9 3Eome9Guan ;ablo !ontoHa3>Eome9 3:ettura9-illiams F!-3>:ettura9 3>;ilota9 Muest'ultimo esempio fornisce le stesse informazioni dell'esempio precedente ma questa volta Posizione e Tempo sono state trasformate in attributi del tag ;ilota *ag o attributi 4 Mualche regola per decidereC 'n tag un elemento estendibile in termini di contenuto "con elementi figli# e di attributi 'n attributo non estendibileC pu, solo modellare una propriet& di un tag in termini di valore 'n tag unPentit& a se stante 'n attributo strettamente legato ad un tag 'n attributo pu, solamente contenere un valore atomico $n pratica non cP una regola valida in assoluto La scelta dipende da diversi fattoriC leggibilit&, semantica, tipo di applicazione, efficienza Documenti ben ormati e documenti validi $n %!L ci sono regole sintattiche C /osa possiamo scrivere in un documento %!L1 /i possono essere "ma non obbligatorio# regole semantiche "definite da grammatiche# C /ome dobbiamo scrivere le informazioni allPinterno dei documenti

'n documento %!L che rispetta le regole sintattiche si dice ben formato !"ell ormed # 'n documento %!L che rispetta le regole sintattiche e le regole semantiche si dice si dice valido !valid# 'n documento ben formato pu, non essere valido rispetto ad una grammatica, mentre un documento valido necessariamente ben formato1 $omponenti di un documento $n un documento %!L generico possiamo individuareC 0# $l prologo =# $ commenti .# $ marcatori @# $l root element ?# li attributi O# $l contenuto informativo Il prologo contieneC La dichiarazione %!LC 342ml version5017 encoding5'*A+8 standalone5Bes49 La dichiarazione %!L se presente deve essere la prima riga del prologo e quindi del documento %!L $struzioni di elaborazione Sono direttive che danno indicazioni al softQare che utiliza il documento %!L1 Esempio: '+!ml/st0lesheet t0pe,-te!t*css- hre",-esempio css-+) $nformazioni sulla grammatica utilizzata nel documento o il riferimento a una grammatica esterna Esempio:'123C456E Li%ro 7574EM 8li%ro dtd-) $ommenti 3R++ Muesto un commento ++9 $ commenti %!L possono essere posizionati ovunque Eon bisogna inserirli prima della dichiarazione %!L

3R++ commento in posizione scorretta ++9 342ml version560176 encoding56utf+8649 3root9 L111 3>root9 Eon possono essere inseriti in altri tag 342ml version560176 encoding56utf+8649 3root 3R++ commento in posizione scorretta ++99 L111 3>root9 %lementi del documento XML 'n documento %!L composto da una gerarchia di elementi che possono essere nidificati a piacere secondo regole sintattiche precise 'n elemento formato da una coppia di marcatori detti rispettivamente tag di apertura e tag di chiusura 'n elemento pu, contenere del semplice testo

$l linguaggio %!L case sensitive %lemento radice E' il contenitore che racchiude tutta la gerarchia E' obbligatorio E' denominato root element &omenclatura dei tag 'n tag di apertura deve iniziare con il carattere 3 'n tag di chiusura deve iniziare con la coppia di caratteri 3> Entrambi i tag devono terminare con il carattere 9 $l nome compreso tra questi caratteri pu,C $niziare con una lettera, un carattere di sottolineatura o con il carattere C "due punti# Sopo il primo carattere possibile utilizzare lettere, numeri, caratteri di sottolineatura, trattini, punti e due punti Eon possibile utilizzare spazi bianchi per separare parole diverse all'interno del nome del tag Attributi dei tag ;ermettono di specificare meglio alcune caratteristiche dell'elemento senza ricorrere a elementi figli La sintassi degli attributi prevede la presenza della coppia nome=valore ;ossono essere racchiusi tra apici doppi o apici singoli Eomi degli attributi C Sevono seguire le stesse regole dei nomi dei tag degli elementi $ nomi degli attributi sono univoci all'interno dello stesso tag <nche i nomi degli attributi sono case sensitive %ntit' prede inite 'na entit& una modalit& per inserire all'interno del documento %!L una porzione di testo che sar& analizzata durante la fase di elaborazione del documento e non viene presa in considerazione durante l'analisi della forma del documento La sintassi %!L prevede l'esistenza di cinque entit& predefinite anche se possibile inserirne di personalizzate Entit& predefinite in %!L C TaposU <pice singolo ' TquotU <pice doppio TltU Simbolo di minore 3 TgtU Simbolo di maggiore 9 TampU Simbolo di e commerciale T Esempio Supponiamo di avere la seguente stringaC Muesta stringa contiene l'apice e l'apice doppio La possiamo inserire come valore di un attributo %!L nel seguente modoC

342ml version560176 encoding56utf+8649 3frase voce56;aola6 id56=6 contenuto56questa stringa contiene lTaposUapice e lTaposU TquotUapice doppioTquotU6 >9

Le grammatic(e DTD
Muando un documento %!L ben formato associato a una grammatica e la rispetta, si dice che valido per quella grammatica ;er inserire una grammatica ci sono = modalit&C $nserire le regole grammaticali direttamente all'interno del documento %!L , tra il prologo e il tag di apertura dell'elemento principale /reare un file esterno con estensione 1dtd "document tBpe definition# che contenga le regole grammaticali1 $n questo caso il documento %!L deve contenere un marcatore che indichi il riferimento al file dlla grammatica )rammatica DTD all*interno del documento XML Esempio: libroDconDgrammaticaDinterna12ml 342ml version560176 encoding56utf+8649 3RSN/*V;E Libro W 3RELE!EE* Libro "autoreX, titolo, isbn, $ntroduzione, /apitoli#9 3RELE!EE* autore "Y;/S<*<#9 3RELE!EE* titolo "Y;/S<*<#9 3RELE!EE* isbn "Y;/S<*<#9 3RELE!EE* $ntroduzione "Y;/S<*<#9 3RELE!EE* /apitoli "/apitoloX#9 3RELE!EE* /apitolo "numero, *itolo, testo#9 3RELE!EE* numero "Y;/S<*<#9 3RELE!EE* *itolo "Y;/S<*<#9 3RELE!EE* testo "Y;/S<*<#9 Z9 3Libro9 3autore9!assimo /anducci3>autore9 3titolo9;); ?3>titolo9 3isbn988+?7.+=0K@+?3>isbn9 3$ntroduzione93>$ntroduzione9 3/apitoli9 3/apitolo9 3numero903>numero9 3*itolo9'no sguardo a ;);3>*itolo9 3testo93>testo9 3>/apitolo9 3>/apitoli9 3>Libro9

)rammatica DTD all*esterno del documento XML Esempio: libroDconDgrammaticaDesterna12ml grammatica1dtd 342ml version560176 encoding56utf+8649 3RELE!EE* Libro "autoreX, titolo, isbn, 3RSN/*V;E Libro SVS*E! 6grammatica1dtd69 $ntroduzione, /apitoli#9 3Libro9 3RELE!EE* autore "Y;/S<*<#9 3autore9!assimo /anducci3>autore9 3RELE!EE* titolo "Y;/S<*<#9 3titolo9;); ?3>titolo9 3RELE!EE* isbn "Y;/S<*<#9 3isbn988+?7.+=0K@+?3>isbn9 3RELE!EE* $ntroduzione "Y;/S<*<#9 3$ntroduzione93>$ntroduzione9 3RELE!EE* /apitoli "/apitoloX#9 3/apitoli9 3RELE!EE* /apitolo "numero, *itolo, testo#9 3/apitolo9 3RELE!EE* numero "Y;/S<*<#9 3numero903>numero9 3RELE!EE* *itolo "Y;/S<*<#9 3*itolo9'no sguardo a ;);3>*itolo9 3RELE!EE* testo "Y;/S<*<#9 3testo93>testo9 3>/apitolo9 3/apitolo9 3numero9=3>numero9 3*itolo9$ mattoni del linguaggio3>*itolo9 3testo93>testo9 3>/apitolo9 3>/apitoli9 3>Libro9

Utilizzo delle grammatic(e DTD S*S all'interno del documento 2mlC 342ml version50179 3RSN/*V;E radice W L111 Z9 3radice9 L111 contenuto del documento 2ml 3>radice9 S*S all'esterno del documento 2mlC 342ml version50179 3RSN/*V;E radice SVS*E! 6nomefile1dtd69 3radice9 L111 contenuto del documento 2ml 3>radice9 Perc(+ usare un DTD /on un S*S ciascun file %!L porta con s[ una descrizione del tipo di contenuto Siversi programmatori possono usare un S*S standard per scambiarsi dati ;otete usare il S*S per verificare la correttezza del vostro documento %!L "validazione# ;otete usare un S*S standard per verificare la correttezza di un documento %!L fatto da altri che dovrebbe essere conforme allo standard

,intassi di un DTD La sintassi di un S*S si basa principalmente sulla presenza delle seguenti dichiarazioniC 3RELE!EE*9 3R<**L$S*9 3REE*$*V9 XML- DTD %L%M%&T, N;EJ<*NJ$ NJS$E<L$ 0#$l carattere virgola , indica C Sequenza =# $l carattere barra verticale \ indicaC scelta N;EJ<*NJ$ /<JS$E<L$ .#$l carattere pi( X indica che l'elemento presente una o pi( volte 4.Il carattere asterisco / indica che l0elemento 1 $resente zero o $i2 3olte 4.Il carattere $unto interrogati3o 5 indica che l0elemento 1 $resente zero o una sola 3olta Esempio S*SDfrutta1dtd 3RELE!EE* Arutta "Aragole,"!ele\<rance##9 3RELE!EE* Aragole "Y;/S<*<#9 3RELE!EE* !ele "Y;/S<*<#9 3RELE!EE* <rance "Y;/S<*<#9 frutta12ml 342ml version560176 encoding56utf+8649 3RSN/*V;E Arutta SVS*E! 6S*SDfrutta1dtd69 3Arutta9 3Aragole9Aragole della :al martello3>Aragole9 3<rance9<rance di Sicilia3><rance9 3>Arutta9 oppure 342ml version560176 encoding56utf+8649 3RSN/*V;E Arutta SVS*E! 6S*SDfrutta1dtd69 3Arutta9 3Aragole9Aragole della :al martello3>Aragole9 3!ele9!ele del *rentino3>!ele9 3>Arutta9

Esempio S*SDfrutta1dtd 3RELE!EE* Arutta "AragoleX,"!ele\<rance#]#9 3RELE!EE* Aragole "Y;/S<*<#9 3RELE!EE* !ele "Y;/S<*<#9 3RELE!EE* <rance "Y;/S<*<#9

frutta12ml 342ml version560176 encoding56utf+8649 3RSN/*V;E Arutta SVS*E! 6S*SDfrutta1dtd69 3Arutta9 3Aragole9Aragole della :al !artello3>Aragole9 3Aragole9Aragole del *rentino3>Aragole9 3<rance9<rance di Sicilia3><rance9 3!ele9!ele della :al di Eon3>!ele9 3!ele9!ele Jenette3>!ele9 3>Arutta9

;er la definizione dei tag che non contengono sottoelementi dobbiamo distinguere il caso dei tag vuoti dai tag che racchiudono testo1 Eel caso di tag vuoto la definizione ./%L%M%&T &ome%lemento %MPT01 Eel caso di elementi che racchiudono testo abbiamo una definizione analoga alla seguenteC ./%L%M%&T Testo !2P$DATA#1 Esiste la possibilit& di definire elementi il cui contenuto non definito a priori, possono cio essere vuoti o contenere altri elementi senza vincoli particolari1 ./%L%M%&T &ome%lemento A&01 XML- DTD ATT3I4UT%, SintassiC 3R<**L$S* nomeElemento nome<ttributo tipo<ttributo valoreSefault9 esempio S*SC 3R<**L$S* pagamento tBpe /S<*< 6assegno69 3R<**L$S* articolo titolo /S<*< YJEM'$JES9 esempio %!LC 3pagamento tBpe56assegno6 >9 $ndica che l'elemento 3articolo9 prevede un attributo titolo che pu, avere come valore una qualsiasi combinazione di caratteri "/S<*<#1 L'indicazione YJEM'$JES indica che la presenza dell'attributo obbligatoria1

'n attributo pu, essereC YJEM'$JES obbligatorio Y$!;L$ES opzionale YA$%ES fisso "specificato# Dic(iarazioni interne di entit' carattere SintassiC 3REE*$*V entitB+name 6entitB+value69 Esempio S*SC 3REE*$*V autore 6;aperino69 3REE*$*V copBright 6/opBright SisneB169 Esempio %!LC 3autore9TautoreUTcopBrightU3>autore9

XML- DTD $5&$LU,I5&I *uttavia i S*S hanno i seguenti limitiC La sintassi utilizzata per definire un S*S non segue le stesse regole di %!L $ S*S non consentono di specificare un tipo di dato per il valore degli attributi $ S*S non consentono di specificare il numero minimo o massimo di occorrenze di un tag in un documento Mueste limitazioni hanno spinto alla definizione di approcci alternativi per definire grammatiche per documenti %!L1 *ra questi approcci il pi( noto XML ,c(ema1 Esercizio: 7peci"ica di $ddress List 7i pro9etti il 242 per la 9estione di una address list 7i scriva inoltre un "ile XML valido per il 242 pro9ettato Una address list contiene almeno una in"ormazione 39ni in"ormazione include il nome: uno o pi; indirizzi: uno o pi; numeri di tele"ono: uno o pi; indirizzi email: eventualmente la nazionalit<: uno o pi; note =l nome contiene il nome proprio: uno o pi; secondi nomi: ed il co9nome Un indirizzo > caratterizzato da almeno una via: un indirizzo postale: eventualmente la provincia: e sicuramente il paese 7oluzione <ddressDList12ml
<?xml version="1.0" encoding="utf-8"?> <!DOC !"# $ddress%&ist ' <!#&#(#) $ddress%&ist *inform+,ione-.> <!#&#(#) inform+,ione */ull%)ome0 1ndiri,,o-0 elefono-0 #m+il-0 )+,ion+lit+?0 )ot+-. > <!#&#(#) /ull%)ome */irst%)+me0 &+st%)+me0 2econd%)+me-.> <!#&#(#) /irst%)+me *3"CD$ $.> <!#&#(#) &+st%)+me *3"CD$ $.> <!#&#(#) 2econd%)+me *3"CD$ $.> <!#&#(#) 1ndiri,,o *4i+0 C+50 "rovinci+?0 "+ese.> <!#&#(#) 4i+ *3"CD$ $.> <!#&#(#) C+5 *3"CD$ $.> <!#&#(#) "rovinci+ *3"CD$ $.> <!#&#(#) "+ese *3"CD$ $.> <!#&#(#) elefono *3"CD$ $.> <!#&#(#) #m+il *3"CD$ $.> <!#&#(#) )+,ion+lit+ *3"CD$ $.> <!#&#(#) )ot+ *3"CD$ $.> 6> <$ddress%&ist> <inform+,ione> </ull%)ome> </irst%)+me>7ossi<8/irst%)+me> <&+st%)+me>(+rio<8&+st%)+me> <2econd%)+me>9iov+nni<82econd%)+me> <8/ull%)ome> <1ndiri,,o> <4i+>4i+ dei igli010<84i+> <C+5>:;01<<8C+5> <"rovinci+>41<8"rovinci+> <"+ese> =iene<8"+ese> <81ndiri,,o> < elefono>0>><:;;;1?<8 elefono> < elefono>0>><1@:><<8 elefono> <#m+il>rossiAgm+il.com<8#m+il> <)+,ion+lit+>1<8)+,ion+lit+> <)ot+><8)ot+> <8inform+,ione> <inform+,ione>

</ull%)ome> </irst%)+me>4erdi<8/irst%)+me> <&+st%)+me>2ergio<8&+st%)+me> <2econd%)+me><82econd%)+me> <8/ull%)ome> <1ndiri,,o> <4i+>4i+ 9+riB+ldi<84i+> <C+5>:;01;<8C+5> <"rovinci+>41<8"rovinci+> <"+ese>2c=io<8"+ese> <81ndiri,,o> < elefono>0>><:;;;18<8 elefono> < elefono>0>><1@:>;<8 elefono> <#m+il>verdiAgm+il.com<8#m+il> <)+,ion+lit+>1<8)+,ion+lit+> <)ot+><8)ot+> <8inform+,ione> <8$ddress%&ist>

$ollegare un ile XML ad un oglio di stile $,,


L' istruzione di collegamento al codice va inserita nel prologo, subito prima dell' elemento radiceU la sua sintassi la seguenteC .67ml8st9les(eet t9pe=:te7t;css: (re =:nome ile<css:61 Esempio inventario1css
>] Eome AileC inventario1css ]>

libri12ml
342ml version560176 49 3R++ Eome fileC libri12ml ++9 342ml+stBlesheet tBpe56te2t>css6 href56inventario1css649

L$FJN ^displaBCblockU margin+topC=7ptU 3$E:EE*<J$N9 font+sizeC00ptU 3L$FJN9 font+familBC6*rebuchet !S6, :erdana, <rial, )elveticaU colorCY.OKU _ *$*NLN ^font+stBleCitalicU font+QeightCboldU padding+leftC.7p2U displaBCblockU _ <'*NJE^ font+QeightCboldU colorCY77fU displaBCblockU padding+leftC 0?p2U _ :<L'*<^ colorCYf77U font+sizeC00p2U padding+leftC 0?p2U _ ;JE``N^ colorCYf77U padding+leftC 0?p2U _ ;< $EE^ font+sizeC00p2U displaBCblockU font+QeightCboldU padding+leftC 0?p2U _ /N;EJ*$E<^ displaBC noneU >] displaBCblockU padding+leftC 0?p2U font+sizeC00p2U

3<'*NJE9-ilbur Smith3><'*NJE9 3*$*NLN9/ome il mare3>*$*NLN9 3/N;EJ*$E<9*ascabile economico3>/N;EJ*$E<9 3;< $EE9;agineC .773>;< $EE9 3:<L'*<9Euro3>:<L'*<9 3;JE``N907,773>;JE``N9 3>L$FJN9 3L$FJN9 3<'*NJE9Gohn risham3><'*NJE9 3*$*NLN9$l cliente3>*$*NLN9 3/N;EJ*$E<9/opertina rigida3>/N;EJ*$E<9 3;< $EE9;agineC @O73>;< $EE9 3:<L'*<9Euro3>:<L'*<9 3;JE``N90I,773>;JE``N9 3>L$FJN9 3L$FJN9 3<'*NJE9Savid Faldacci3><'*NJE9 3*$*NLN9Sotto pressione3>*$*NLN9 3/N;EJ*$E<9/opertina rigida3>/N;EJ*$E<9 3;< $EE9;agineC @=73>;< $EE9 3:<L'*<9Euro3>:<L'*<9 3;JE``N90?,773>;JE``N9 3>L$FJN9 3L$FJN9 3<'*NJE9Eelson Semille3><'*NJE9 3*$*NLN9/attedrale3>*$*NLN9 3/N;EJ*$E<9*ascabile3>/N;EJ*$E<9 3;< $EE9;agineC =?73>;< $EE9 3:<L'*<9Euro3>:<L'*<9 3;JE``N900,773>;JE``N9

3>L$FJN9 3L$FJN9 3<'*NJE9!ichael /onnellB3><'*NJE9 3*$*NLN9$l poeta3>*$*NLN9 3<'*NJE9!ichael /onnellB3><'*NJE9 3/N;EJ*$E<9*ascabile economico3>/N;EJ*$E<9 3;< $EE9;agineC =I?3>;< $EE9 3:<L'*<9Euro3>:<L'*<9 3;JE``N98,773>;JE``N9 3>L$FJN9

font+stBleC italicU ]> _

3L$FJN9 3<'*NJE9Saniel Silva3><'*NJE9 3*$*NLN9$l bersaglio3>*$*NLN9 3/N;EJ*$E<9/opertina rigida3>/N;EJ*$E<9 3;< $EE9;agineC .?73>;< $EE9 3:<L'*<9Euro3>:<L'*<9 3;JE``N9081773>;JE``N9 3>L$FJN9 3L$FJN9 3<'*NJE9Games ;atterson3><'*NJE9 3*$*NLN9!ercato nero3>*$*NLN9 3/N;EJ*$E<9*ascabile economico3>/N;EJ*$E<9 3;< $EE9;agineC =K73>;< $EE9 3:<L'*<9Euro3>:<L'*<9 3;JE``N9I,?73>;JE``N9 3>L$FJN9 3L$FJN9 3<'*NJE9;atricia /ornQell3><'*NJE9 3*$*NLN9$l nido dei calabroni3>*$*NLN9 3/N;EJ*$E<9/opertina rigida3>/N;EJ*$E<9 3;< $EE9;agineC ?073>;< $EE9 3:<L'*<9Euro3>:<L'*<9 3;JE``N90K,773>;JE``N9 3>L$FJN9 3>$E:EE*<J$N9

$n questo esempio, nel file libri12ml troviamo la seguente rigaC 342ml+stBlesheet tBpe56te2t>css6 href56inventario1css649 ,c(emi e DTD li Schemi %!L sono nati con lo stesso scopo dei S*SC Specificare la struttura dei documenti Specificare il tipo dei dati utilizzabili all'interno di elementi e attributi a Eei S*S il tipo di dato per gli elementi poteva essere solo testo Perc(= allora gli ,c(emi6 $ S*S usano una sintassi non %!L a ;erch[ costringere gli sviluppatori ad imparare le regole di un nuovo linguaggio4 a ;erch scrivere parser %!L che debbano leggere anche formati non %!L per la validazione4 $ S*S hanno pochi tipi di dato a Esistono tipi di dato molto noti che si vorrebbero poter sfruttare "interi, reali, data>ora, ecc1# Limitazioni dei DTD $ S*S sono il meccanismo 6nativo6 di %!L per la definizione della struttura dei documenti Essendo incentrati sui documenti sono poco adatti alla definizione di contenuti fortemente strutturati

$ S*S possono essere utilizzati efficacemente per lo scambio di informazioni tra utenti, ma non tra sistemi automatici in quanto non consentono di stabilire con precisione il 6tipo6 delle informazioni1 Storicamente i linguaggi a marcatura nascono come annotazione dei documenti testuali, ed solo con la diffusione di %!L che sono stati adoperati estensivamente per la rappresentazione delle informazioni

Introduzione a XML ,c(ema


%!L Schema un'applicazione %!L finalizzata alla definizione della struttura dei documenti %!L, compito gi& svolto dai S*S, in modo pi( preciso e modulare rispetto a quanto permesso da questi ultimi %!L Schema prevede la descrizione della struttura di un documento con un secondo documento %!L "detto schema# <nalogamente a quanto avviene con i S*S possibile validare un documento rispetto al proprio schema li schemi %!L prevedono la possibilit& di creare dei modelli dati fortemente tipati "come linguaggi di programmazione tipo /, Gava o linguaggi di specifica tipo SSL SML# e sono compatibili con i namespace li schemi %!L non sono sostitutivi dei S*S, ma i due sistemi devono essere utilizzati in concomitanza $n generale per i documenti scambiati tra utenti preferibile utilizzare ancora i S*S, negli altri casi "ad es1, strutture dati o basi di dati# gli schemi L'impiego degli schemi in fase di validazione molto pi( dispendioso, in termini di risorse computazionali, rispetto ai S*S "validare solo quando necessario# $oncetti di base su XML ,c(ema-elemento radice Sopo la dichiarazione %!L"342ml version501749#, un documento %!L Schema presenta al suo interno un elemento radice chiamato 32sdCschema>9, come vediamo nellPesempioC 342ml version56017649 32sdCschema9 111 111 3>2sdCschema9 'n concetto importante legato all'elemento radice il campo di visibilit&C Le dichiarazioni degli elementi o gli attributi posti allPinterno dell'elemento radice hanno visibilit& globale li elementi inseriti allPinterno di un tag comple2*Bpe "che vedremo in seguito# hanno visibilit& locale La visibilit& globale indica una definizione in maniera assoluta e quindi permette il riutilizzo dei componenti perch[ visibili a tutto lo schema $ componenti locali sono invisibili al resto dello schema e ad altri schemi

&amespace 'n Eamespace %!L una raccolta di nomi identificata da un riferimento 'J$ $ Eamespace %!L vengono usati per evitare conflitti di nomi quando si utilizzano e riutilizzano pi( vocabolari $ namespace sono il meccanismo creato appositamente per definire un identificativo univoco dei vari tag di markup $n generale un namespace viene dichiarato in questo modo 3pf2Croot 2mlnsCpf256httpC>>QQQ1foo1com6 >9 ;er evitare di usare il prefisso possibile usare un namespace di default "dovr& essere l'unico namespace di dafault# C 3root 2mlns56httpC>>QQQ1foo1com6 >9 &amespace negli sc(emi Ngni schema, in generale, fa uso di due namespaceC $l namespace %!L Schema $l targetEamespace per gli elementi descritti dallo schema 342ml version560176 encoding56'*A+8649 32sdCschema targetEamespace56httpC>>QQQ1miur1it>anagrafeStudenti6 2mlns56httpC>>QQQ1miur1it>anagrafeStudenti6 2mlnsC2sd56httpC>>QQQ1Q.1org>=770>%!LSchema6 elementAormSefault56qualified6 attributeAormSefault56unqualified69 111 111 L 3>2sdCschema9 Eell'esempio si vede che l'elemento radice ha come attributiC targetEamespaceC permette di dichiarare il namespace dei componenti creati con lo schema e accetta come valore un 'J$1 Eon obbligatorio1 Se non presente gli elementi del documento verranno validati come non qualificati da un namespace 2mlnsC indica il namespace di default al quale appartengono tutti i componenti dello schema che sono privi di prefisso 2mlnsC2sd C introduce il prefisso 2sd per individuare uno spazio dei nomi al qual appartengono i componenti di %!L Schema elementAormSefaultC indica se gli elementi definiti nello schema devono avere o no un prefisso di default se usati all'interno di una istanza1 Se l'attributo ha valore qualified gli elementi nell' istanza devono avere un prefisso attributeAormSefaultCcome sopra ma riferito agli attributi1 Se l'attributo ha valore unqualified gli attributi nell'istanza non devono avere un prefisso

Esempio Schema/S12sd
342ml version560176 encoding56utf+8649 32sCschema targetEamespace56httpC>>tempuri1org>%!LSchema12sd6 2mlns56httpC>>tempuri1org>%!LSchema12sd6 2mlnsC2s56httpC>>QQQ1Q.1org>=770>%!LSchema6 elementAormSefault56qualified6 9 32sCelement name 56artista6 tBpe562sCstring6>9 32sCelement name 56commento6 tBpe562sCstring6>9 32sCelement name 56lunghezza6 tBpe562sCstring6>9 32sCelement name 56titolo6 tBpe562sCstring6>9 32sCelement name 56anno6 tBpe562sCstring6>9 32sCelement name 56/S69 32sCcomple2*Bpe9 32sCsequence9 32sCelement ref56artista6 minNccurs5676>9 32sCelement ref 56commento6 minNccurs5676>9 32sCelement ref 56lunghezza6>9 32sCelement ref 56titolo6>9 32sCelement ref 56anno6 minNccurs5676>9 3>2sCsequence9 3>2sCcomple2*Bpe9 3>2sCelement9 3>2sCschema9 li elementi della sintassi definita in questo schema saranno inseriti nel namespace C httpC>>tempuri1org>%!LSchema12sd

La dichiarazione del default namespace indica al parser che gli elementi riferiti all'interno del documento senza esplicito riferimento di namespace vanno considerati come appartenenti al namespace C httpC>>tempuri1org>%!LSchema12sd cio al targetEamespace

Jiassumendo, nel documeto %!LSchema visto in precedenza sono presenti due distinti set di elementi, ciascuno associato a un diverso namespaceC schema element comple2*Bpe sequence minNccurs targetEamespace string L111 htt$'66%%%.%3.org6#77 6XMLSchema

artista commento anno titolo cd 111 htt$'66tem$uri.org6XMLSchema.8sd

3i erimento a uno sc(ema in un*istanza di documento Eel caso in cui l'istanza usi un namespace, nel documento %!L occorre inserireC 01 La dichiarazione del namespaceC 2mlnsC2si56httpC>>QQQ1Q.1org>=770>%!LSchema+instance6 =1 L'indicazione della locazione dello schemaC 2siCschemaLocation56httpC>>tempuri1org>%!LSchema12sd %!LSchema/S12sd6 Esempio /S12ml
342ml version560176 encoding56utf+8649 3/S 2mlns56httpC>>tempuri1org>%!LSchema12sd6 2mlnsC2si56httpC>>QQQ1Q.1org>=770>%!LSchema+instance6 2siCschemaLocation56httpC>>tempuri1org>%!LSchema12sd %!LSchema/S12sd69 3artista9Nne Sirection3>artista9 3commento9arrivati nelle top list dei grandi mercati musicali3>commento9 3lunghezza9?C@K3>lunghezza9 3titolo9'p <ll Eight3>titolo9 3anno9=7003>anno9 3>/S9

;rovenienza del namespace 2si "schema instance# Sove prelevare lo schema per la validazione dell'elemento corrente e del suo contenuto

<nche all'interno del documento precedente sono presenti due distinti set di elementi, ciascuno associato ad un diverso namespaceC

schemaLocation noEameSpaceShemaLocation

artista commento anno titolo cd 111 httpC>>tempuri1org>%!LSchema12sd

httpC>>QQQ1Q.1org>=770>%!LSchema+ instance

Eel caso in cui l'istanza non usi nessun namespace, nel documento %!L occorre inserireC 01 La dichiarazione del namespaceC 2mlnsC2si56httpC>>QQQ1Q.1org>=770>%!LSchema+instance6 =1 L'indicazione della locazione dello schemaC 2siCnoEamespaceSchemaLocation56%!LSchema/S12sd6 $l primo attributo permette di associare il prefisso 2si all''J$ mostrato, il secondo consente di indicare la directorB in cui stato salvato lo schema che vogliamo associare all'istanza1

Esempio Schema/S12sd
342ml version560176 encoding56utf+8649 32sCschema 2mlnsC2s56httpC>>QQQ1Q.1org>=770>%!LSchema6 9 32sCelement name 56artista6 tBpe562sCstring6>9 32sCelement name 56commento6 tBpe562sCstring6>9 32sCelement name 56lunghezza6 tBpe562sCstring6>9 32sCelement name 56titolo6 tBpe562sCstring6>9 32sCelement name 56anno6 tBpe562sCstring6>9 32sCelement name 56/S69 32sCcomple2*Bpe9 32sCsequence9 32sCelement ref56artista6 minNccurs5676>9 32sCelement ref 56commento6 minNccurs5676>9 32sCelement ref 56lunghezza6>9 32sCelement ref 56titolo6>9 32sCelement ref 56anno6 minNccurs5676>9 3>2sCsequence9 3>2sCcomple2*Bpe9 3>2sCelement9 3>2sCschema9

/S12ml
342ml version560176 encoding56utf+8649 3/S 2mlns56httpC>>tempuri1org>%!LSchema12sd6 2mlnsC2si56httpC>>QQQ1Q.1org>=770>%!LSchema+instance6 2siCnoEamespaceSchemaLocation56%!LSchema/SDbis12sd69 3artista9Nne Sirection3>artista9 3commento9arrivati nelle top list dei grandi mercati musicali3>commento9 3lunghezza9?C@K3>lunghezza9 3titolo9'p <ll Eight3>titolo9 3anno9=7003>anno9 3>/S9

Esempio: 2ocumento semplice Sefinizione di un documento contenente un solo elemento di tipo testualeC 342ml version560176 encoding56utf+8649 3saluto9)ello3>saluto9 Lo schema associato C 342ml version56017649 32sCschema 2mlnsC2s56httpC>>QQQ1Q.1org>=770>%!LSchema69 32sCelement name56saluto6 tBpe562sCstring6>9 3>2sCschema9 L*elemento .sc(ema1 $l documento dello schema %SS deve innanzitutto dichiarare un elemento di primo livello di nome schema e il riferimento al namespace httpC>>QQQ1Q.1org>=770>%!LSchema1 $l namespace pu, essere dichiarato come default o con prefisso, comunemente si assegna a questo spazio di nomi il prefisso 2s1 $l primo elemento "o radice# di un documento %SS sar& quindiC 32sCschema 2mlnsC2s56httpC>>QQQ1Q.1org>=770>%!LSchema69 111 3>2sCschema9 Nltre al namespace obbligatorio, lPelemento schema pu, dichiarare anche altri spazi di nomi, tra i quali quello del documento al quale si riferisce1 <d esempio, lPelemento radice di uno schema si potrebbe presentare comeC

<?xml version="1.0" encoding="utf-8"?> <xsCsc=em+ xmlns="=tt5C88BiBliotec+.org8sc=em+" t+rget)+mes5+ce="=tt5C88BiBliotec+.org8sc=em+" element/ormDef+ult="Du+lified" xmlnsCxs="=tt5C88EEE.E:.org8@0018F(&2c=em+"> ... <8xsCsc=em+>

$n questo elemento 3schema9 il frammentoC 2mlnsC2s56httpC>>QQQ1Q.1org>=770>%!LSchema6 indica che gli elementi ed i tipi di dati usati nello schema appartengono al namespaceC 6httpC>>QQQ1Q.1org>=770>%!LSchema6 e che devono comparire con il prefisso 2s1 $l frammentoC targetEamespace56httpC>>biblioteca1org>schema6 invece indica che gli elementi definiti dallo schema appartengono al namespace httpC>>biblioteca1org>schema1 $l frammentoC 2mlns56httpC>>biblioteca1org>schema6 stabilisce quale dovr& essere il namespace di default1 $nfineC elementAormSefault56qualified6 sta ad indicare che ogni elemento usato allPinterno del documento %!L che applica questo schema deve dichiarare il namespace, ad esempio, in questo casoC 3biblioteca 2mlns56httpC>>biblioteca1org>schema69 111 3>biblioteca9 3e erenziare lo sc(ema nel documento XML ;er associare un documento "ovvero un'istanza di schema# al proprio schema si utilizzano degli attributi associati al namespace 2si "%!L Schema $nstance# sul root element, ad esC
%!LSchemaDSaluto12sd 342ml version560176 encoding56utf+8649 32sCschema 2mlnsC2s56httpC>>QQQ1Q.1org>=770>%!LSchema69 32sCelement name56saluto6 tBpe562sCstring6 >9 3>2sCschema9 %!LAileDSaluto12ml 342ml version560176 encoding56utf+8649 3saluto 2mlnsC2si56httpC>>QQQ1Q.1org>=770>%!LSchema+instance6 2siCnoEamespaceSchemaLocation56%!LSchemaDSaluto12sd69 )ello -orld 3>saluto9

Esempio ListaDindirizzi12sd
342ml version560176 encoding56utf+8649 32sCschema attributeAormSefault56unqualified6 elementAormSefault56qualified6 2mlnsC2s56httpC>>QQQ1Q.1org>=770>%!LSchema69 32sCelement name56<ddressDList69 32sCcomple2*Bpe9 32sCsequence9 32sCelement ma2Nccurs56unbounded6 name56informazione69 32sCcomple2*Bpe9 32sCsequence9 32sCelement name56AullDEome69 32sCcomple2*Bpe9 32sCsequence9 32sCelement name56AirstDEame6 tBpe562sCstring6 >9 32sCelement name56LastDEame6 tBpe562sCstring6 >9 32sCelement name56SecondDEame6 tBpe562sCstring6 >9 3>2sCsequence9 3>2sCcomple2*Bpe9 3>2sCelement9 32sCelement name56$ndirizzo69 32sCcomple2*Bpe9 32sCsequence9 32sCelement name56:ia6 tBpe562sCstring6 >9 32sCelement name56/ap6 tBpe562sCunsignedShort6 >9 32sCelement name56;rovincia6 tBpe562sCstring6 >9 32sCelement name56;aese6 tBpe562sCstring6 >9 3>2sCsequence9 3>2sCcomple2*Bpe9 3>2sCelement9 32sCelement ma2Nccurs56unbounded6 name56*elefono6 tBpe562sCunsigned$nt6 >9 32sCelement name56Email6 tBpe562sCstring6 >9 32sCelement name56Eazionalita6 tBpe562sCstring6 >9 32sCelement name56Eota6 >9 3>2sCsequence9 3>2sCcomple2*Bpe9 3>2sCelement9 3>2sCsequence9 3>2sCcomple2*Bpe9 3>2sCelement9 3>2sCschema9

ListaDindirizzi12ml
342ml version560176 encoding56utf+8649 3<ddressDList 2mlnsC2si56httpC>>QQQ1Q.1org>=770>%!LSchema+instance6 2siCnoEamespaceSchemaLocation56ListaDindirizzi12sd6 9 3informazione9 3AullDEome9 3AirstDEame9Jossi3>AirstDEame9 3LastDEame9!ario3>LastDEame9 3SecondDEame9 iovanni3>SecondDEame9 3>AullDEome9 3$ndirizzo9 3:ia9:ia dei *igli,073>:ia9 3/ap9.O70?3>/ap9 3;rovincia9:$3>;rovincia9 3;aese9*hiene3>;aese9 3>$ndirizzo9 3*elefono97@@?.OOO0I3>*elefono9 3*elefono97@@?0=.@?3>*elefono9 3Email9rossibgmail1com3>Email9 3Eazionalita9$3>Eazionalita9 3Eota93>Eota9

3>informazione9 3informazione9 3AullDEome9 3AirstDEame9:erdi3>AirstDEame9 3LastDEame9Sergio3>LastDEame9 3SecondDEame93>SecondDEame9 3>AullDEome9 3$ndirizzo9 3:ia9:ia aribaldi3>:ia9 3/ap9.O70O3>/ap9 3;rovincia9:$3>;rovincia9 3;aese9Schio3>;aese9 3>$ndirizzo9 3*elefono97@@?.OOO083>*elefono9 3*elefono97@@?0=.@O3>*elefono9 3Email9verdibgmail1com3>Email9 3Eazionalita9$3>Eazionalita9 3Eota93>Eota9 3>informazione9 3><ddressDList9

Altre tecnologie legate a XML


%LinkC serve a collegare in modo completo due documenti %!LU al contrario dei classici collegamenti ipertestuali che conosciamo in )*!L, %Link permette di creare link multidirezionali e semanticamente avanzati1 %SL "acronimo di eXtensi%le 7t0lesheet Lan9ua9e#C il linguaggio con cui si descrive il foglio di stile di un documento %!L1 La sua versione estesa l'%SL* "dove la * sta per 4rans"ormations#1 %;athC un linguaggio con cui possibile individuare porzioni di un documento %!L e sta alla base di altri strumenti per l'%!L come %MuerB1 %;ointerC serve ad identificare univocamente precise porzioni di un documento %!LU consente poi il loro accesso ad altri linguaggi o oggetti di interfaccia1 %MuerBC un linguaggio di querB concepito per essere applicabile a qualsiasi sorta di documento %!L e si basa sull'utilizzo di %;ath per la specificazione di percorsi all'interno di documenti1 %MuerB ha funzionalit& che consentono di poter attingere da fonti di dati multiple per la ricerca, per filtrare i documenti o riunire i contenuti di interesse1 S<% "Simple <;$ for %!L#C un'interfaccia di programmazione, implementata in numerosi linguaggi, che permette di leggere e modificare i documenti %!L1 <ttraverso S<% possibile implementare dei parser %!L specifici1 S<% event based, al contrario di SN!, e reagisce agli eventi di parsing facendo rapporto all'applicazione1 c compito del programmatore implementare i metodi per reagire agli eventi di parsing1 SN!C un'interfaccia di programmazione, come S<%, implementata in una moltitudine di linguaggi di programmazione, per la manipolazione di file %!L1 SN! costruisce partendo dal file %!L un albero dove ogni nodo dell'albero corrisponde ad un elemento del fileU per questo motivo detta tree based1 :*S+%!LC SN! pi( facile ed immediata da utilizzare rispetto a S<% ed pertanto preferita solitamente dai programmatori per manipolare un file %!LU tuttavia l'albero generato da SN! va mantenuto completamente nella memoria J<! e di conseguenza non possibile utilizzare questa interfaccia per manipolare file che siano pi( grandi della memoria disponibile sul computer1 JSSC uno standard che serve a creare un documento con una struttura di tipo %!L

univoca, atta allo sviluppo di un semplice scambio dati tra pagine -eb ed accessibile da qualsiasi linguaggio di scripting1 $n sostanza si tratta di un documento %!L la cui struttura dei nodi ed i relativi tag hanno lo stesso nome1 S: "Scalable :ector raphics# e :!L ":ector !arkup Language# sono standard per la creazione di immagini vettoriali che sfrutta dei documenti formattati in %!L1 Serve inoltre a descrivere immagini bidimensionali, statiche e dinamiche1 Leggendo le istruzioni contenute nel documento sorgente %!L, l'interprete disegna le figure+base fino al completamento dell'immagine1 -SS% "-ord Sata Sescription E2change#C -SS% una struttura per contenimento di dati con la stessa struttura di un database, creato dalla <llaire oggi !acromedia e rilasciato Npen presso la -SS% Nrganization

XML e le pagine "eb- X>TML


%)*!L un linguaggio di markup atto a visualizzare pagine -eb tramite broQser, come l')*!L, e, essendo %!L, ne rispetta la semantica1 <d esempio in %)*!L, al contrario che in )*!L tradizionale, i tag vuoti vanno chiusi con uno slash "># finale, gli attributi vuoti devono essere valorizzati con true o "alse, la chiusura dei tag dev'essere a specchio "se viene aperto un *ag e prima di chiuderlo ne viene aperto un altro, necessario chiudere prima il secondo tag e poi il primo#, alcuni *ag e attributi, rispetto all' )*!L @17 sono scomparsi1 $l mime tBpe riservato alle pagine %)*!L "application>2htmlX2ml#1 Se si trasmette una pagina %)*!L non valida ma come te2t>html pu, capitare che venga per, visualizzata perch[ viene interpretata come html "con degli errori, quali i tag chiusi come 3br >9# solo che non rispetta lo standard e non gode dei suoi vantaggi, primo tra i quali la portabilit& su broQser e client differenti1$l vero vantaggio di una pagina %)*!L che essendo %!L ne trae tutti i pregi, quali facilit& di validazione e interpretazione programmatica1 Le pagine %)*!L sono solitamente pi( facilmente accessibili, data la loro semantica %!L1

?uer9 con LI&? to XML


$n ambiente !icrosoft :isual Studio possibile utilizzare il linguaggio L$EM per interrogare file %!L1 L$EM to %ml estende gli operatori standard di L$EM to NbHect con degli operatori specifici per %!L1 Ecco un esempio di applicazione console in linguaggio /Y che interroga il file libri12ml visto in precedenzaC

using SBstemU using SBstem1/ollections1 enericU using SBstem1LinqU using SBstem1*e2tU using SBstem1*hreading1*asksU using SBstem1%ml1LinqU namespace /ons<ppDLetturaDAileD%!L ^ class ;rogram ^ static void !ain"stringWZ args# ^ string percorso 5 b6libri12ml6U %Element libri 5 %Element1Load"percorso#U >>metodo Load della classe %Element >>carica il file specificato /onsole1-riteLine"libri#U >> visualizza il file /onsole1JeaddeB"#U >>estrae i libri che costano pi( di 07 euro var libriDcostosi 5 from item in libri1Elements"6L$FJN6# Qhere /onvert1*oSouble"item1Element"6;JE``N6#1:alue# 9 07 select itemU /onsole1-riteLine"6+++++++++++++++++++++++++6#U /onsole1-riteLine"6numero di libri costosi 5 6 X libriDcostosi1/ount"##U /onsole1-riteLine"6Lista Libri costosi 6#U /onsole1-riteLine"6+++++++++++++++++++++++++6#U foreach "var 2Ele in libriDcostosi# ^ /onsole1-riteLine"2Ele1Element"6<'*NJE6#1:alue X 6 6 X 2Ele1Element"6*$*NLN6#1:alue X 6 6 X2Ele1Element"6;JE``N6#1:alue#U _ /onsole1JeaddeB"#U >>estrae i libri di un certo autore /onsole1-riteLine"6+++++++++++++++++++++++++6#U /onsole1-riteLine"6Si quale autore ti interessano i libri46#U string cerco 5 /onsole1JeadLine"#U var libriDdiDautore 5 from item in libri1Elements"6L$FJN6# Qhere item1Element"6<'*NJE6#1:alue 55cerco select itemU /onsole1-riteLine"6numero di libri di 6XcercoX6 5 6 X libriDdiDautore1/ount"##U if "libriDdiDautore1/ount"# 9 7# ^ /onsole1-riteLine"6Lista Libri di 6 X cerco#U foreach "var 2Ele in libriDdiDautore# ^ /onsole1-riteLine"2Ele1Element"6<'*NJE6#1:alue X 6 6 X 2Ele1Element"6*$*NLN6#1:alue X 6 6 X 2Ele1Element"6;JE``N6#1:alue#U _ _ else /onsole1-riteLine"6Eessun libro per 6 X cerco#U _ _ _ /onsole1JeaddeB"#U

%sercizi
Esercizio n. 1- Lettera Si progetti il S*S e si scriva un %!L valido per un linguaggio di markup per lettere1 Ngni lettera ha un mittente, una data, un destinatario, un oggetto, una forma cortese di saluto, un corpo, una chiusura, una firma1 $l corpo della lettera ha quanto meno un paragrafo1 Esercizio n. 2 - Auto usate Si crei un documento %!L ben formato contenente le informazioni su un rivenditore di auto usate1 $l rivenditore dispone di pi( autovetture1 Le auto devono essere raggruppate per casa automobilistica tramite unPopportuna marcatura1 Ngni auto, infine, caratterizzata da una targa, un colore, un anno di immatricolazione e un chilometraggio attuale "esprimibile in km#1 Si dia esempio di tale documento ipotizzando un totale di . auto, di cui due della stessa casa automobilistica1 /odificare una applicazione /Y per rispondere alla seguente querBC . <uto immatricolate in un certo anno "anno in input# Esercizio n. 3 - Canzoni Si voglia creare un documento %!L di esempio per descrivere una singola canzone1 $n particolareC la canzone caratterizzata da uno e un solo titoloU la canzone presenta un anno di pubblicazioneU la canzone pu, avere uno o pi( autori, ciascuno associabile a un ruolo specificoU la canzone pu, avere uno o pi( interpreti, ciascuno associabile a un ruolo specifico1 Si esemplifichi quanto richiesto tramite codice ben formato1 Eella risoluzione dellPesercizio si utilizzino i seguenti dati di esempioC *itoloC :olareU <nno di pubblicazioneC 0K?8U <utoriC Somenico !odugno "musica#, Aranco !igliacci "testo#U $nterpretiC S1 !odugno "voce#1 ;opolare il file %!L con una serie di canzoni a piacere1 /odificare una applicazione /Y per rispondere alle seguenti querBC =1 /anzoni pubblicate in un certo anno "anno in input# .1 <utori di una certa canzone "titolo della canzone in input# con il relativo ruolo

Esercizio n. 4 - Interpreta il DTD Sato il seguente S*S, si proponga un documento di esempio1 3RSN/*V;E Legge W 3RELE!EE* Legge "*itoloLegge,<rticolato# 9 3RELE!EE* *itoloLegge "Y;/S<*<#9 3RELE!EE* <rticolato "/apoX#9 3RELE!EE* /apo "Jubrica4,<rticoloX#9 3RELE!EE* Jubrica "Y;/S<*<#9 3RELE!EE* <rticolo "Jubrica4,/ommaX#9 3RELE!EE* /omma "Y;/S<*<#9

3R<**L$S* /apo Eum /S<*< YJEM'$JES9 3R<**L$S* <rticolo Eum /S<*< YJEM'$JES9 3R<**L$S* /omma Eum /S<*< YJEM'$JES9 Z9 Esercizio n. 5 - e-mail Si consideri il problema di progettare una S*S per codificare in %!L le singole e+mail1 Ngni e+mail deve aver e un singolo mittente, deve avere uno o pi( destinatari in chiaro, pu, avere da 7 a molti destinatari in copia carbone "//#, pu, avere da 7 a molti destinatari invisibili "F//#, pu, avere unPintestazione e pu, avere un corpo testuale1 *utti gli elementi citati hanno contenuto alfanumerico1 $noltre, lPe+mail presenta alcuni attributiC la lingua, che di tipo testuale e la cui specificazione opzionaleU la priorit&, il cui valore uno a scelta tra ENJ!<L, LN- e )$ ) e il cui valore predefinito ENJ!<L1 Esercizio n. 6 8Sato il seguente %!L SchemaC
342ml version560176 encoding56utf+8649 32sdCschema 2mlnsC2sd56httpC>>QQQ1Q.1org>=770>%!LSchema69 32sdCannotation9 32sdCdocumentation 2mlClang56it69 Esempio 3>2sdCdocumentation9 3>2sdCannotation9 32sdCelement name56<ppunto6 tBpe56tipo<ppunto6>9 32sdCcomple2*Bpe name56tipo<ppunto69 32sdCsequence9 32sdCelement name56Sa6 tBpe562sdCstring6>9 32sdCelement name56<6 tBpe56!ail<ddr6>9 32sdCelement name56Sata6 tBpe562sdCdate6>9 32sdCelement name56Nra6 tBpe562sdCtime6>9 32sdCelement name56;riorita6 tBpe56priorita6>9 32sdCelement name56Nggetto6 tBpe562sdCtoken6>9 32sdCelement name56/orpo6 tBpe562sdCstring6>9 3>2sdCsequence9 3>2sdCcomple2*Bpe9 32sdCsimple*Bpe name56!ail<ddr69 32sdCrestriction base562sdCstring69 32sdCpattern value56W<+`7+K1DeX+ZXbW<+`7+K1+ZXf1W<+`Z^=,@_ 6>9 3>2sdCrestriction9 3>2sdCsimple*Bpe9 32sdCsimple*Bpe name56priorita69 32sdCrestriction base562sdCstring69 32sdCenumeration value56alta6>9 32sdCenumeration value56media6>9 32sdCenumeration value56urgente6>9 3>2sdCrestriction9 3>2sdCsimple*Bpe9 3>2sdCschema9

enerare un esempio di documento %!L associato1

Esercizio n. 7 /reare uno Schema %!L che descriva la struttura di un documento dizionario, che rispetti i seguenti vincoliC L'elemento dizionario deve contenere zero o pi( elementi termine1 L'elemento termine costituito dagli elementi parola, pronuncia e almeno un'occorrenza dell'elemento significato1 L'elemento significato costituito dagli elementi definizione ed esempio "l'elemento esempio pu,, comparire zero o pi( volte#1 gli elementi parola, pronuncia, definizione e esempio sono di tipo stringa1 /reare un documento istanza %!L valido rispetto allo schema precedente1 Esercizio n. <l seguente link un %!L quiz online C !ttp"##$$$.$3sc!ools.com#%uiztest#%uiztest.asp&%test'()L

4ibliogra ia e ,itogra ia
%!L di !assimo /anducci a <pogeo /omprendere %!L di Arancesco Smelzo a $ Libri di $o;rogrammo httpC>>QQQ1Q.schools1com>2ml> httpC>>QQQ1di1univaq1it>gdellape>2ml>%!LSoc1php httpC>>QQQ1dis1uniroma01it>grosati>lQ> httpC>>it1Qikipedia1org>Qiki>%!L