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
