5

我已经被困了两天,试图理解为什么以下场景不起作用:

截图在这里:http ://dl.dropbox.com/u/4677548/screenshots.html

我有一个 VegetarianFood 类(食物的子类),它等同于“食物和(鸡蛋或 MilkAndDerivates 或 VeganFood)”,如您在屏幕截图 1 中所见

VeganFood 类,反过来,相当于其他类(NutsAndSeeds、Cereals、Fruit 等) screenshot 2

如您所见,有两个人(切达奶酪和腰果)被创建为 MilkAndDerivates 和 NutsAndSeeds screenshot 3,他们被正确推断为 VegetarianFood 和 VeganFood 成员

然后,我使用对象属性 hasIngredient 截图 4 和 5 创建了两个个体作为食谱,一个仅使用腰果 (PastaVega),另一个使用切达干酪和腰果 (PastaVege)

并且它们被推断为Recipe...但没有一个属于VegatarianRecipe和VeganRecipe的类别,定义如下截图6和7

我没有线索,为什么他们没有被推断为 VegetarianRecipe(或素食主义者)?我错过了什么?

编辑:

如果我将 VegetarianRecipe(或素食主义者)从“Recipe and (hasIngredient ONLY VegetarianFood)”更改

到“食谱和(有一些素食)”

截图 8

显示了个人的收据,但这当然不是我想要做的,因为这样它将包括混合肉类和素食的食谱。那么如何定义一个vegetarianrecipe 和veganrecipe 类以允许推理者正确推断出一个食谱是素食还是纯素食????

4

1 回答 1

8

您已经发现了 OWL 推理使用开放世界假设这一事实的结果。

您的PastaVege食谱未被推断为 a的原因VegetarianRecipe是,尽管您在食谱中明确列出的成分确实都是VegeratianFood实例,但很可能您的食谱中某些当前未知的成分不是素食。

由于您的限制VegetarianRecipe所有成分都应该是 VegetarianFoods(不仅仅是我们目前知道的那些),因此无法明确得出(在开放世界中)您的食谱确实是VegetarianRecipe.

有很多方法可以解决这个问题,但没有一种方法能真正做到你想要的——你需要从稍微不同的角度来处理它。

无需深入了解确切的建模细节:虽然根据您当前的模型很难推断出一个食谱是否是素食主义者,但推断出一个食谱是否不是素食主义者则相对简单;任何含有至少一种非素食成分的食谱都是非素食食谱。

另一种方法是您创建一组封闭的(素食)成分(通过oneOf约束使用 OWL 枚举类),但这对您的模型来说是一个重大变化,当然必须在其中列出所有可能的成分是很乏味的这种时尚。

于 2012-04-30T02:02:39.567 回答