[xquery-talk] Using Union/Intersect to Combine Two User-Defined Function Results

Jonathan Robie jonathan.robie at redhat.com
Tue Mar 25 16:40:40 PST 2008


Wei, Alice J. wrote:
> To answer your question, each of my local:searchresult functions as something like local:searchresult((collection("my")//ad/p[contains(upper-case(.),$search)])
>   is a self efficient XML document with several nodes within it. Each of the output is something like:
>
> <ad>
> <head type="main">
> <emph rend="red">FREE</emph>
> </head>
>         <p>Thousands of users actual decals for a 2 deuce coupe! You'll receive free
>                         over 100 different. use on your bike, model car, van, plane, or on glass
>                         painted surfaces, metal, plastic, etc. </p>     </ad>
>   

Does local:searchresult() create new nodes? Each of these nodes will 
have a new ideintity.

> What I am trying to do here is to combine both of the result sets into one.
> Therefore, if a user intends to see the output of a search term and another term, he would only see the combined result.
> Would you say this is possible?
>   

You can certainly do something like this:

let $a := collection("my")//ad/p[contains(upper-case(.),$search,
$b := collection("your")//ad/p[contains(upper-case(.),$search,
$c := collection("my")//ad/p[contains(upper-case(.),$search2,
$d := collection("your")//ad/p[contains(upper-case(.),$search2
return
local:searchresult( $a intersect $b intersect $c intersect $c )

By separating search from construction, you can rely on the identity of 
the original nodes.

Hope this helps!

Jonathan


More information about the talk mailing list