[xquery-talk] Incorrect Intersect and Except Output?
Wei, Alice J.
ajwei at indiana.edu
Sat Mar 29 07:33:58 PST 2008
Hi, XQueriers:
I think I am still having quite a bit of issues with this particular XPath expression.
I have used the idea Jonathan Robie brought up last time by combining the expressions by calling the original variables
let $a := collection("xmldb:exist://db/cbm")//ad//address[contains(upper-case(.),$search)],
$c := collection("xmldb:exist://db/cbm")//ad//address[contains(upper-case(.),$search2)],
if (($search ne "") and ($search4 eq "address") and ($search5 eq "address") and ($search2 ne "") and ($search7 eq "and") and ($search3 eq ""))
then <div>{local:count-distinct-values($a intersect $c)}
</div>
I attempted to have this bring out only the items that contain the word $search and $search2 in the address tag, but it appears that it always brings one of the words back, and not just the result that contains both words. I tried switching the clause to $a except $c, but the result is always problematic.
I used what Jonathan showed me last time by writing this little snippet to try how intersect and except works:
let $a := <a><b>1</b><b>2</b><b>3</b></a>,
$b := <c><b>What</b><b>2</b><b>3</b><b>4</b></c>,
return
<foo>{$a except $b}</foo>
brings
<foo>
<a>
<b>1</b>
<b>2</b>
<b>3</b>
</a>
</foo>
If I use $a intersect $b, it brings me an empty node <foo/>
Isn't intersect supposed to bring back what is contained in $b and $a?
As for except, since it supposed to bring only what is not co-shared between $a and $b, (according to the original concept in SQL), isn't it supposed to bring back
<foo>
<a>
<b>1</b>
<b>What</b>
<b>4</b>
</a>
</foo>
Am I missing something here?
Thanks for your help.
Alice
======================================================
Alice Wei
MIS 2008
School of Library and Information Science
Indiana University Bloomington
ajwei at indiana.edu
More information about the talk
mailing list