- From: Richard Newman <rnewman@franz.com>
- Date: Mon, 9 Jul 2007 22:37:36 -0700
- To: public-rdf-dawg-comments@w3.org
DAWG, I have a scenario I'd like to present, and an associated suggestion. (Alternatively, please correct whatever misunderstand becomes evident in the following email.) Consider a simple FILTER: FILTER ( ?x != ?y ) Imagine ?x bound to "car"@en-us, and ?y bound to "auto"@en-us, and evaluate the expression. Sec. 11.3 defines != on two RDFterms -- these literals put us into RDFterm territory, as they aren't 'simple' -- as fn:not(RDFterm-equal(A, B)) RDFterm-equal "produces a type error if the arguments are both literal but are not the same RDF term". We know that "Any expression other than logical-or (||) or logical- and (&&) that encounters an error will produce that error.". fn:not satisfies this requirement. So, let's compare these two values. The two arguments are both literal, but are not the same term, so RDFterm-equal produces a type error. fn:not propagates this type error. Finally, the FILTER fails, even though ?x is not intuitively equal to ?y. What we have here is a FILTER that only passes if RDFterm-equal returns precisely "false"^^xsd:boolean. When called with two literals, this is never the case, despite it *not* being true that ?x = ?y. My suggestion is either: * that != is defined in terms of sameTerm (which never returns a type error), not RDFterm-equal, or * that fn:not is replaced by a SPARQL operator that masks SPARQL type errors, treating them as false, but otherwise behaving as fn:not. The current specification defines extremely unintuitive behavior that baffles even experienced users, and should be changed. I look forward to the DAWG's response! Thanks, -R
Received on Tuesday, 10 July 2007 05:37:47 UTC