David, You triggered some nice discussion on xquery-talk.. ;-)
Kind regards, Geert > Drs. G.P.H. Josten Consultant http://www.daidalos.nl/ Daidalos BV Source of Innovation Hoekeindsehof 1-4 2665 JZ Bleiswijk Tel.: +31 (0) 10 850 1200 Fax: +31 (0) 10 850 1199 http://www.daidalos.nl/ KvK 27164984 De informatie - verzonden in of met dit emailbericht - is afkomstig van Daidalos BV en is uitsluitend bestemd voor de geadresseerde. Indien u dit bericht onbedoeld hebt ontvangen, verzoeken wij u het te verwijderen. Aan dit bericht kunnen geen rechten worden ontleend. > From: [email protected] > [mailto:[email protected]] On Behalf Of > David Sewell > Sent: vrijdag 27 maart 2009 4:16 > To: General Mark Logic Developer Discussion > Subject: Re: [MarkLogic Dev General] issue with XPATH > > I agree with Florent that it appears to be a MarkLogic bug. > > A self-contained test case follows, using an XML node > variable rather than a call to fn:doc(). The first four > return values should contain both p2 and p4. Only the fifth > one should contain p2 alone. Under MarkLogic, the first two > return only p2. > > For what it's worth, Saxon 9.1 returns the expected results, > eXist does not (but differs from MarkLogic in that set2 and > set4 contain only p2). > > If Florent and I (and Michael Kay!) are wrong about this, I'd > sure like to know why. > > let $xml := > <root> > <div> > <p>p1</p> > <p>p2</p> > </div> > <div> > <p>p3</p> > <p>p4</p> > </div> > </root> > > return ( > (: set1 - return all p's with position() = 2. Expected > result: (p2, p4). :) > > <set1>{ $xml/descendant-or-self::node()/p[position() eq 2] > }</set1>, > > (: set2 - XPath abbreviation // is equivalent to > /descendant-or-self::node()/ > by definition. Result should still be (p2, p4) :) > > <set2>{ $xml//p[position() eq 2] }</set2>, > > (: set3 - XPath predicate [2] is equivalent to [position() > eq 2]. Results > should be identical to set1/set2 :) > > <set3>{ $xml/descendant-or-self::node()/p[2] }</set3>, > > (: set4 - final syntax variation with full abbreviation. > Results should > still be identical to set1/set2/set3 :) > > <set4>{ $xml//p[2] }</set4>, > > (:set5 - This is the only one that should return a single node, p2. > The XPath should return the second instance of all <p> > descendants > of $xml. :) > <set5>{ $xml/descendant::p[2] }</set5> > ) > > > > On Thu, 26 Mar 2009, Florent Georges wrote: > > > > > Geert Josten wrote: > > > >> Though I was surprised, I now think MarkLogic Server is responding > >> correctly. > > > > Sounds like a bug to me. If you look at the definition of > a numeric > > predicate (http://www.w3.org/TR/xpath20/#id-predicates, > point 1.) you > > see that [1] is defined as [position() eq 1]. And in this > expression, > > using = and eq is the same. > > > > Regards, > > > > > > -- > David Sewell, Editorial and Technical Manager ROTUNDA, The > University of Virginia Press PO Box 801079, Charlottesville, > VA 22904-4318 USA > Courier: 310 Old Ivy Way, Suite 302, Charlottesville VA 22903 > Email: [email protected] Tel: +1 434 924 9973 > Web: http://rotunda.upress.virginia.edu/ > _______________________________________________ > General mailing list > [email protected] > http://xqzone.com/mailman/listinfo/general > _______________________________________________ General mailing list [email protected] http://xqzone.com/mailman/listinfo/general
