我已经被困了两天,现在试图理解为什么以下情况不起作用:
此处截图:http://dl.dropbox.com/u/4677548/screenshots.html
我有一个VegetarianFood类(Food的子类)相当于“Food and(Eggs or MilkAndDerivates或VeganFood)”,你可以在屏幕截图1中看到
反过来,VeganFood课程相当于其他课程(NutsAndSeeds,谷物,水果等......) 截图2
你可以看到有两个人(切达奶酪和腰果)被创造为MilkAndDerivates和NutsAndSeeds 截图3 他们被正确推断为VegetarianFood和VeganFood会员
然后我创建了两个人作为食谱,一个只用腰果(PastaVega)和一个用切达干酪和腰果(PastaVege),使用对象属性hasIngredient 截图4和5
并且它们被推断为食谱......但是没有一个属于VegatarianRecipe和VeganRecipe的类别,定义如下 截图6和7
我没有线索,为什么他们不被推断为VegetarianRecipe(或素食主义者)?我错过了什么?
编辑:
如果我改变了VegetarianRecipe(或素食主义者) “食谱和(只有成分素食食品)”
要 “食谱和(有一些素食食品)”
截屏8
显示收件人,但当然这不是我想做的事情,因为这样它将包括混合肉和素食食谱的食谱。 那么如何定义一个素食和纯素食品类,以便推理员在食谱素食或素食时能够正确推断????
答案 0 :(得分:8)
你已经看到了OWL推理使用开放世界假设的结果。
您的PastaVege
食谱未被推断为VegetarianRecipe
的原因是,尽管您在食谱中明确列出的成分确实是所有VegeratianFood
个实例,但它很可能是一些目前未知的食谱成分不是素食。
由于您对VegetarianRecipe
的约束是所有成分应该是VegetarianFoods(不仅仅是我们目前所知道的那些),因此无法明确地(在开放的世界中)确定您的食谱确实是VegetarianRecipe
。
有很多方法可以解决这个问题,但没有一种方法能够完全符合您的要求 - 您需要从稍微不同的角度来处理它。
没有进入确切的建模细节:虽然根据您当前的模型很难推断配方是否是素食,但推断配方是否不是素食是相对简单的;任何含有至少一种非素食成分的食谱都是非素食食谱。
另一种方法是你创建一组封闭的(素食)成分(通过oneOf
约束使用OWL枚举类),但这是对你的模型的一个重大改变,当然它是乏味的必须以这种方式列出所有可能的成分。