OWL 中 n 元关系的 SWRL 规则

SWRL rule on n-ary relation in OWL

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

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

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

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

提前致谢!

首先要做的是确保您的 ontology 是为任务正确设计的。正如您正确指出的那样,您需要具体化才能实现这一目标。这意味着您需要引入一个 class 来表示您的 n-ary 关系,即:

相关的 ontology 规则和一些个人测试如下:

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) 属性 并且您必须使用具体化,因此您必须指定规则 component-wise,其中 ancestordescendantprobability 是表示 AncestorProbability n-ary 关系的组成部分的属性。

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

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