====== Correction TP XQury/Oracle ====== ===== Schéma XML ===== ===== XPath ===== - Donne les titres des actes de la pièce - Vide: il n'y a pas de titre dans une ligne. On peut changer LINE en SCENE - La liste des personnages de la pièce - La liste des personnages de la pièce qui ne sont pas dans un groupe - Vide. Changer PERSONA en SPEAKER - Vide. CHanger following en preceding - La première ligne de chaque scène Requêtes - sur le forum: - XQUERY doc("/public/bdav/forum/exemple1.xml")//message[../message/@reponse_a = @id] / - XQUERY doc("/public/bdav/forum/exemple1.xml")//message[@reponse_a = 2] / - XQUERY doc("/public/bdav/forum/exemple1.xml")//membre[@id = ../salle/message[@auteur = following::message/@auteur]/@auteur] / - sur la pièce: - XQUERY doc("/public/bdav/shakespear/hamlet.xml")//SPEECH[SPEAKER="HAMLET" or SPEAKER = "HORATIO"]/LINE / - XQUERY doc("/public/bdav/shakespear/hamlet.xml")//SPEECH[SPEAKER="HAMLET"]/following-sibling::SPEECH[1][SPEAKER="HORATIO"]/../TITLE / ===== XQuery ===== - Transformation forum - XQUERY { for $a in doc("/public/bdav/forum/exemple1.xml")//membre return {$a/@*}{$a/*} } / - XQUERY { for $a in doc("/public/bdav/forum/exemple1.xml")//membre return {$a/@*} {$a/*} {$a/..//message[@auteur = $a/@id]} } / - Présentation forum XQUERY Forum { for $s in doc("/public/bdav/forum/exemple1.xml")//salle return (

{$s/titre/text()}

, for $m in $s/message let $a := $s/../membre[@id = $m/@auteur] return (

{$m/titre/text()}

,

{$a/nom/text()}

,

{$m/corps/text()}

) ) } /
- Transformation théâtreXQUERY let $doc := doc("/public/bdav/shakespear/hamlet.xml") return { for $s in $doc//SCENE return {$s/TITLE/text()} { for $sp in $s/SPEECH let $tit := $sp/LINE[1]/text(), $corps := $sp/LINE[position() > 1]/text(), $aut := $sp/SPEAKER/text() return {$tit} {$corps} } } { for $p in $doc//PERSONA let $n := $p/text() return {$n}{$n}@shakespeare.net } /