Protege 中 Complex 类 的推理
Inference on Complex Classes in Protege
我想做出推断,例如图中灰色虚线表示的属性:
我已经断言了一个一般公理:
(hasTaste some Bitter) SubClassOf: goesWellWith some (hasTaste some Sweet)
其中 'bitter' 是苦味类型,'sweet' 是甜味类型。
我认为owl:someValuesFrom(或曼彻斯特的"some")意味着至少必须存在一个这样的关系。然而,在做出大胆的图表断言和一般公理之后,这并没有发生。
我怎样才能使这个工作?
编辑(编辑 2,我想通了)
我刚刚想到了一个超级属性 链条,它可以工作!我只是指定
hasTaste o complements o isTasteOf
作为 goesWellWith 的超级 属性 链。事实上,通过制作 hasTaste、hasTexture 等...所有子属性的一般 hasTrait,然后我可以分别用 hasTrait 和 isTraitOf 替换 hasTaste 和 isTasteOf:
hasTrait o complements o isTraitOf
结果捕捉到了食物特性的每一种排列,它们相互补充。
在回答您的问题时,我将 (1) 解释您的方法失败的原因,以及 (2) 提供可能的解决方案。
为什么你的方法失败了
推理者通常只对基于命名 classes,非匿名 classes 的推论提供反馈。在您的示例中,(hasTaste some XXX)
和 goesWellWith some (hasTaste some YYY)
是匿名的 classes,因此它们通常不会构成推理者报告推论的一部分。
可能的解决方案
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
此 ontology 将 class 将 PearKaleDelight
class 确定为 BitterSweetCombination
的子class。
OWL 非常适合对本体本身进行推理:类、sub类、属性、对称性、自反性......在描述领域知识时(例如食物关联你的例子),你会更好地使用自定义推理。
我建议你看一看 SWRL 来学习如何编写这样的推理规则。
TL;DR
Keep your ontology as simple as possible. The ontology (almost) only describes the structure of your domain's knowledge.
Inferences that don't affect the knowledge structure itself should be stored as separate rules.
Here,你会找到我写的本体来回答你的例子。
ontology持有两个类:
Ingredient
Taste
我创建了三个对象属性:
tastes
:将 Ingredient
链接到它的 Taste
;
complements
:对称,将两个 Tastes
连接在一起;
goesWellWith
:对称,链接到 Ingredients
在一起。
我也像你的例子一样创建了个人。
sweet
和 bitter
:两个 Tastes
彼此 complements
;
pear
:一个 Ingredient
其中 tastes
sweet
;
kale
:Ingredient
tastes
bitter
.
转到"Window" > "Tabs",然后检查"SWRLTab",然后转到新创建的 "SWRLTab".
您会看到我的 ontology 还包括一个 SWRL 规则,看起来像
tastes(?ingredient1, ?taste1) ^ tastes(?ingredient2, ?taste2) ^ complements(?taste1, ?taste2) -> goesWellWith(?ingredient1, ?ingredient2)
那么,这是什么意思?
Given the following conditions are present:
ingredient1 tastes taste1
ingredient2 tastes taste2
taste1 complements taste2
Then infer the following triple:
ingredient1 goesWellWith ingredient2
好了。返回 "Entities" > "Individuals" 选项卡,单击 pear
并启动推理机。
如您所见,推理器已成功推断出 pear goesWellWith kale
(反之亦然)。您可以单击语句旁边的问号图标以查看推理者如何推断出该语句。
我想做出推断,例如图中灰色虚线表示的属性:
我已经断言了一个一般公理:
(hasTaste some Bitter) SubClassOf: goesWellWith some (hasTaste some Sweet)
其中 'bitter' 是苦味类型,'sweet' 是甜味类型。
我认为owl:someValuesFrom(或曼彻斯特的"some")意味着至少必须存在一个这样的关系。然而,在做出大胆的图表断言和一般公理之后,这并没有发生。
我怎样才能使这个工作?
编辑(编辑 2,我想通了)
我刚刚想到了一个超级属性 链条,它可以工作!我只是指定
hasTaste o complements o isTasteOf
作为 goesWellWith 的超级 属性 链。事实上,通过制作 hasTaste、hasTexture 等...所有子属性的一般 hasTrait,然后我可以分别用 hasTrait 和 isTraitOf 替换 hasTaste 和 isTasteOf:
hasTrait o complements o isTraitOf
结果捕捉到了食物特性的每一种排列,它们相互补充。
在回答您的问题时,我将 (1) 解释您的方法失败的原因,以及 (2) 提供可能的解决方案。
为什么你的方法失败了
推理者通常只对基于命名 classes,非匿名 classes 的推论提供反馈。在您的示例中,(hasTaste some XXX)
和 goesWellWith some (hasTaste some YYY)
是匿名的 classes,因此它们通常不会构成推理者报告推论的一部分。
可能的解决方案
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
此 ontology 将 class 将 PearKaleDelight
class 确定为 BitterSweetCombination
的子class。
OWL 非常适合对本体本身进行推理:类、sub类、属性、对称性、自反性......在描述领域知识时(例如食物关联你的例子),你会更好地使用自定义推理。
我建议你看一看 SWRL 来学习如何编写这样的推理规则。
TL;DR
Keep your ontology as simple as possible. The ontology (almost) only describes the structure of your domain's knowledge. Inferences that don't affect the knowledge structure itself should be stored as separate rules.
Here,你会找到我写的本体来回答你的例子。
ontology持有两个类:
Ingredient
Taste
我创建了三个对象属性:
tastes
:将Ingredient
链接到它的Taste
;complements
:对称,将两个Tastes
连接在一起;goesWellWith
:对称,链接到Ingredients
在一起。
我也像你的例子一样创建了个人。
sweet
和bitter
:两个Tastes
彼此complements
;pear
:一个Ingredient
其中tastes
sweet
;kale
:Ingredient
tastes
bitter
.
转到"Window" > "Tabs",然后检查"SWRLTab",然后转到新创建的 "SWRLTab".
您会看到我的 ontology 还包括一个 SWRL 规则,看起来像
tastes(?ingredient1, ?taste1) ^ tastes(?ingredient2, ?taste2) ^ complements(?taste1, ?taste2) -> goesWellWith(?ingredient1, ?ingredient2)
那么,这是什么意思?
Given the following conditions are present:
ingredient1 tastes taste1
ingredient2 tastes taste2
taste1 complements taste2
Then infer the following triple:
ingredient1 goesWellWith ingredient2
好了。返回 "Entities" > "Individuals" 选项卡,单击 pear
并启动推理机。
如您所见,推理器已成功推断出 pear goesWellWith kale
(反之亦然)。您可以单击语句旁边的问号图标以查看推理者如何推断出该语句。