Re: Stack of two towers

Henry Story wrote, quoting "Semantic Web Architecture: Stack of two 
Towers?":
> Given an ontology containing only a single RDF triple:
>     <#pat> <#knows> <#joe>
> the answer to a query asking if pat knows exactly one person would be  
> “no” under RDF’s open world semantics, but “yes” under the closed world
 > semantics of Datalog.

I haven't thought about this too much, but open vs. closed might be too 
strict a distinction.  For the above triple, there are more than two 
ways to interpret it in terms of open/closed:
   <pat knows joe> and nothing else can be concluded. (open)
   The only fact in the universe is <pat knows joe>. (really closed)
   The only x satisfying <pat knows x> is joe, but joe is known by
      other people. (closed w.r.t. object)
   The only x satisfying <pat x joe> is knows. (closed w.r.t. pred)
   The only x satisfying <x knows joe> is joe. (closed w.r.t. subj)
   The only <x,y> satisfying <pat x y> is <knows, joe>.
   And so on.

But, this is a property of documents, not statements.  Going from 
yesterday's example:

sr39 dc:title "S. Res. 39: A resolution apologizing to the victims of 
lynching and the descendants of those..." .
sr39 bill:cosponsor Spector , Corzine , Sarbanes .
...

This document gives all of the cosponsors, in a closed sense, but it 
would be wrong to say that the RDF document is closed even w.r.t the 
objects, because sr39 might have other dc:titles.

Henry's named graph approach would work if the document is divided into 
two parts:

sr39 dc:title "S. Res. 39: A resolution apologizing to the victims of 
lynching and the descendants of those..." .

{ ?bill bill:cosponsor Spector , Corzine, Sarbanes }
     rdf:type ex:ClosedUnderObject .

ex:ClosedUnderObject would apply to a named graph the statements of 
which all have the same subject and predicate, and it indicates that all 
objects are listed.

But I think a more flexible approach would be to describe exactly what 
is closed about the document.  So in addition to the original triples 
without named graphs, add this:

<> ex:closedUnder { { sr39 bill:cosponsor ?x } log:forAll ?x } .

Indicating any triple that matches <sr39 bill:cosponsor ?x> is going to 
be in that document, if the triple is true.

That breaks down to:

{
    { sr39 bill:cosponsor ?x  }
       log:implies
    { <> log:includes { sr39 bill:cosponsor ?x } }
} log:forAll ?x .

Although this one is a bit complicated to deal with.

-- 
- Joshua Tauberer

http://taubz.for.net

** Nothing Unreal Exists **

Received on Thursday, 16 June 2005 11:34:11 UTC