[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