[xquery-talk] Where Clause and XDT:Untyped Issues

Michael Kay mike at saxonica.com
Sat Feb 2 22:28:04 PST 2008


We still don't know what your source data looks like.

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

> -----Original Message-----
> From: Wei, Alice J. [mailto:ajwei at indiana.edu] 
> Sent: 02 February 2008 22:12
> To: Michael Kay; 'Torsten Grust'
> Cc: talk at x-query.com
> Subject: RE: [xquery-talk] Where Clause and XDT:Untyped Issues
> 
> Hi, Michael:
> 
>   Thanks, I did not realize that my <head type="main"> and 
> <head type="sub"> can bring so many of these relevant errors.
> 
>    I have fixed up the code to as follows:
> 
> let $ad := fn:collection("xmldb:exist://db/my")//ad
> let $sorted_result:=
> for $doc in distinct-values($ad)
> where contains($ad/head[@type='sub'],'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>
> 
> This produces no type error issues, but neither does it bring 
> back results.
> 
> If I  change the where clause to where 
> contains($doc,'Baseball'), it brings back something like the 
> one in the following:
> 
> <ad>
> <statistics> Showing Result: 1 / 1</statistics> <ad> <head> 
> <emph rend ="bold deepink">Hostess</emph> is back with new 
> Baseball Cards...to collect and trade with your 
> friends.</head> <p> <emph rend ="bold orange">3 Free Baseball 
> Cards</emph> <emph rend ="bold">on specially marked boxes of 
> HostessR Snack Cakes.</emph> </p> <p>A total of 150 cards. 
> Full of facts. Collect 'em. Trade 'em.</p>
> <p>3 full-color cards printed on the bottom of every 
> specially marked box of Twinkies <emph rend ="sup">R</emph> , 
> Cup Cakes, Suzy Q's <emph rend ="sup">R</emph> , and other 
> mmmmmmmm-delicious Hostess <emph rend ="sup">R</emph> Snacks. 
> </p> <note>RHostess. Twinkies and Suzy Q's are registered 
> trademarks of ITT Continental Baking Co.
> <lb/>
> Offer expires August 31, 1976</note>
> </ad>
> <!--Another duplicate of the <ad>  -->
> </ad>
> 
> Is it possible that I cannot utilize the where clause at all 
> here? Or, do I have to call up using another user-defined function?
> 
> Thanks for your help.
> ======================================================
> Alice Wei
> MIS 2008
> School of Library and Information Science Indiana University 
> Bloomington ajwei at indiana.edu ________________________________________
> From: Michael Kay [mike at saxonica.com]
> Sent: Saturday, February 02, 2008 10:33 AM
> To: 'Torsten Grust'
> Cc: talk at x-query.com; Wei, Alice J.
> Subject: RE: [xquery-talk] Where Clause and XDT:Untyped Issues
> 
> 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/



More information about the talk mailing list