- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Mon, 11 Dec 2006 11:24:02 +0000
- To: Eric Prud'hommeaux <eric@w3.org>
- CC: public-rdf-dawg@w3.org
Eric Prud'hommeaux wrote: > On Tue, Dec 05, 2006 at 05:06:36PM +0100, Olivier.Corby@sophia.inria.fr wrote: >> A question concerning the mapping between the = operator and the >> appropriate operator function according to the operands. >> >> The table "11.3 Operator Mapping" lists numeric, boolean and dateTime as >> possible operands for which there is an appropriate function for the = >> operator (e.g. op:numeric-equal, etc.). Otherwise, the RDFterm-equal >> function applies. So, according to this formulation, string and plain >> literal operands are processed by the RDFterm-equal function. >> >> But the RDFterm-equal function "produces a type error if the arguments >> are both literal but are not the same RDF term". So comparing non equal >> strings or plain literals would produce a type error, and so would != >> produce a type error which is in contradiction with "11.4.10 >> RDFterm-equal" example. > > True, and I believe this happened because we originally had different > semantics for RDFterm-equal, where it would give a FALSE where it now > gives a type error. At that time, the selection of = overloads was > limited to those functions that could not be considered != simnply > because the lexical form differed. (1.0=1.00, 1=TRUE, > 20061207T07:53+600=20061207T13:53) With our new-fangled closed-world > semantics, we need to have a complete set of the supported literal > types that we can know to be != by differing lexical value. > > PROPOSED: add: > > A = B simple literal simple literal > op:numeric-equal(fn:compare(A, B), 0) > A = B xsd:string xsd:string > op:numeric-equal(fn:compare(STR(A), STR(B)), 0) > A != B simple literal simple literal > fn:not(op:numeric-equal(fn:compare(A, B), 0)) > A != B xsd:string xsd:string > fn:not(op:numeric-equal(fn:compare(STR(A), STR(B)), 0)) RDFterm-equals (11.4.10) is defined as: """ Returns TRUE if term1 and term2 are the same RDF term as defined in Resource Description Framework (RDF): Concepts and Abstract Syntax [CONCEPTS]; produces a type error if the arguments are both literal but are not the same RDF term *; returns FALSE otherwise. term1 and term2 are the same if any of the following is true: """ which is the rules, in order: 1/ True if term1 and term2 are the same RDF term 2/ type error if the arguments are both literal but are not the same RDF term 3/ False otherwise. Read strictly (2) covers the literal cases that (1) does not do (3) is never reached for a pair of literals. (1) applies to same term (2) applies to two literals, not the same term As stated: "abc" = "def" is a type error by rule 2. Shouldn't (2) apply when one or the other datatypes are not in the known datatype list earlier (11.1)? Alternative move up rule 3 and make it apply only when both types are in the 11.1 list. > > Note, the mappings for = and != will then reflect those for <= and >=. > > PROPOSED: change the example to use an unknown datatype: > > DATA: > @prefix a: <http://www.w3.org/2000/10/annotation-ns#> . > @prefix my: <http://example.org/colorStuff#> . > > _:b a:annotates <http://www.w3.org/TR/rdf-sparql-query/> . > _:b my:color "red"^^my:colorName . > > QUERY: > PREFIX a: <http://www.w3.org/2000/10/annotation-ns#> > PREFIX clr: <http://example.org/colorStuff#> > > SELECT ?annotates > WHERE { ?annot a:annotates ?annotates . > ?annot my:color ?color . > FILTER ( ?color = "red"^^my:colorName ) } Undefined "my:" - should my: be clr:? ARQ gets a result of: -------------------------------------------- | annotates | ============================================ | <http://www.w3.org/TR/rdf-sparql-query/> | -------------------------------------------- Could we have an example has both a +ve and -ve aspects? @prefix a: <http://www.w3.org/2000/10/annotation-ns#> . @prefix my: <http://example.org/colorStuff#> . _:b a:annotates <http://www.w3.org/TR/rdf-sparql-query/> . _:b my:color "red"^^my:colorName . _:x a:annotates <http://www.w3.org/TR/rdf-sparql-protocol/> . _:x my:color "dark red"^^my:colorName . Same results. Andy
Received on Monday, 11 December 2006 11:24:22 UTC