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 在一起。

我也像你的例子一样创建了个人。

  • sweetbitter:两个 Tastes 彼此 complements
  • pear:一个 Ingredient 其中 tastes sweet;
  • kaleIngredient 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(反之亦然)。您可以单击语句旁边的问号图标以查看推理者如何推断出该语句。