On 20/06/11 14:45, David Sewell wrote: > On Fri, 17 Jun 2011, G. Ken Holman wrote: > >> At 2011-06-17 17:58 +0000, Will Thompson wrote: >> xs:boolean does a cast of the argument. The first bullet of the >> documentation cites what is returned when the argument is an empty set: >> >> http://www.w3.org/TR/2007/REC-xpath-functions-20070123/#func-boolean > > So per specs, xs:boolean(()) should return "false" as a boolean.
You're confusing the cast function xs:boolean() with the built in function fn:boolean(). The link above gives the behaviour for fn:boolean(). The cast function xs:boolean() is the same as writing: () cast as xs:boolean? Which results in the empty sequence. > However, that's not the behavior in MarkLogic. Version "0.9-ml" throws > an error, "Invalid cast". Versions 1.0 and 1.0-ml return empty sequence. > (For what it's worth, Saxon 9.3 returns empty sequence as well.) > > In most cases, having a return value of empty sequence versus boolean > false probably won't affect expected results, but there are differences. > For example, Marklogic evaluates > > empty(false()) ==> false > empty(xs:boolean(())) ==> true > > whereas the XPath specs suggest both should return "false"? No. The fn:empty() function simply returns true if it's argument is the empty sequence(). Since fn:false() returns a single boolean value, fn:empty() returns false (it's not the empty sequence). However, xs:boolean(()) returns the empty sequence, so fn:empty() returns true. John -- John Snelson, Senior Engineer http://twitter.com/jpcs MarkLogic Corporation http://www.marklogic.com _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
