- From: Geoff Chappell <geoff@sover.net>
- Date: Tue, 29 Mar 2005 16:15:16 -0500
- To: <public-rdf-dawg-comments@w3.org>
The test: http://www.w3.org/2001/sw/DataAccess/tests/#test-boolean-effective-value-opt ional implies that the boolean effective value of an unknown datatype is false (by not including #x3 in the results). The next test: http://www.w3.org/2001/sw/DataAccess/tests/#test-boolean-effective-value-unk nown-types implies that boolean effective value of an unknown datatype is true (by not including #x3 in the results) Which is correct? Similarly, the first test implies that the boolean effective value of an unbound variable is either false or a non-match (i.e. solution is discarded) while the second test implies that it is either true or a non-match. So it appears that it is meant to be a non-match. Is that correct? If so, I'll just relate that I've found that in order to produce expected results in all situations, I've had to take the approach that a constraint function always succeeds but signals an error (e.g. invalid parameter) by returning a distinguished value and the boolean effective value of that distinguished value is false. For example if the filter clause of: SELECT ?title ?price WHERE { ?book dc:title ?title . OPTIONAL { ?book x:price ?price } . FILTER ( ! bound(?price) ) || ( ?price < 15 ) . } is understood to mean: sop:logical-or( fn:not(sop:bound(?price)), op:numeric-less-than(?price, 15))) If an unbound value of price causes op:numeric-less-than to fail (as in discard the solution as opposed to returning a value of false), then the solution is tossed despite the fact that the sop:logical-or would return true given the chance (since the other leg is true). Now if sop:logical-or behaved logically (i.e. passed the solution when true, failed it when false) this wouldn't be a problem, but it doesn't behave that way - e.g. the ebv of: sop:str(sop:logical-or(false, false)) is true. I'm not sure if this is an implementation difficulty or a spec difficulty (I know it's at least a difficulty with implementing the spec on a logic platform). My guess is, though, that it is a general problem due to the slightly differing models between constraints and the rest of the language. So just to reiterate, the solution I found was to make the Boolean effective value of an unbound variable to be false. Geoff
Received on Tuesday, 29 March 2005 21:15:34 UTC