1
votes

I have an ontology with two main classes (code and subject) and one object property (subject obtained code) where:

  • Code(class) contains all available codes(instances)
  • Code's(class) subclasses categorise these codes(instances); manually specified
  • Subject(class) contains all available subjects(instances)
  • Each subject(instance) has asserted(property obtained) some codes(instances)
  • Subject's(class) subclasses define the sets of subjects(instances) according to the associated codes(instances) and codes' code category allegiance
  • Reasoner is about to infer assertions of subject instances to particular groups (subject's subclasses)

When I start a reasoner within Protege, inferred instances are asserted to the deepest subject subclass that the instance still meets the constraints (see attached Figure). But if I export inferred axioms into separate ontology, every subject subclass contains all instances of itself + its descendants (obviously, same behaviour is observed using JAVA OWL API).

My question is: Why the results are different? I understand the logic of both cases but I don't understand why they are different. Is there any way to export the inferences as they are shown in Protege? And if there is no direct way, may I force Hermit (or other reasoner) somehow from OWL API to show me exactly the same "yellow protege" results? So far, I've found only one workaround - to export inferences as they are and then ask for differences via SPARQL.

I'm using Protege 5.0.0, Reasoner Hermit 1.3.8 and OWL API 5.0.5 (although same results were obtained for different reasoners: Fact++, Pellet; and different OWL API and Protege versions: 4.x)

I'll be very glad for any comments, even a simple explanation will help me a lot.

1

1 Answers

0
votes

The exported axioms depend on the set of inferred axiom generators used - Protege might be using a different set from the one you've chosen.

The set of generators is configurable in a panel; its initialisation looks like this:

    addCheckBox(new InferredSubClassAxiomGenerator(), true, false);
    addCheckBox(new InferredEquivalentClassAxiomGenerator(), true, false);
    addCheckBox(new InferredSubObjectPropertyAxiomGenerator(), true, false);
    addCheckBox(new InferredSubDataPropertyAxiomGenerator(), true, false);
    addCheckBox(new InferredEquivalentObjectPropertyAxiomGenerator(), true, false);
    addCheckBox(new InferredEquivalentDataPropertiesAxiomGenerator(), true, false);
    addCheckBox(new InferredObjectPropertyCharacteristicAxiomGenerator(), false, false);
    addCheckBox(new InferredDataPropertyCharacteristicAxiomGenerator(), false, false);
    addCheckBox(new InferredInverseObjectPropertiesAxiomGenerator(), false, false);
    addCheckBox(new InferredClassAssertionAxiomGenerator(), false, false);
    addCheckBox(new InferredPropertyAssertionGenerator(), false, true);
    addCheckBox(new InferredDisjointClassesAxiomGenerator(), false, true);

I'm going to guess the selected ones by default are the ones marked with true.