W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > January to March 2005

Re: Value testing: implementing str()

From: Seaborne, Andy <andy.seaborne@hp.com>
Date: Sun, 20 Feb 2005 19:20:32 +0000
Message-ID: <4218E300.3020702@hp.com>
To: Steve Harris <S.W.Harris@ecs.soton.ac.uk>
Cc: 'RDF Data Access Working Group' <public-rdf-dawg@w3.org>

Steve Harris wrote:
> It seems logical. I havent implemented it so dont grok the problems yet,
> but I have a few minor concerns:
> On Sun, Feb 20, 2005 at 02:00:03PM +0000, Andy Seaborne wrote:
>>1/ str(type literal) return lexical form for the typed literals, without 
> Seems reasonable and useful.
>>2/ str(bNode) is an evaluation error
> Is it out of the question to get a string with the same form as a N3 bNode
> back? eg _:a. I'm not sure I'd argue for that, but I think that rejecting
> all solutions which feature str(?x) where ?x binds to a bNode will be
> inconvient and supprising in some cases.

Would the str(bNode) => "" regardless of label be useful?  It avoids
rejecting the solution or requiring a sprinkling of

   isBlank(?x) || str(?x) ...

to change the sense of ?x being a bNode.

Exposing the internal bNode label seems inappropriate (and, as the label has
no meaning except to distinguish bNodes) meaningless.  Otherwise str() and 
isBlank() could be used to find a bNode again :-)

BTW - does it say somewhere that || and && only evaluate the RHS if the LHS
is false/true respectively?

[ Looking in XQuery 1.0 I found:

The following expression may return either false or raise a dynamic error:

1 eq 2 and 3 idiv 0 = 1

>>3/ str(expression) is legal - change the grammar production
> This seems right, but interacts a bit oddly with 1/ in that str(?x) and
> str(?x + 0) are quite different, even when ?x is bound to an integer:
> 	ex:foo rdf:value "001"^^xsd:Integer .
> 	SELECT ?x WHERE (ex:foo rdf:value ?x) AND str(?x+0) != "999"
> Quite possbily not an issue, but ?x and ?x+0 seem similar to me.

Hadn't thought of that.  It's different again if it were 0.0.  There is a 
distiction between value and lexical comparision.

    str(?x+0) => "001"

  	ex:foo rdf:value "001"^^xsd:integer .
  	ex:bar rdf:value "01"^^xsd:integer .

	SELECT ?x ?y
         WHERE (ex:foo rdf:value ?x) (ex:bar rdf:value ?y)
         AND str(?x) ne str(?y)
	AND ?x == ?y
         AND str(?x+0) eq str(?y+0)

>>The only other choice I see is that str() only apply (syntactically) to a 
>>variable but is we have value-based constraints, this is a rather odd.
> Yes, that seems odd.
> - Steve

Received on Sunday, 20 February 2005 19:26:07 UTC

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