我已经被困两天了,现在试图理解为什么以下场景不起作用:
截图在这里:http://dl.dropbox.com/u/4677548/screenshots.html
我有一个 VegetarianFood 类(Food 的子类),它相当于“Food and (Eggs or MilkAndDerivates or VeganFood)”,正如你在截图 1 中看到的那样
VeganFood 类又相当于其他类(NutsAndSeeds、Cereals、Fruit 等...)
截图 2
如您所见,有两个个体(切达干酪和腰果)被创建为 MilkAndDerivates 和 NutsAndSeeds
截图 3
他们被正确推断为 VegetarianFood 和 VeganFood 成员
然后我创建了两个人作为食谱,一个只用腰果(PastaVega),另一个用切达干酪和腰果(PastaVege),使用对象属性 hasIngredient
截图 4 和 5
并且它们被推断为 Recipe...但没有一个属于 VegatarianRecipe 和 VeganRecipe 的类别,定义如下
截图 6 和 7
我没有任何线索,为什么它们不被推断为 VegetarianRecipe(或素食主义者)?我错过了什么?
编辑:
如果我将 VegetarianRecipe(或素食主义者)从
“食谱和(仅含素食)”
到
“食谱和(有成分一些素食)”
截图 8
接收个人被展示,但当然这不是我想要做的,因为这样它将包括混合肉类和素食的食谱。
那么如何定义一个vegetarianrecipe 和veganrecipe 类来允许推理者正确地推断出一个菜谱是素食者还是素食者????
最佳答案
您已经发现 OWL 推理使用开放世界假设这一事实的结果。
你的原因PastaVege
配方未被推断为 VegetarianRecipe
就是这样,虽然你在食谱中明确列出的成分确实都是VegeratianFood
例如,您的食谱中某些目前未知的成分很可能不是素食。
由于您对 VegetarianRecipe
的限制是所有成分都应该是素食食品(不仅仅是我们目前知道的那些),不能明确地得出结论(在开放世界中)您的食谱确实是 VegetarianRecipe
.
有很多方法可以解决这个问题,但没有一种方法能真正做到你想要的——你需要从稍微不同的角度来处理它。
无需深入了解确切的建模细节:尽管根据您当前的模型很难推断出某个食谱是否为素食主义者,但推断一个食谱是否为素食者相对简单;任何含有至少一种非素食成分的食谱都是非素食食谱。
另一种方法是您创建一组封闭的(素食)成分(通过 oneOf
约束使用 OWL 枚举类),但这对您的模型来说是一个重大变化,当然,必须列出所有这种方式的可能成分。
关于rdf - 猫头鹰 - 门徒没有正确推断?如何精确定义一个类 "vegetarian"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10366754/