Blocco 2 di Esercizi su XML e XPath Dato il Documento seguente: -----------------------------------------------------------------------------<?xml version="1.0"?> <!DOCTYPE <!ELEMENT <!ELEMENT <!ATTLIST agenzia agenzia viaggio viaggio [ (viaggio+,prenotazione*) > (tappa+, durata, costo, descrizione+) > codice ID #REQUIRED tipo CDATA "normale" > <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ATTLIST <!ELEMENT <!ELEMENT ]> tappa (luogo,giorni) > luogo (#PCDATA) > giorni (#PCDATA) > durata (#PCDATA) > costo (#PCDATA) > descrizione (#PCDATA) > prenotazione (cliente,data) > prenotazione codice ID #REQUIRED > cliente (cognome,nome) > data (#PCDATA) > <agenzia> <viaggio codice="0001" tipo="sano"> <tappa> <luogo>Moena</luogo> <giorni>1</giorni> </tappa> <tappa> <luogo>Merano</luogo> <giorni>3</giorni> </tappa> <tappa> <luogo>Bolzano</luogo> <giorni>3</giorni> </tappa> <tappa> <luogo>Moena</luogo> <giorni>1</giorni> </tappa> <durata>8</durata> <costo>1000</costo> <descrizione>Monti, Arrampicate e Passeggiate</descrizione> </viaggio> <viaggio codice="0002" tipo="avventuroso"> <tappa> <luogo>Harlem</luogo> <giorni>1</giorni> </tappa> <tappa> <luogo>Caracas</luogo> <giorni>1</giorni> </tappa> <tappa> <luogo>Sing Sing</luogo> <giorni>2</giorni> </tappa> <durata>4</durata> <costo>321</costo> <descrizione>Rischio e Pericolo</descrizione> </viaggio> <viaggio codice="0003" tipo="perverso"> <tappa> <luogo>Filippine</luogo> <giorni>4</giorni> </tappa> <tappa> <luogo>Indonesia</luogo> <giorni>2</giorni> </tappa> <tappa> <luogo>Sing Sing</luogo> <giorni>4</giorni> </tappa> <durata>4</durata> <costo>1254</costo> <descrizione>Bellezze orientali</descrizione> </viaggio> <viaggio codice="0004" tipo="culturale"> <tappa> <luogo>Parma</luogo> <giorni>2</giorni> </tappa> <tappa> <luogo>Cesena</luogo> <giorni>1</giorni> </tappa> <tappa> <luogo>Bertinoro</luogo> <giorni>2</giorni> </tappa> <tappa> <luogo>Cento</luogo> <giorni>2</giorni> </tappa> <durata>7</durata> <costo>3412</costo> <descrizione>Gastronomia nostrana</descrizione> </viaggio> <prenotazione codice="0004" > <cliente> <cognome>Ghini</cognome> <nome>Vittorio</nome> </cliente> <data>11</data> </prenotazione> <prenotazione codice="0001" > <cliente> <cognome>Ghini</cognome> <nome>Vittorio</nome> </cliente> <data>19</data> </prenotazione> <prenotazione codice="0002" > <cliente> <cognome>Sicuro</cognome> <nome>Laura</nome> </cliente> <data>5</data> </prenotazione> <prenotazione codice="0003" > <cliente> <cognome>Clinton</cognome> <nome>Bill</nome> </cliente> <data>6</data> </prenotazione> <prenotazione codice="0003" > <cliente> <cognome>Flowers</cognome> <nome>Jennifer</nome> </cliente> <data>6</data> </prenotazione> <prenotazione codice="0003" > <cliente> <cognome>Jackson</cognome> <nome>Michael</nome> </cliente> <data>6</data> </prenotazione> </agenzia> ----------------------------------------------------------------------------svolgere i seguenti esercizi: NB: l’esercizio 7) è complicatuccio ma fattibile, mentre gli esercizi 8b) e 14) sono molto complicati, percio’ non vi preoccupate se non riuscite a risolverli. 1) elenco di tutti i clienti /child::agenzia/descendant::cliente 2) elenco dei viaggi di tipo perverso /child::agenzia/child::viaggio[attribute::tipo=’perverso’] 3) elenco dei viaggi in cui l’ultima tappa e’ lo stesso luogo della prima tappa. /child::agenzia/child::viaggio [ child::tappa[position()=1]/child::luogo = child::tappa[last()]/child::luogo ] restituisce, come previsto, questo risultato: <viaggio codice="0001" tipo="sano"> <tappa> <luogo>Moena</luogo> <giorni>1</giorni> </tappa> <tappa> <luogo>Merano</luogo> <giorni>3</giorni> </tappa> <tappa> <luogo>Bolzano</luogo> <giorni>3</giorni> </tappa> <tappa> <luogo>Moena</luogo> <giorni>1</giorni> </tappa> <durata>8</durata> <costo>1000</costo> <descrizione>Monti, Arrampicate e Passeggiate</descrizione> </viaggio> 4) durata dei viaggi di Vittorio id( /child::agenzia/child::prenotazione[child::cliente/child::nome='Vittorio']/attribute::codice )/durata 5) prima tappa di tutti i viaggi prenotati da Vittorio id( /child::agenzia/child::prenotazione[child::cliente/child::nome='Vittorio']/attribute::codice )/child::tappa[position()=1] 6) prima tappa di tutti i viaggi prenotati da qualcuno id( /child::agenzia/child::prenotazione/attribute::codice )/child::tappa[position()=1] 7) chi fa viaggi di tipo ‘perverso’ ? /child::agenzia/child::prenotazione [ attribute::codice = /child::agenzia/child::viaggio[attribute::tipo='perverso']/attribute::codice ] /child::cliente restituisce, come previsto, questo risultato: <output> <cliente> <cognome>Clinton</cognome> <nome>Bill</nome> </cliente> <cliente> <cognome>Flowers</cognome> <nome>Jennifer</nome> </cliente> <cliente> <cognome>Jackson</cognome> <nome>Michael</nome> </cliente> </output> 8a) chi fa lo stesso viaggio di Clinton /child::agenzia/child::prenotazione [ attribute::codice = /child::agenzia/child::prenotazione[child::cliente/child::cognome='Clinton']/attribute::codice ]/child::cliente 8b) chi fa lo stesso viaggio di Clinton e nella stessa data /child::agenzia/child::prenotazione [ ( attribute::codice = /child::agenzia/child::prenotazione[child::cliente/child::cognome='Clinton']/attribute::codice ) and ( child::data = /child::agenzia/child::prenotazione[child::cliente/child::cognome='Clinton'] / child::data) ) ] /child::cliente 8a) ed 8) restituiscono, come previsto, questo risultato: <output> <cliente> <cognome>Clinton</cognome> <nome>Bill</nome> </cliente> <cliente> <cognome>Flowers</cognome> <nome>Jennifer</nome> </cliente> <cliente> <cognome>Jackson</cognome> <nome>Michael</nome> </cliente> </output> 9) il viaggio che passa per l’ Indonesia /child::agenzia/child::viaggio[child::tappa/child::luogo='Indonesia'] 10) i viaggi con piu’ di tre tappe /child::agenzia/child::viaggio[ count( child::tappa ) > 3 ] 11) quanti giorni sta Vittorio a Cento? id ( /child::agenzia/child::prenotazione[child::cliente/child::nome='Vittorio'] /attribute::codice ) /child::tappa [ child::luogo='Cento' ] / child::giorni restituisce, come previsto, questo risultato (2 giorni) <output> <giorni>2</giorni> </output> 12) quanti giorni sta Jennifer a Cento? id ( /child::agenzia/child::prenotazione[child::cliente/child::nome='Jennifer'] /attribute::codice ) /child::tappa [ child::luogo='Cento' ] / child::giorni restituisce, come previsto, questo risultato (cioe’ nessun giorno): <output> </output> 13) I viaggi nella cui descrizione compare la stringa ‘astro /child::agenzia/child::viaggio[ contains( child::descrizione , 'astro' ) ] restituisce, come previsto, questo risultato <output> <viaggio codice="0004" tipo="culturale"> etc. etc. etc. </viaggio> </output> 14) Le persone che fanno viaggi che passano per ’Sing Sing’ /child::agenzia/child::prenotazione [ id ( attribute::codice ) /child::tappa/child::luogo='Sing Sing' ]/child::cliente 15) I viaggi in cui l’ultima tappa e’ uguale alla prima tappa oops, mi scuso, e’ la stessa domanda di 3) 16) L’insieme delle tappe di qualche viaggio, in cui si risiede per piu’ di un giorno consecutivo. /child::agenzia/child::viaggio/child::tappa [ child::giorni > 1 ] restituisce, come previsto, questo risultato : <output> <tappa> <luogo>Merano</luogo> <giorni>3</giorni> </tappa> <tappa> <luogo>Bolzano</luogo> <giorni>3</giorni> </tappa> <tappa> <tappa> <luogo>Sing Sing</luogo> <giorni>2</giorni> </tappa> <luogo>Filippine</luogo> <giorni>4</giorni> </tappa> <tappa> <luogo>Indonesia</luogo> <giorni>2</giorni> </tappa> <tappa> <luogo>Sing Sing</luogo> <giorni>4</giorni> </tappa> <tappa> <luogo>Parma</luogo> <giorni>2</giorni> </tappa> <tappa> <luogo>Bertinoro</luogo> <giorni>2</giorni> </tappa> <tappa> <luogo>Cento</luogo> <giorni>2</giorni> </tappa> </output>