The final XPath step '.../dateline' reorders the results into node order, as specified by the W3C. A sequence of constructed nodes has indeterminate node order, so you will see unpredictable results. You can see similar behavior with sequences of attributes, which also have indeterminate node order. I would write '...return $art/dateline' instead.
In passing, there's no need for the 'let-return-for-return' syntax. You can simply write 'let-for-return' and save some typing. -- Mike On 31 Aug 2011, at 11:58 , Jake Trent wrote: > MarkLogic friends, > > When I run this script in CQ, why does the resulting order change every time > I run it?: > > let $articles := > ( <article><dateline>2011-08-21</dateline></article> > , <article><dateline>2011-04-21</dateline></article> > , <article><dateline>2011-02-21</dateline></article> > , <article><dateline>2011-10-03</dateline></article> > , <article><dateline>2011-05-03</dateline></article> > , <article><dateline>2011-04-22</dateline></article> > ) > > return > (for $art in $articles > order by xs:date($art/dateline) descending > return $art)/dateline > > If I remove the parenthesis from around the for clause, and return > $art/dateline, it's consistently ordered correctly: > > <dateline>2011-10-03</dateline> > <dateline>2011-08-21</dateline> > <dateline>2011-05-03</dateline> > <dateline>2011-04-22</dateline> > <dateline>2011-04-21</dateline> > <dateline>2011-02-21</dateline> > > > But if I return the top level element as a supposedly ordered sequence and > then return child elements off it, it seems like the articles aren't in order > at all: > > <dateline>2011-04-21</dateline> > <dateline>2011-08-21</dateline> > <dateline>2011-05-03</dateline> > <dateline>2011-02-21</dateline> > <dateline>2011-10-03</dateline> > <dateline>2011-04-22</dateline> > > Or > > > <dateline>2011-02-21</dateline> > <dateline>2011-05-03</dateline> > <dateline>2011-04-21</dateline> > <dateline>2011-08-21</dateline> > <dateline>2011-04-22</dateline> > <dateline>2011-10-03</dateline> > > Etc. > > I've gotta be missing some basic concept here. This doesn't seem right. > > Thanks for taking a look, > Jake > _______________________________________________ > General mailing list > [email protected] > http://developer.marklogic.com/mailman/listinfo/general _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
