Rdf Protege中复杂类的推理

Rdf Protege中复杂类的推理,rdf,owl,semantic-web,protege,rdfs,Rdf,Owl,Semantic Web,Protege,Rdfs,我想做出一些推论,比如图中灰色虚线表示的属性: 我提出了一条普遍的公理: (hasTaste some Bitter) SubClassOf: goesWellWith some (hasTaste some Sweet) 其中“苦”是苦的类型,“甜”是甜的类型 我认为owl:someValuesFrom(或曼彻斯特的“some”)意味着至少存在一种这样的关系。然而,在做出大胆的图表断言和一般公理之后,这并没有发生 我怎样才能做到这一点 编辑(编辑2,我算出来了) 我刚刚想到了一个超级财产链

我想做出一些推论,比如图中灰色虚线表示的属性:

我提出了一条普遍的公理:

(hasTaste some Bitter) SubClassOf: goesWellWith some (hasTaste some Sweet)
其中“苦”是苦的类型,“甜”是甜的类型

我认为owl:someValuesFrom(或曼彻斯特的“some”)意味着至少存在一种这样的关系。然而,在做出大胆的图表断言和一般公理之后,这并没有发生

我怎样才能做到这一点

编辑(编辑2,我算出来了)

我刚刚想到了一个超级财产链的工作!我只是具体说明一下

hasTaste o complements o isTasteOf
作为Goeswelwith的超级产业链。事实上,通过制作hasTaste、hasTexture等…一个通用的hasTrait的所有子属性,我可以分别用hasTrait和isTraitOf替换hasTaste和isTasteOf:

hasTrait o complements o isTraitOf
这一结果捕捉到了食物特性的每一种排列,它们相互补充


在回答您的问题时,我将(1)解释您的方法失败的原因,并(2)提供可能的解决方案

您的方法失败的原因

General中的推理器仅对基于命名类的推理提供反馈,而不是匿名类。在您的示例中,
(hasTaste some XXX)
goeswellwhith 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
类归类为
苦乐参半组合的子类

OWL非常适合对本体本身进行推断:类、子类、属性、对称性、自反性。。。在描述领域知识时(例如示例中的食品关联),最好使用自定义推断

我建议你看一看,学习如何编写这样的推理规则


TL;博士 让你的本体尽可能简单。本体(几乎)只描述领域知识的结构。 不影响知识结构本身的推论应作为单独的规则存储


,你会发现我写了一篇关于声名学的文章来回答你的例子

本体包含两类:

  • 成分
  • Taste
我创建了三个对象属性:

  • 口味
    :将
    成分
    链接到其
    口味
  • 互补
    :对称,将两种
    口味
    连接在一起
  • goeswelwith
    :对称,链接到
    成分
我也创造了个人,就像你的例子一样

  • 甜的
    苦的
    :两种
    味道
    互补的
  • :一种
    成分
    ,味道
  • 羽衣甘蓝
    :一种
    配料
    ,味道
转到“窗口”>“选项卡”,选中“SWRLTab”,然后转到新创建的“SWRLTab”

您将看到我的本体还包括一个SWRL规则,如下所示

tastes(?ingredient1, ?taste1) ^ tastes(?ingredient2, ?taste2) ^ complements(?taste1, ?taste2) -> goesWellWith(?ingredient1, ?ingredient2)
那么,这意味着什么

如果存在以下条件:

  • ingredient1口味1
  • ingredient2口味2
  • taste1补充了taste2
然后推断出以下三重:

  • ingredient1与ingredient2一起运行
就在这里。返回到“实体”>“个人”选项卡,单击
pear
并启动推理机


如您所见,推理者已成功地推断出
梨含有羽衣甘蓝
(反之亦然)。您可以单击语句旁边的问号图标,查看推理机是如何推断语句的。

我的全部查询:使用该公理,您无法推断您想要什么。它只会让“羽衣甘蓝”与有味道的东西和甜味的东西搭配得很好。在我看来,这只适用于SWRL,因为i)OWL类表达式只有一个树状结构,ii)OWL中没有变量。有没有一种方法可以从本质上“序列化”SWRL中的一般公理,以便产生所需的推论?我不希望我的用户必须编辑一长串SWRL规则。我宁愿他们在本体中指定他们想要的所有好的组合。你说匿名类“通常不会构成推理者报告的推论的一部分。”你能再解释一下吗?在进行推断时必须使用I子类的限制,是吗?令人失望的是,个人
羽衣甘蓝
不会被推断为有
hasTaste苦
hasTaste苦
(其中
)--尽管这些是成为甘蓝的必要条件,推理者之所以不报告匿名类,是因为匿名类的数量太多了。也就是说,如果你有推论“A subassof B”,那么“A和X subassof B和X”,其中“X”是一个任意的概念描述,也是推论。我认为你对类太过努力了。我知道Protégé的界面不是与个人一起工作的最佳界面,但当你转向现实世界编程时,你将处理的都是个人,而不是类。@Richard Degenne这是一个可行的解决方案,我通过升级来确认,尽管OP更喜欢使用类而不是个人