[SWC] bNode modelling: was Re: RDF and OWL compatibility

[Message header changed to conform so here's a recap on the thread ...

I was asking for a test case to illustrate why naive skolemization 
wasn't enough to model RDF bNodes in rule conclusions.

Enrico pointed to
<http://www.w3.org/2005/rules/wg/wiki/Managing_incomplete_information> 
section 9.4 as such a test case. The salient rule there being:

       kb:works-with(Z,X) :- rdf:type(X,db:employee).

where Z is meant to be existentially quantified.

I asked why naive Skolemensation wasn't enough in that case, 
transforming the rule to introduce a skolem function for each head bNode:

       kb:works-with(Z,X) :- rdf:type(X,db:employee), gensym(X, Z).

which was too sloppy and it was pointed out that I should have used the 
notation _#  to convey what I meant:

       kb:works-with(_#(X),X) :- rdf:type(X,db:employee).
]

Michael Kifer wrote:

> Yes, Enrico,
> Skolemization is not the same as an existential in your use case above, and
> using it **naively** will be wrong.
> 
> However, one can **model** the situation differently and obtain essentially
> the same result as far as the user goals are concerned. For instance,
> referring to
> 
>     http://www.w3.org/2005/rules/wg/wiki/Managing_incomplete_information
> 
> one could represent the fact that any traveller has a home address as follows:
> 
> traveller(enrico).
> traveller(michael).
> has_known_address(enrico,bolzano).
> 
> has_address(?Person,?Addr) :- has_known_address(?Person,?Addr).
> has_address(?Person,_#(?Person)) :-
> 	    traveller(?Person),
> 	    not exists ?A has_known_address(?Person,?A).
> 
> Here _# denotes a new Skolem function (in the notation of FLORA-2, WSML,
> and SWSL languages). The above rules are supported (perhaps using different
> notations) by a number of existing systems, like FLORA-2 and XSB, and by
> proposed languages like WSML-Rules and SWSL-Rules.
> 
> So, here we will infer
> 
>     has_address(enrico, bolzano)
>     has_address(michael, $@!2543(michael))

So apart from the skolem function itself, the other thing you are doing 
is only introducing the skolem function when there isn't a known 
address. I can see why you would do that. However, in terms of obtaining 
the "same result as far as the user goals are concerned" then if the 
user is processing RDF is this necessary?

If one used the naive modelling:

   traveller(enrico).
   traveller(michael).
   has_address(enrico,bolzano).

   has_address(?Person, bNode(_#(?Person))) :- traveller(?Person).

Then the set of RDF triples we would infer would be:

    :enrico  :has_address  :bolzano .
    :enrico  :has_address  _:1 .
    :michael :has_address  _:2 .

but by RDF semantics that graph and the lean graph:

    :enrico  :has_address  :bolzano .
    :michael :has_address  _:3 .

simply-entail each other. So in terms of a user processing RDF is such 
modelling adequate? Presumably not, but it passes the tests in the wiki 
page. What would be an example test which shows why it is not adequate, 
from the point of view of a person processing RDF?

Dave

Received on Wednesday, 11 January 2006 22:31:35 UTC