- From: Steve Harris <S.W.Harris@ecs.soton.ac.uk>
- Date: Wed, 22 Dec 2004 18:22:46 +0000
- To: RDF Data Access Working Group <public-rdf-dawg@w3.org>
On Wed, Dec 22, 2004 at 05:26:01PM +0000, Andy Seaborne wrote:
> >Yes, but SQL for eg. has tri-value logic (true, false and NULL), so you
> >can meaningfully apply operators and functions to unbound values (NULL).
>
> It doesn't quite work out that simply. It's fine for operators and
> functions but pattern matching isn't so straight forward.
>
> OPTIONAL (<x> ?p ?o)
> (?o ?q <y>)
>
> so ?o may be NULL then we have the (?o ?q <y>) and it needs to handle
> ?o = NULL differently. NULL is different.
Yes, bun in RDF you cant have a triple like (NULL ?q <y>), so that match
will always fail. Unless I'm missing something.
> Talking about NULLs, with all it special cases for matching and function
> handling, like NULL != NULL, is no different to talking about unbound
> variables. Both need special handling.
There are no special cases. Any arithemtic operation involving NULL is
NULL, so NULL == NULL is NULL, NULL > 3 is NULL, ...
> >I have said a few times that DAWG I think should come down off the fence
> >about tri-value logic.
>
> Do you have a test case where it makes a difference? I have difficulty
> seeing this as other than a difference of linguistic approach, trying to
> use the same language for matching and for operators.
Yes,
SELECT ?foo
WHERE [ (?foo :p ?x) ] [ (?foo :q ?y) ]
AND ?x != ?y
In a tri-value logic, this will only succeeed if ?x and ?y are bound, I
think.
> It seems to me that we have to say what happens with op:numeric-less-than
> encounters anything unexpected through the casting rules of F&O extended
> for bNodes anyway.
Yes, but what. The Perl/PHP/ECMAScript convention is that
?x is unbound, ?y = 3
?x != ?y is true
?x > 3 is false (for various reasons)
In SQL they are both NULL, again, I think, My SQL is rusty. e.g:
$y = 3;
if ($x != $y) { print "true\n"; } else { print "false\n"; }
if ($x > 3) { print "true\n"; } else { print "false\n"; }
prints
true
false
In PHP and Perl.
In Perl $x > -1 is true (unbound = 0, I guess), in PHP its false.
- Steve
Received on Wednesday, 22 December 2004 18:22:52 UTC