- 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