[xquery-talk] Incorrect Intersect and Except Output?

Michael Kay mike at saxonica.com
Mon Mar 31 07:23:24 PST 2008


No, you haven't grasped it.

let $a1 := <a/>, $a2 := <a/> return count(($a1, $a2))

returns 2. Thats because the two <a/> nodes are DIFFERENT - they have
different identity because they were created separately. The same logic
applies to intersect and except.

Michael Kay
http://www.saxonica.com/ 

> -----Original Message-----
> From: talk-bounces at x-query.com 
> [mailto:talk-bounces at x-query.com] On Behalf Of Wei, Alice J.
> Sent: 31 March 2008 00:09
> To: Jonathan Robie
> Cc: talk at x-query.com
> Subject: RE: [xquery-talk] Incorrect Intersect and Except Output?
> 
> Hi, Jonathan:
> 
>   I think I understand what you mean by having different 
> nodes in the both sets I have indicated. However, since 
> <b>2</b><b>3</b> are co-shared between the two sets, this 
> means that I have to go around by doing something like
> 
> 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/b union $b/b) except ($a/b except $b/b))}</foo>
> 
> Output:
> 
> <foo>
> <b>What</b>
> <b>2</b>
> <b>3</b>
> <b>4</b>
> </foo>
> 
> This is not exactly what I desired, but are you saying that I 
> have to use union joins and combine it with other operators 
> for the output? And, how can I get rid of the 
> <b>2</b><b>3</b> and switch it with <b>1</b>?
> 
> Thanks for your help.
> 
> Alice
> ======================================================
> Alice Wei
> MIS 2008
> School of Library and Information Science Indiana University 
> Bloomington ajwei at indiana.edu ________________________________________
> From: Jonathan Robie [jonathan.robie at redhat.com]
> Sent: Sunday, March 30, 2008 1:45 PM
> To: Wei, Alice J.
> Cc: talk at x-query.com
> Subject: Re: [xquery-talk] Incorrect Intersect and Except Output?
> 
> Wei, Alice J. wrote:
> > 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>
> >
> 
> Except tests for node identity (you seem to expect it to test 
> the node values). If none of the nodes in $a are also in $b, 
> then $a except $b is the same as $a.
> 
> > 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?
> >
> 
> Yes, but there are no nodes in $b that are also in $a, and vice versa.
> 
> Jonathan
> 
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk



More information about the talk mailing list