On Thu, 2011-01-13 at 11:40 -0800, Kent wrote: 
> I am using the Jena semantic web framework version 2.6.3.  I have code
> that creates a model with owl inferencing and then adds the following
> triples:
> 
>     _:bnode-3 rdf:type            owl:Restriction .
>     
>     _:bnode-3 owl:onProperty      :offspringOf .
>     
>     _:bnode-3 owl:someValuesFrom  :Person .
>     
>     _:bnode-3 rdfs:subClassOf     :Person .
> 
> `_:bnode-3` is supposed to be a restriction class which, for example,
> would contain `:joe` if `:bob` is a `:Person` and the following triple
> were asserted:
> 
>     :joe :offspringOf :bob . 
> 
> Then, since the restriction class is a subclass of Person, `:joe` would
> also be a person.
> 
> And, in fact, this works.  What's confusing to me is that after I assert
> just the 4 triples at the top of this post, the inferencer creates a
> blank node which is a Person.  In other words, the following triple is
> now in the model:
> 
>     _:b0 rdf:type :Person
> 
> I don't understand why it would do this.  Any help in understanding this
> would be greatly appreciated.

Essentially it is part of the internal machinery leaking through.

If you use the Micro or Mini reasoners, normally the preferred choices
these days, then this won't happen.

The rule reasoners primarily do abox reasoning (by which I mean
reasoning over instances) however the full reasoner tries to extend this
to also infer additional class relationships. It does this by creating
internal "prototypical" instances of each class. So if we create an
instance of :A and find a contradiction we know :A is unsatisfiable.
Similarly if create an instance of :A and can deduce it is also an
instance of :B then we know :A is a subclass of :B.

These prototypical instances were originally intended to be hidden or
cleaned up (via the "posits" machinery) but the cost of doing that
proved a problem. For satisfiable classes asserting the prototype is not
adding any information and does no harm. For unsatisfiable classes it is
dubious to leave such things around once you know the class is
unsatisfiable but up till now no one has noticed that problem :), maybe
because that tends to only occur during validation.

The Micro/Mini reasoners forgo these expensive attempts to get a few
more deductions out of essentially an abox reasoner which makes them
cleaner and faster, as well as weaker.

Dave


Reply via email to