关于OWL中的n-ary关系的SWRL规则

时间:2018-03-20 13:24:27

标签: owl swrl

我想使用OWL(在Protege中)来编码三元关系ancestorOf(x,y,p);说y是概率为p的x的祖先。因为对象属性只支持二元关系,所以我的关系必须表示为一个Relation类和一个关系个体,关系到x,y和p(就像在this设计模式中一样)。

我真的不知道如何编写SWRL规则来推断传递关系。即

ancestorOf(x, y, p1) ^ ancestorOf(y, z, p2) -> ancestorOf(x, z, p1 * p2)

如果有人能指出我正确的方向,我会感激不尽。

提前致谢!

1 个答案:

答案 0 :(得分:2)

要做的第一件事是确保您的本体是为这项任务正确设计的。正如你正确指出的那样,你需要具体化才能实现这一目标。这意味着你需要引入一个代表你的n-ary关系的类,即: AncestorProbability representing n-ary relation

与规则相关的本体论和一些要测试的人将看起来如下:

ObjectProperty: ancestor
    Domain: AncestorProbability
    Range: Person

ObjectProperty: descendant
    Domain: AncestorProbability
    Range: Person

DataProperty: probability
    Domain: AncestorProbability
    Range: xsd:decimal

Class: AncestorProbability

Class: Person

Individual: _a1
    Types: 
        AncestorProbability
    Facts:  
     ancestor  _y,
     descendant  _x,
     probability  0.2


Individual: _a2
    Types: 
        AncestorProbability
    Facts:  
     ancestor  _z,
     descendant  _y,
     probability  0.31
Individual: _a3
    Types: 
        AncestorProbability
    Facts: 
        descendant  _x

Individual: _x
    Types: Person

Individual: _y
    Types: Person

Individual: _z
    Types: Person

DifferentIndividuals: 
    _a1,_a2,_a3

DifferentIndividuals: 
    _x,_y,_z

Rule: 
    ancestor(?a1, ?y), descendant(?a1, ?x), probability(?a1, ?p1), 
    ancestor(?a2, ?z), descendant(?a2, ?y), probability(?a2, ?p2),
    descendant(?a3, ?x), swrlm:eval(?p3, "p1 * p2", ?p1, ?p2) 
    -> ancestor(?a3, ?z), probability(?a3, ?p3) 

需要注意的一件重要事情是,由于没有ancestorOf(x, y, p)属性,您必须使用具体化,因此您必须明确指定规则,ancestordescendantprobability是表示AncestorProbability n-ary关系组件的属性。

需要注意的另一个重要事项是,必须添加descendant(?a3, ?x)以指明哪个AncestorProbability个人必须为哪个后代应用规则。

一个可能的问题是您使用的推理器可能不支持swrlm:eval(?p3, "p1 * p2", ?p1, ?p2),这是我在使用Protege和HermiT推理器进行测试时发现的问题。一些商业推理者可能支持这一点。