[xquery-talk] reversing element ordering, with a caveat
Howard Katz
howardk at fatdog.com
Mon Mar 16 07:02:54 PST 2009
Thanks, Ken,
The ordering appears to remain stable in Saxon, even w/out the 'stable'
keyword. An interesting discussion!
Howard
> -----Original Message-----
> From: talk-bounces at x-query.com
> [mailto:talk-bounces at x-query.com] On Behalf Of G. Ken Holman
> Sent: Sunday, March 15, 2009 11:54 PM
> To: talk at x-query.com
> Cc: Howard Katz; Brian Maso
> Subject: Re: [xquery-talk] reversing element ordering, with a caveat
>
> At 2009-03-15 19:23 -0700, Brian Maso wrote:
> >In XQuery, I think its just a matter of running over the distinct
> >values of //book/@pubYear in descending order. Something like:
>
> I don't think that level of complexity is needed at all.
>
> XQuery clause 3.8.3 includes in one of the examples the text:
>
> "the keyword stable indicates that their input order is preserved"
>
> >This will retain original document ordering for elements with the
> >same @pubYear value, but years will be descending from
> highest value to lowest.
>
> I suspect, Howard, this is all you need:
>
> <library>
> {
> for $each in library/book
> stable order by $each/@pubYear descending
> return $each
> }
> </library>
>
> A running example is below. Note that if your
> implementation-dependent default mode for ordering is unordered or
> you want a portable query across all implementations, then a safe
> portable addition would be to add at the top:
>
> default ordering ordered;
>
> ... and would be required in Brian's solution as well to guarantee a
> correct order across all implementations.
>
> But I'm using Saxon below so I don't have to.
>
> I hope this helps. You shouldn't need to go into
> distinct-values at all.
>
> . . . . . . . Ken
>
> t:\ftemp>type howard.xml
> <library>
> <book pubYear='1942' catid='1' >
> <otherStuff /></book>
> <book pubYear='1942' catid='2' >
> <otherStuff /></book>
> <book pubYear='1942' catid=' 3 ' >
> <otherStuff /></book>
> ...
>
> <book pubYear='2009' catid=' 2011' >
> <otherStuff /></book>
> <book pubYear='2009' catid=' 2012 ' >
> <otherStuff /></book>
> <book pubYear='2009' catid=' 2013 ' >
> <otherStuff /></book>
> </library>
>
> t:\ftemp>xquery howard.xml howard.xq
> <?xml version="1.0" encoding="UTF-8"?>
> <library>
> <book pubYear="2009" catid=" 2011">
> <otherStuff/>
> </book>
> <book pubYear="2009" catid=" 2012 ">
> <otherStuff/>
> </book>
> <book pubYear="2009" catid=" 2013 ">
> <otherStuff/>
> </book>
> <book pubYear="1942" catid="1">
> <otherStuff/>
> </book>
> <book pubYear="1942" catid="2">
> <otherStuff/>
> </book>
> <book pubYear="1942" catid=" 3 ">
> <otherStuff/>
> </book>
> </library>
> t:\ftemp>type howard.xq
> <library>
> {
> for $each in library/book
> stable order by $each/@pubYear descending
> return $each
> }
> </library>
> t:\ftemp>
>
> --
> XQuery/XSLT/XSL-FO training in Los Angeles (New dates!) 2009-06-08
> Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
> Video lesson: http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18
> Video overview: http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18
> G. Ken Holman mailto:gkholman at CraneSoftwrights.com
> Crane Softwrights Ltd. http://www.CraneSoftwrights.com/q/
> Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/q/bc
> Legal business disclaimers: http://www.CraneSoftwrights.com/legal
>
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk
>
More information about the talk
mailing list