[xquery-talk] Where Clause and XDT:Untyped Issues
Michael Kay
mike at saxonica.com
Sat Feb 2 15:33:12 PST 2008
What's more, I would expect
let $ad := fn:collection("xmldb:exist://db/my")//ad
to return a set containing several ad elements. The only way
contains($ad/head,'Baseball')
can return true is if exactly one of those ad elements has a child called
head - which seems intrinsically rather unlikely. If there's more than one
head element, it fails with a type error; if there are none, it return
false.
Incidentally, it's a common mistake to imagine that contains() is a test for
set membership, rather than a test for the presence of a substring. I
suspect that might be happening here. But who knows.
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 Torsten Grust
> Sent: 02 February 2008 12:48
> To: Torsten Grust
> Cc: talk at x-query.com; Wei, Alice J.
> Subject: Re: [xquery-talk] Where Clause and XDT:Untyped Issues
>
> Woops, I should have looked more closely. $doc is bound to
> atomic values, not nodes.
>
> The observation about $ad being invariant in the loop
> applies, though. This appears ``fishy'': either all bindings
> of $doc pass or none at all (you seem to observe the former).
>
> --Torsten
>
> On Feb 2, 2008, at 13:41, Torsten Grust wrote:
>
> > Hi Alice,
> >
> > it might very well be that
> >
> > where contains($ad/head,'Baseball')
> >
> > should be replaced by
> >
> > where contains($doc/head,'Baseball')
> >
> > ($ad is invariant in the loop and thus makes for a
> questionable filter
> > criterion). It is hard to tell, though: as Mike already said, you
> > didn't post (a sketch of) your data.
> >
> > Cheers,
> > --Torsten
> >
> >
> > On Feb 1, 2008, at 23:31, Wei, Alice J. wrote:
> >
> >> Hi,
> >>
> >> I believe I have been passing this question through, but
> I think my
> >> main question about not been able to put in a where clause in my
> >> XQuery after my second let statement has been declared. In
> return, I
> >> receive all retrieved results is the issue.
> >>
> >> The code below has been modified from one of the members
> >> inspirations. Apparently, no matter what I do, it appears
> that the
> >> where clause in the $sorted_result has never been taken into the
> >> output generation. When executed the script, it gives me back
> >> everything, whether or not the word baseball was in the head.
> >> I have 197 distinct values in my list.
> >>
> >> let $ad := fn:collection("xmldb:exist://db/my")//ad
> >> let $sorted_result:=
> >> for $doc in distinct-values($ad)
> >> where contains($ad/head,'Baseball')
> >> order by $doc
> >> return $doc
> >> for $r at $count in $sorted_result
> >> let $nodes := $ad[. = $r]
> >> return
> >> <ad>
> >> <statistics>
> >> Showing Result: {$count} / {count($sorted_result)} </statistics>
> >> {$nodes} </ad>
> >>
> >> What I want here is just something simple, I want to be
> able to put
> >> in some form of where clause so I can eliminate more of my current
> >> result output. [...]
> >
> >
> > --
> > | Prof. Dr. Torsten Grust grust at in.tum.de |
> > | http://www-db.in.tum.de/~grust/ |
> > | Database Systems - Technische Universität München (Germany) |
> >
> >
> >
> >
> > _______________________________________________
> > talk at x-query.com
> > http://x-query.com/mailman/listinfo/talk
>
> --
> | Prof. Dr. Torsten Grust grust at in.tum.de |
> | http://www-db.in.tum.de/~grust/ |
> | Database Systems - Technische Universität München (Germany) |
>
>
>
>
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk
More information about the talk
mailing list