我想进行推断,例如该图中用灰色虚线表示的属性:
我断言了一个公理:
(hasTaste some Bitter) SubClassOf: goesWellWith some (hasTaste some Sweet)
其中“苦味”是苦味类型,“甜味”是甜味类型。
我认为owl:someValuesFrom(或曼彻斯特的“ some”)表示必须存在至少一个这样的关系。但是,在做出粗体图断言和一般公理之后,这不会发生。
我该如何做?
编辑(编辑2,我知道了)
我只是想到了一条超级财产链!我只是指定
hasTaste o complements o isTasteOf
作为goWellWith的超级属性链。实际上,通过制作hasTaste,hasTexture等...常规 hasTrait 的所有子属性,然后可以分别用hasTrait和isTraitOf替换hasTaste和isTasteOf:
hasTrait o complements o isTraitOf
结果捕获了彼此互补的食物特性的每一个排列。
答案 0 :(得分:2)
在回答您的问题时,我将(1)解释您的方法失败的原因,以及(2)提供可能的解决方案。
您的方法为何失败
一般人只能根据命名类而不是匿名类提供有关推理的反馈。在您的示例中,(hasTaste some XXX)
和goesWellWith some (hasTaste some YYY)
是匿名类,因此它们通常不构成推理程序的已报告推断的一部分。
可能的解决方案
ObjectProperty: hasIngredient
Characteristics: Transitive
Domain:
FoodCombination
Range:
Food
ObjectProperty: hasTaste
SubPropertyChain:
hasIngredient o hasTaste
Characteristics:
Transitive
Domain:
Food
Range:
Taste
Class: Bitter
SubClassOf:
Taste
Class: BitterSweetCombination
EquivalentTo:
(hasTaste some Bitter)
and (hasTaste some Sweet)
SubClassOf:
TastyCombination
Class: CulinaryDish
SubClassOf:
FoodCombination
Class: DespicableCombination
SubClassOf:
FoodCombination
Class: Food
DisjointWith:
Taste
Class: FoodCombination
SubClassOf:
Food
DisjointUnionOf:
DespicableCombination, TastyCombination
Class: Kale
SubClassOf:
Food,
hasTaste some Bitter
DisjointWith:
Pear
Class: Pear
SubClassOf:
Food,
hasTaste some Sweet
DisjointWith:
Kale
Class: PearKaleDelight
SubClassOf:
CulinaryDish,
hasIngredient some Kale,
hasIngredient some Pear
Class: Sweet
SubClassOf:
Taste
Class: Taste
DisjointUnionOf:
Bitter, Sweet
DisjointWith:
Food
Class: TastyCombination
SubClassOf:
FoodCombination
该本体将PearKaleDelight
类归为BitterSweetCombination
的子类。
答案 1 :(得分:2)
OWL非常适合对本体本身进行推断:类,子类,属性,对称性,自反性...当描述领域知识(例如示例中的食物关联)时,使用自定义推断会更好
我建议您看看SWRL,以学习如何编写这样的推理规则。
TL; DR
使您的本体尽可能简单。本体(几乎)仅描述您领域知识的结构。 不影响知识结构本身的推论应存储为单独的规则。
Here,您会发现我为回答您的示例而写的本体论。
本体包含两个类:
Ingredient
Taste
我已经创建了三个对象属性:
tastes
:将Ingredient
链接到其Taste
; complements
:对称,将两个Tastes
链接在一起; goesWellWith
:对称,一起链接到Ingredients
。我也像您的示例一样创建了个人。
sweet
和bitter
:两个Tastes
,彼此complements
; pear
:一个Ingredient
tastes
的{{1}}; sweet
:一个kale
Ingredient
的{{1}}。转到“窗口”>“标签” ,并选中“ SWRLTab” ,然后转到新创建的“ SWRLTab” 。
您会看到我的本体还包括一个SWRL规则,看起来像
tastes
那是什么意思?
鉴于存在以下条件:
bitter
tastes(?ingredient1, ?taste1) ^ tastes(?ingredient2, ?taste2) ^ complements(?taste1, ?taste2) -> goesWellWith(?ingredient1, ?ingredient2)
ingredient1 tastes taste1
然后推断以下三项:
ingredient2 tastes taste2
就在那里。返回“实体”>“个人” 标签,点击taste1 complements taste2
并启动推理机。
如您所见,推理机已成功推断出ingredient1 goesWellWith ingredient2
(反之亦然)。您可以单击该语句旁边的问号图标,以查看推理机如何推断该语句。