W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > October to December 2006

Re: operator mapping

From: Eric Prud'hommeaux <eric@w3.org>
Date: Thu, 7 Dec 2006 08:19:50 -0500
To: public-rdf-dawg@w3.org
Message-ID: <20061207131949.GE29063@w3.org>
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.


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))

Note, the mappings for = and != will then reflect those for <=  and >=.

PROPOSED: change the example to use an unknown datatype:

  @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 .

  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 ) }


home-office: +1.617.395.1213 (usually 900-2300 CET)
cell:        +81.90.6533.3882

Feel free to forward this message to any list for any purpose other than
email address distribution.

Received on Thursday, 7 December 2006 13:20:01 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 15:00:52 UTC