W3C home > Mailing lists > Public > semantic-web@w3.org > August 2019

Re: [External] Re: The Joy of NULLs (not)

From: Franconi Enrico <franconi@inf.unibz.it>
Date: Tue, 13 Aug 2019 07:53:48 +0000
To: Diogo FC Patrao <djogopatrao@gmail.com>
CC: "Young,Jeff (OR)" <jyoung@oclc.org>, Daniel Hernandez <daniel@degu.cl>, "semantic-web@w3.org" <semantic-web@w3.org>
Message-ID: <2AC77059-8B2A-4FE1-B566-699049C086D8@inf.unibz.it>
The situation is slightly more complex than that.
NULL values in standard SQL are exactly defined as letting any equality involving a NULL value fail.
Note that the string 'NULL' represents a NULL value, namely if you type the string NULL into a cell of type STRING then it is understood to be a NULL value.
This is where the implementors failed: a NULL value is never equal to itself.
This can be understood with the following standard SQL example (try it!).

With the database:

TABLE: col1 | col2
         a  |  b
         b  | NULL

the query (meant to be the identity query, namely returning the input table itself):

WHERE TABLE.col1 = TABLE.col1 AND TABLE.col2 = TABLE.col2 ;

gives the result:

col1 | col2
  a  |  b

In SQL, the query above returns the table TABLE if and only if the table TABLE does not have any NULL value, otherwise it returns just the tuples not containing a NULL value, i.e., in this case only the first tuple <a,b>. Informally this is due to the fact that a SQL NULL value is never equal (or not equal) to anything, including itself. This is because a SQL NULL value represents the absence of a value.

Note that this is where SQL NULL values are radically different from RDF bnodes. Indeed a bnode is EQUAL to itself but different from any other bnode. This is because a RDF bnode represents the existence of an unknown value.


Il giorno 12 ago 2019, alle ore 16:41, Diogo FC Patrao <djogopatrao@gmail.com<mailto:djogopatrao@gmail.com>> ha scritto:

Vanity license plates in USA are strings, right? Then this problem would only happen if NULL='NULL', which is not.

It could be that the private company stored 'NULL' instead of NULL to the unassigned tickets, but that's really bad coding/design (and easy to fix, I guess).

Or maybe the DAO wrongly translate NULL to 'NULL' at some point.



diogo patrão

On Mon, Aug 12, 2019 at 11:11 AM Young,Jeff (OR) <jyoung@oclc.org<mailto:jyoung@oclc.org>> wrote:
Here’s an example showing blank nodes being used to declare the place of birth is unknown in Wikidata:


In the UI, it is rendered like this:



From: Daniel Hernandez <daniel@degu.cl<mailto:daniel@degu.cl>>
Date: Monday, August 12, 2019 at 9:42 AM
To: "semantic-web@w3.org<mailto:semantic-web@w3.org>" <semantic-web@w3.org<mailto:semantic-web@w3.org>>
Subject: [External] Re: The Joy of NULLs (not)
Resent-From: <semantic-web@w3.org<mailto:semantic-web@w3.org>>
Resent-Date: Monday, August 12, 2019 at 9:37 AM

As Enrico pointed, blank nodes can be used to represent unknown values.
An example of this use is Wikidata. I don't know another example.


On Mon, 12 Aug 2019 07:36:41 +0000
Franconi Enrico <franconi@inf.unibz.it<mailto:franconi@inf.unibz.it>> wrote:

> Mike, this could easily happen in an RDF world if you register a
> vanity licence plate with anything starting with "_". Indeed, bnodes
> would be the right way to represent unknown but existing plates. --e.
> Il giorno 11 ago 2019, alle ore 23:10, Michael F Uschold
> <uschold@gmail.com<mailto:uschold@gmail.com><mailto:uschold@gmail.com<mailto:uschold@gmail.com>>> ha scritto:
>> This is hilarious. It could never happen in an RDF world! No value,
>> no triple.
>> He tried to prank the DMV. Then his vanity license plate backfired
>> big time.
>> https://mashable.com/article/dmv-vanity-license-plate-def-con-backfire/<http://flip.it/NIk7FD>

Received on Tuesday, 13 August 2019 07:54:17 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 13 August 2019 07:54:18 UTC