对Protege中复杂类的推断

时间:2018-08-05 00:06:19

标签: rdf owl semantic-web protege rdfs

我想进行推断,例如该图中用灰色虚线表示的属性:

kale goes well with pear because it tastes bitter which complements pear's sweet

我断言了一个公理:

(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

结果捕获了彼此互补的食物特性的每一个排列。

enter image description here

2 个答案:

答案 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

我也像您的示例一样创建了个人。

  • sweetbitter:两个Tastes,彼此complements
  • pear:一个Ingredient tastes的{​​{1}};
  • sweet:一个kale Ingredient的{​​{1}}。

转到“窗口”>“标签” ,并选中“ SWRLTab” ,然后转到新创建的“ SWRLTab”

The SWRL tab

您会看到我的本体还包括一个SWRL规则,看起来像

tastes

那是什么意思?

  

鉴于存在以下条件:

     
      
  • bitter
  •   
  • tastes(?ingredient1, ?taste1) ^ tastes(?ingredient2, ?taste2) ^ complements(?taste1, ?taste2) -> goesWellWith(?ingredient1, ?ingredient2)
  •   
  • ingredient1 tastes taste1
  •   
     

然后推断以下三项:

     
      
  • ingredient2 tastes taste2
  •   

就在那里。返回“实体”>“个人” 标签,点击taste1 complements taste2并启动推理机。

The inferred statement

如您所见,推理机已成功推断出ingredient1 goesWellWith ingredient2(反之亦然)。您可以单击该语句旁边的问号图标,以查看推理机如何推断该语句。