Blocco 3 di Esercizi su XML e XPath
Il seguente database XML illustra le torture a cui gli studenti vorrebbero
sottoporre i loro “amati” professori.
L’elemento tortura indica il tipo di supplizio ed e’ identificato da un
attributo di tipo ID, l’elemento professore indica una potenziale vittima
anch’essa identificata da un attributo di tipo ID.
Infine, mentre l’elemento di tipo assegnata indica a quale tortura deve essere
assoggettato un dato professore, mantenendo l’informazione su quale studente ha
richiesto la tortura e la durata in giorni della tortura stessa. In particolare,
l’elemento assegnata ha due attributi di tipo IDREF, idtortura e idprofessore,
il primo serve ad identificare la tortura, il secondo serve ad identificare la
vittima.
NB: ogni riferimento a persone e/o cose e’ assolutamente casuale.
-----------------------------------------------------------------------------<?xml version="1.0"?>
<!DOCTYPE supplizi [
<!ELEMENT supplizi (tortura+,professore+,assegnata*) >
<!ELEMENT tortura (descrizione+) >
<!ATTLIST tortura codice ID #REQUIRED>
<!ELEMENT descrizione (#PCDATA) >
<!ELEMENT
<!ATTLIST
<!ELEMENT
<!ELEMENT
professore (cognome,nome) >
professore codice ID #REQUIRED>
nome (#PCDATA) >
cognome (#PCDATA) >
<!ELEMENT assegnata (studente,giorni) >
<!ATTLIST assegnata idtortura IDREF #REQUIRED
idprofessore IDREF #REQUIRED
>
<!ELEMENT studente (cognome,nome) >
]>
<supplizi>
<tortura codice="01" >
<descrizione>Crocifisso, resuscitato e ancora crocifisso</descrizione>
</tortura>
<tortura codice="02" >
<descrizione>mangiato dagli squali</descrizione>
</tortura>
<tortura codice="03" >
<descrizione>mangiato dai pirana</descrizione>
</tortura>
<tortura codice="04" >
<descrizione>spalmato di miele e mangiato dalle formiche rosse</descrizione>
</tortura>
<tortura codice="06" >
<descrizione>seppellito dalle sue stesse dispense</descrizione>
</tortura>
<professore codice="999" >
<cognome>Ghini</cognome>
<nome>Vittorio</nome>
</professore>
<professore codice="998" >
<cognome>Bagagli</cognome>
<nome>Gino</nome>
</professore>
<professore codice="997" >
<cognome>Mengozzi</cognome>
<nome>Sallustio</nome>
</professore>
<assegnata idtortura="02" idprofessore="999">
<studente>
<cognome>Sicuro</cognome>
<nome>Laura</nome>
</studente>
<giorni> 23 </giorni>
</assegnata>
<assegnata idtortura="03" idprofessore="999">
<studente>
<cognome>Miserocchi</cognome>
<nome>Anna</nome>
</studente>
<giorni> 7 </giorni>
</assegnata>
<assegnata idtortura="04" idprofessore="999">
<studente>
<cognome>Bartolomei</cognome>
<nome>Giody</nome>
</studente>
<giorni> 777 </giorni>
</assegnata>
<assegnata idtortura="04" idprofessore="999">
<studente>
<cognome>Sinnisi</cognome>
<nome>Salvo</nome>
</studente>
<giorni> 8 </giorni>
</assegnata>
<assegnata idtortura="04" idprofessore="999">
<studente>
<cognome>Sinnisi</cognome>
<nome>Salvo</nome>
</studente>
<giorni> 8 </giorni>
</assegnata>
<assegnata idtortura="01" idprofessore="998">
<studente>
<cognome>Sicuro</cognome>
<nome>Laura</nome>
</studente>
<giorni> 2 </giorni>
</assegnata>
</supplizi>
-----------------------------------------------------------------------------
svolgere i seguenti esercizi (la 5 e’ difficile):
1) elenco di tutti i professori
/child::supplizi/child::professore
2) elenco delle torture in cui, nella descrizione, il professore e’ ‘mangiato’
/child::supplizi/child::tortura[contains(child::descrizione, ‘mangiato’)]
3) elenco delle torture richieste da Laura Sicuro.
id (
/child::supplizi/child::assegnata [
child::studente/child::cognome=’Sicuro’ and
child::studente/child::nome=’Laura’
] /attribute::idtortura
)
NB: tale query restituisce questi elementi:
<tortura codice="01">
<descrizione>Crocifisso, resuscitato e ancora crocifisso</descrizione>
</tortura>
<tortura codice="02">
<descrizione>mangiato dagli squali</descrizione>
</tortura>
4) elenco delle torture a cui e’ soggetto il professore Ghini Vittorio
id (
/child::supplizi/child::assegnata [
attribute::idprofessore =
/child::supplizi/child::professore [
child::cognome=’Ghini’ and
child::nome=’Vittorio’
] /attribute::codice
] /attribute::idtortura
)
produce questo risultato
<tortura codice="02">
<descrizione>mangiato dagli squali</descrizione>
</tortura>
<tortura codice="03">
<descrizione>mangiato dai pirana</descrizione>
</tortura>
<tortura codice="04">
<descrizione>spalmato di miele e mangiato dalle formiche rosse</descrizione>
</tortura>
5) elenco delle torture in cui un professore di nome Vittorio e’ sottoposto per piu’ di 10 giorni.
id (
/child::supplizi/child::assegnata [
(
attribute::idprofessore =
/child::supplizi/child::professore [
child::cognome=’Ghini’ and
child::nome=’Vittorio’
] /attribute::codice
)
and
(
child::giorni > 10
)
] /attribute::idtortura
)
6)
elenco degli studenti che hanno richiesto una tortura per il professore di nome ‘Vittorio’
/child::supplizi/child::assegnata [
attribute::idprofessore =
/child::supplizi/child::professore[child::nome=’Vittorio’]/attribute::codice
] / child::studente
Scarica

Blocco 3 di Esercizi su XML e XPath