xquery-engine / src / main / queries / inputs / xquery / ms2_xquery_tests.xqy
ms2_xquery_tests.xqy
Raw
(:######################## START: FLWR ########################:)

(:Returns 39 nodes:)
<sometag>{for $a in document("j_caesar.xml")//ACT, $s1 in $a//SPEAKER
        where ($s1/text() eq "CAESAR")
        return <speaks>{<who>{$s1/text()}</who>,
        <when>{$a/TITLE/text()}</when>}</speaks>}
</sometag>;

(:######################## END: FLWR ########################:)



(:######################## START: cond_Some ########################:)

(:### Should return nothing since the text() compressor isn't provided in the condition:)
<result> {for $a in document("j_caesar.xml")//ACT
        where some $s1 in $a//SPEAKER satisfies $s1 eq "TREBONIUS"
        return <when>{$a/TITLE/text()}</when>}
</result>;


(:returns :)
(:    <RESULT>:)
(:      <when>ACT II</when>:)
(:      <when>ACT III</when>:)
(:    </RESULT>:)
<result> {for $a in document("j_caesar.xml")//ACT
        where some $s1 in $a//SPEAKER satisfies $s1/text() eq "TREBONIUS"
        return <when>{$a/TITLE/text()}</when>}
</result>;

(:######################## END: cond_Some ########################:)



(:######################## START: Nested ########################:)

<result>{
    for $s in document("j_caesar.xml")//SPEAKER
    return <speaks>{<who>{$s/text()}</who>,
                    for $a in document("j_caesar.xml")//ACT
                    where some $s1 in $a//SPEAKER satisfies $s1/text() eq $s
                    return <when>{$a/TITLE/text()}</when>}
           </speaks>
}</result>;

(:######################## START: Nested ########################:)


for $character in document("j_caesar.xml")//SPEAKER
                let $check := "CAESAR"
                where ($character/text() eq $check)
                return <foo>{<CHARACTER>{$character}</CHARACTER>,
                <speeches>{$check}</speeches>}</foo>;


for $character in document("j_caesar.xml")//SPEAKER
                let $a := $character/../../..//TITLE
                where ($character/text() eq "CAESAR")
                return <foo>{<CHARACTER>{$character}</CHARACTER>,
                <title>{$a}</title>}</foo>;


for $character in distinct-values(//SPEAKER)
let $speeches := count(//SPEECH[SPEAKER = $character])
where $speeches > 100
return <CHARACTER name="{$character}" speeches="{$speeches}" />;


for $line in //ACT[TITLE = "ACT III"]/SCENE[TITLE = "SCENE II"]/SPEECH[SPEAKER = "BRUTUS"]/LINE
return $line;


for $act in doc("j_caesar.xml")/PLAY/ACT,
$scene in $act/SCENE,
$speech in $scene/SPEECH[SPEAKER = 'BRUTUS']
return
    <speech>{
        <title>{$speech/SPEAKER/text()}</title>,
        <lines>{$speech}</lines>
    }</speech>;

(:The above query is equivalent to the next one. This returns 194 speech nodes:)
for $act in doc("j_caesar.xml")/PLAY/ACT,
$scene in $act/SCENE,
$speaker in $scene/SPEECH/SPEAKER
where $speaker = "BRUTUS"
return
    <speech>{
        <title>{$speaker/text()}</title>,
        <vartak>{$speaker/../../TITLE/text()}</vartak>
    }</speech>;


for $line in document("j_caesar.xml")//LINE
    where $line/../SPEAKER = "BRUTUS"
    return $line/text();

(:let $speakers := document("j_caesar.xml")//SPEAKER:)
(:let $lines := for $speaker in $speakers:)
(:                    return <line>{$speaker/../LINE}</line>:)
(:$speakers[$lines/text() = "Et tu, Brute! Then fall, Caesar."]/text();:)


(:let $speakers := document("j_caesar.xml")//SPEAKER,:)
(:$lines := for $speaker in $speakers:)
(:                where $speaker/../LINE = "Et tu, Brute! Then fall, Caesar.":)
(:                    return <line>{$speaker/../LINE}</line>:)
(:<foo>{$speakers/text()}</foo>;:)


for $speaker in document("j_caesar.xml")//SPEAKER,
    $line in let $k := document("j_caesar.xml")//TITLE
                    for $node in $k
                    return
                        <title>{$k}</title>
    where $line/text() eq "SCENE II. A public place." and $speaker/text() eq "Soothsayer"
    return <foo>{$speaker/../LINE}</foo>;


(:######################## START: MS2 ########################:)
<result>{
 for $a in (for $s in doc("j_caesar.xml")//ACT return $s),$sc in (for $t in $a/SCENE return $t), $sp in (for $d in $sc/SPEECH return $d)
where $sp/LINE/text() = "Et tu, Brute! Then fall, Caesar."
 return
 <who>{$sp/SPEAKER/text()}</who>,<when>{ <act>{$a/TITLE/text()}</act>,
 <scene>{$sc/TITLE/text()}</scene> }</when> }</result>;


<result>{
 for $a in doc("j_caesar.xml")//PERSONAE, $b in $a/PERSONA where not (($b/text() = "JULIUS CAESAR") or ($b/text() = "Another Poet") )
 return $b }</result>;


<acts>{
 for $a in doc("j_caesar.xml")//ACT
 where not empty (
 for $sp in $a/SCENE/SPEECH
 where ($sp/SPEAKER/text() = "FLAVIUS" and $sp/../TITLE/text()="SCENE I.  Rome. A street.")
 return <speaker>{ $sp/text() }</speaker> )
 return <act>{$a/TITLE/text()}</act> }</acts>;


<result>{
for $a in doc("j_caesar.xml")//ACT
 where some $s1 in (for $x in $a//SCENE
 where $x/TITLE/text()="SCENE II.  A public place."
 return $x)
 satisfies $s1//SPEAKER eq "CAESAR" and $a/TITLE/text() = "ACT I"
 return <act>{$a/TITLE/text()}</act>}</result>;

<result>{for $s in doc("j_caesar.xml")//SCENE
 where $s//SPEAKER/text()="CAESAR"
 return <scenes>{ <scene> {$s/TITLE/text()} </scene>}</result>

<result>{
 for $s in doc("j_caesar.xml")//SCENE
 where $s//SPEAKER/text()="CAESAR"
 return <scenes>{ <scene> {$s/TITLE/text()} </scene>, for $a in doc("j_caesar.xml")//ACT
 where some $s1 in (for $x in $a//SCENE
 where $x/TITLE/text()="SCENE II.  A public place."
 return $x)
 satisfies $s1 eq $s and $a/TITLE/text() = "ACT I"
 return <act>{$a/TITLE/text()}</act>}</scenes>}</result>;


<result>{
 for $a in (for $s in doc("j_caesar.xml")//ACT where $s/TITLE/text()="ACT I" return $s), $sc in
 (for $t in $a/SCENE where $t/TITLE/text()="SCENE I.  Rome. A street." return $t), $sp in (for $d in
 $sc/SPEECH where $d/LINE/text()="Upon a labouring day without the sign" return $d)
 where $sp/SPEAKER/text() = "FLAVIUS"
 return <who>{$sp/SPEAKER/text()}</who>,<when>{ <act>{$a/TITLE/text()}</act>,
 <scene>{$sc/TITLE/text()}</scene> }</when> }</result>;


<result>{
 for $a in (for $s in doc("j_caesar.xml")//ACT return $s), $sc in (for $t in $a/SCENE return $t),
 $sp in (for $d in $sc/SPEECH return $d) where $sp/LINE/text() = "Et tu, Brute! Then fall, Caesar."
 return <who>{$sp/SPEAKER/text()}</who>,
 <when>{ <act>{$a/TITLE/text()}</act>, <scene>{$sc/TITLE/text()}</scene> }</when> }</result>;


<acts>{
 for $a in doc("j_caesar.xml")//ACT
 where empty ( for $sp in $a/SCENE/SPEECH/SPEAKER
 where $sp/text() = "CASCA"
 return <speaker> {$sp/text()}</speaker>)
 return <act>{$a/TITLE/text()}</act>}</acts> ;


<result>{
  for $a in doc("j_caesar.xml")//PERSONAE, $b in $a/PERSONA
  where ($b/text() = "JULIUS CAESAR") or ($b/text()= "Another Poet")
  return $b }</result>;


<acts>{
 for $b in doc("j_caesar.xml")//ACT
 let $a:= $b/SCENE
 where $a/SPEECH/SPEAKER/text()="MARULLUS"
 return <act>{$a}</act> }</acts>;

<acts>{
 let $a:= doc("j_caesar.xml")//ACT
 for $b in $a/SCENE
 where $b/SPEECH/SPEAKER/text()="MARULLUS"
 return <act>{$b}</act> }</acts>;


(:######################## START: Joins ########################:)

for $tuple in join (join (for $b2 in doc("j_caesar.xml")//SPEECH, $tb2 in $b2/SPEAKER
				where $tb2 = "FLAVIUS"
				return <tuple><b2>{$b2}</b2>, <tb2>{$tb2}</tb2></tuple>,
			for $b3 in doc("j_caesar.xml")//ACT, $tb3 in $b3//SPEAKER
				where $b3/TITLE = "ACT I"
				return <tuple><b3>{$b3}</b3>, <tb3>{$tb3}</tb3></tuple>,
			[tb2], [tb3]),
		for $b1 in doc("j_caesar.xml")//PGROUP, $tb1 in $b1/PERSONA
			return <tuple><b1>{$b1}</b1>, <tb1>{$tb1}</tb1></tuple>,
		[tb3], [tb1])
	return
	<triplet>{$tuple/b1/*/PERSONA, $tuple/b2/*/SPEAKER, $tuple/b3/*/SCENE/TITLE}</triplet>;

for $tuple in join (join (for $b2 in doc("j_caesar.xml")//SPEECH, $tb2 in $b2/SPEAKER
                where $tb2 = "PUBLIUS"
                return <tuple><b2>{$b2}</b2>, <tb2>{$tb2}</tb2></tuple>,
                for $b3 in doc("j_caesar.xml")//ACT, $tb3 in $b3/..//SPEAKER
                where $b3/TITLE = "ACT II"
                return <tuple><b3>{$b3}</b3>, <tb3>{$tb3}</tb3></tuple>,
                [tb2], [tb3]),
                for $b1 in doc("j_caesar.xml")//PGROUP, $tb1 in $b1/PERSONA
                return <tuple><b1>{$b1}</b1>, <tb1>{$tb1}</tb1></tuple>,
                [tb3], [tb1])
                return
                <triplet>{$tuple/b1/*, $tuple/b2/*, $tuple/b3/*}</triplet>;


for $tuple in join (join (join (for $b2 in doc("j_caesar.xml")//SPEECH, $tb2 in $b2/SPEAKER
                where $tb2 = "PUBLIUS"
                return <tuple><b2>{$b2}</b2>, <tb2>{$tb2}</tb2></tuple>,
                for $b3 in doc("j_caesar.xml")//ACT, $tb3 in $b3/..//SPEAKER
                where $b3/TITLE = "ACT II"
                return <tuple><b3>{$b3}</b3>, <tb3>{$tb3}</tb3></tuple>,
                [tb2], [tb3]),
                for $b1 in doc("j_caesar.xml")//PGROUP, $tb1 in $b1/PERSONA
                return <tuple><b1>{$b1}</b1>, <tb1>{$tb1}</tb1></tuple>,
                [tb3], [tb1]),
		for $b4 in doc("j_caesar.xml")//ACT, $tb4 in $b4/SCENE/TITLE
		where $tb4 = "SCENE II.  CAESAR's house."
                return <tuple><b4>{$b4}</b4>, <tb4>{$tb4}</tb4></tuple>,
                [b3], [b4])
                return
                <triplet>{$tuple/b1/*, $tuple/b2/*, $tuple/tb3/*, $tuple/tb4/*}</triplet>;


for $tuple in join (join (for $b2 in doc("j_caesar_M3.xml")//SPEECH, $tb2 in $b2/SPEAKER
                where $tb2 = "FLAVIUS"
                return <tuple><b2>{$b2}</b2>, <tb2>{$tb2}</tb2></tuple>,
                for $b3 in doc("j_caesar_M3.xml")//ACT, $tb3 in $b3/..//SPEAKER
                where $b3/TITLE = "ACT I"
                return <tuple><b3>{$b3}</b3>, <tb3>{$tb3}</tb3></tuple>,
                [tb2], [tb3]),
                for $b1 in doc("j_caesar_M3.xml")//PGROUP, $tb1 in $b1/PERSONA
                return <tuple><b1>{$b1}</b1>, <tb1>{$tb1}</tb1></tuple>,
                [tb3], [tb1])
                return
                <triplet>{$tuple/b1/*, $tuple/b2/*, $tuple/b3/*}</triplet>;