我在Protégé造型甜点中创造了一个本体论。有两个主要的基类Dessert和Ingredient以及一个hasIngredient属性来连接它们。甜点的一个例子如下;
NeapolitanIceCream subclass of Dessert
hasIngredient exactly 1 IceCream
hasIngredient exactly 1 wafers
hasIngredient only (IceCream or Wafers)
我有2个原始类SimpleDessert和ComplexDessert
SimpleDessert subclass of Dessert and (hasIngredient max 3 Ingredient)
ComplexDessert subclass of Dessert and (hasIngredient min 5 Ingredient)
SimpleDessert(min)按预期执行,但是当我运行推理器时,ComplexDessert(max)没有子类。我对开放世界原则的理解认为,正好有一个条款和唯一的条款清楚地表明只有这两个可能的成分,数量是明确的。我可能错过了一些明显的东西,但在这里会有任何帮助。
这个公理可能并不意味着你想要的意思:
沙漠的简单甜点子类和(成分最多3成分)
这说“如果有些东西是SimpleDessert,那么它就是甜点,并且最多有三种成分。它没有说”如果某种东西是甜点并且最多有三种成分,那么它就是一个SimpleDessert。“
我想说后者,那么你需要另一个方向的子类公理:
甜点和sqcap; ≤ 3 hasIngredent.Ingredient⊑ SimpleDessert
在Protege中,您可以使用General Axioms选项卡执行此操作。 (有关示例和截图,请参阅my answer到owl protege how can I describe a class that has just some properties?。)