0

I am creating an ontology in Protégé modelling desserts. There are two main base classes Dessert and Ingredient and a hasIngredient property to connect them. An example of a dessert looks as follows;

NeapolitanIceCream subclass of Dessert
    hasIngredient exactly 1 IceCream
    hasIngredient exactly 1 wafers
    hasIngredient only (IceCream or Wafers)

And I have 2 primitive classes SimpleDessert and ComplexDessert

SimpleDessert subclass of Dessert and (hasIngredient max 3 Ingredient)

ComplexDessert subclass of Dessert and (hasIngredient min 5 Ingredient)

SimpleDessert(min) performs as expected but ComplexDessert(max) has no subclasses when I run the reasoner. My understanding of the Open World Principle thought that the exactly 1 clauses and the only clause make it clear that there are only these two possible ingredients and the quantity is clear. I'm probably missing something obvious but would love any help here.

Joshua Taylor
  • 84,998
  • 9
  • 154
  • 353
  • 1
    It is because of the Open World Assumption - the absence of information doesn't mean it's negation holds – UninformedUser Apr 23 '18 at 09:47
  • @AKSW As written, I don't think this problem really comes down to OWA. As I read the question, it's asking why something that has exactly two ingredients isn't classified as a SimpleDessert. But the reason that the classification isn't happening is that the subclass axioms for SimpleDessert and ComplexDessert are backwards; they say "if X, then these conditions hold", but ought to be "if these conditions hold, then X". – Joshua Taylor Apr 23 '18 at 12:18
  • @Paul in *"SimpleDessert(min) performs as expected but ComplexDessert(max) has no subclasses when I run the reasoner,"* the "min" and "max" look swapped; is that right? The SimpleDessert is the one with the maximum number of ingredients, and the ComplexDessert with the minimum... – Joshua Taylor Apr 23 '18 at 12:20
  • @JoshuaTaylor if you change from `max` to `min` ok, then OWA doesn't make problems - **but** don't forget that OWL has no UNA, thus, individuals have to be declared distinct from each other explicitly, otherwise a reasoner won't work here as well – UninformedUser Apr 24 '18 at 08:20

1 Answers1

3

This axiom may not mean what you want it to mean:

SimpleDessert subclass of Dessert and (hasIngredient max 3 Ingredient)

This says that "if something is a SimpleDessert, then it is a Dessert and has at most three ingredients. It does not say that "if something is a Dessert and has at most three ingredients, then it is a SimpleDessert."

I you want to say the latter, then you need the subclass axiom in the other direction:

        Dessert ⊓ ≤3 hasIngredent.Ingredient ⊑ SimpleDessert

In Protege, you do that using the General Axioms tab. (See my answer to owl protege how can I describe a class that has just some properties? for an example and screenshots.)

Joshua Taylor
  • 84,998
  • 9
  • 154
  • 353