Re: bnodeification (rdfSemantics)

On Thu, 2006-01-12 at 11:07 -0500, Souripriya Das wrote:
> Enrico, Sergio,
> 
> I have two basic questions. If you could explain very clearly (in a 
> tutorial kind of manner), if possible, it will be very helpful.

I think I'll give it a try, though
these questions are about terminology that is somewhat ad-hoc,
so I can't be sure my answers are correct...

>  Also, 
> any specific pointers relevant to these questions.
> 
> 1) What are 'implicit existentials' and how OWL-Lite has it, but RDFS 
> does not? [Ref: Enrico's e-mail: 
> http://lists.w3.org/Archives/Public/public-rdf-dawg/2006JanMar/0080.html]

Consider "every person has 2 arms":

  :Person
    rdfs:subClassOf [ owl:onProperty :arm; owl:cardinality 2 ].
  :bob a :Person.

the semantics of OWL allow us to conclude that bob has 2 arms,
even though we never mentioned them before:

  :bob :arm _:arm1, _:arm2.
  _:arm1 owl:differentFrom _:arm2.

_:arm1 and _:arm2 are 'implicit existentials', if I understand
correctly.

There are no constructs like that in RDFS. You never get bnodes
in the conclusion that weren't in the premise.

> 2) You are using SPARQL blank nodes to specify existential variables. a) 
> What are the conceptual similarities (and any differences) between 
> SPARQL blank nodes (existential variables) and RDF blank nodes?

Existential variables are pretty much the same in both cases, but
in SPARQL, you can put them in the "if" part of a formula,
which basically turns them into a universal variable; RDF has
no "if" construct.

Consider "if anybody has a wife, then they're married".

That's the same as "everyone who has a wife is married".

In SPARQL:

CONSTRUCT { ?who a :Married }
  WHERE { ?who wife _:somebody }.

is the same as:

CONSTRUCT { ?who a :Married }
  WHERE { ?who wife ?anybody }.



>  b) What 
> are the differences between distinguished variables and existential 
> variables? [Ref. Sergio's e-mail: 
> http://lists.w3.org/Archives/Public/public-rdf-dawg/2006JanMar/0081.html]

Distinguished variables are the ones that are, or can be,
bound in the results of queries.

You can't do

 SELECT _:somebody WHERE { _:somebody a :Married }.

you have to do

 SELECT ?who WHERE { ?who a :Married }.

There isn't any deep semantic reason for this; it's just not necessary
to allow bnodes to be SELECTed, so we don't.

The more deep semantic issue in Sergio's message is, I think, that
SPARQL, unlike most KR query languages before it, allows bnodes
for answer value/expressions.

There's a sense in which this is not very helpful, even though
it's correct:
  Q: Who's the president of the U.S.?
  A: somebody.

Many KR systems just don't do that.

Considering bob and his two arms as above, if you ask:

 SELECT ?arm WHERE { :bob :arm ?arm }

and you include the inferred triples in the input data set,
the answer given by some SPARQL services has two results,
each of which binds ?arm to a bnode:

  ?arm = _:arm1
  ?arm = _:arm2

This rdfSemantics issue is largely about whether those
services are doing The Right Thing.


> Thanks,
> - Souri.

-- 
Dan Connolly, W3C http://www.w3.org/People/Connolly/
D3C2 887B 0F92 6005 C541  0875 0F91 96DE 6E52 C29E

Received on Thursday, 12 January 2006 21:51:16 UTC