Dear Michael Kay,
this was a quick and excellent reply, which answered all my open questions. Best regards Yoshi OKAMOTO ----- Original Message ----- From: Michael Kay <[email protected]> To: [email protected] Cc: Sent: Monday, January 21, 2013 12:24 PM Subject: Re: [xquery-talk] Conditional use of fn:error() ? For all these queries, implementations have the option whether to evaluate the base expression (error()) before or after evaluating the predicate. If the value of a predicate doesn't depend on the focus, rewriting A[B] as "if (B) then A else ()" is a good thing to do, so many processors will do it. The only reliable way to generate an error conditionally is to use if/then/else (or typeswitch): if (contains('http:...', 'details')) then error() else ... There are specific rules for conditional expressions that prevent optimizers evaluating the then/else branch unless the condition is true/false. Michael Kay Saxonica On 21/01/2013 11:07, Yoshi Okamoto wrote: > Dear list subscribers, > > I noticed that different XQuery processors (BaseX, > Saxon, XMLPrime, Zorba) return different results for the following queries: > > Query A: > fn:error()[false()] > > > Query B: > error(())[contains('http://....', 'details')] > Query C: > let $url := <url>...</url> > where contains($url, 'details') > return error(()) > > > All except for XMLPrime return an empty sequence. > > > Query D: > let $url := <url>...</url> > return error(())[contains($url, 'details')] > > All except for Zorba return an error. > > > My original intention was to raise an error whenever a certain condition is > true. My questions would be: > > - what are the correct results for Query A-D? > > - XMLPrime is the implementation that always raises an error. If this > behavior should be correct, how would I proceed to only raise errors under a > certain condition? > > > Thank you for your attention and patience. > > Best regards > Yoshi OKAMOTO > > _______________________________________________ > [email protected] > http://x-query.com/mailman/listinfo/talk > _______________________________________________ [email protected] http://x-query.com/mailman/listinfo/talk _______________________________________________ [email protected] http://x-query.com/mailman/listinfo/talk
