想象一下,给出以下两种关系:
一个(X,Y)
B(Y,Z)
我们可以得出:
C(X,Z)
然后可以在Protégé中通过为c属性添加SuperProperty Of(Chain)来明确表达,如下所示:
a o b SubPropertyOf c
表达了这一点,想象一下我们只知道:
一个(X,Y)
C(X,Z)
我们怎样才能明确表达我们因此也知道:
B(Y,Z)
这将再次与SuperProperty Of(Chain),但对于b属性?
我首先想过尝试:
a o inverse(c)SubPropertyOf b
这位Protégé不喜欢,说有一个圆圈。现在我很困惑。
答案 0 :(得分:1)
b(y,z)
的正确表达式为inverse(a) o c SubPropertyOf b
,因为您要表示从y
到z
的属性路径对应b
。如果你只有这个公理,这应该给你必要的推论。但是,你不能将它与第一个公理a o b SubPropertyOf c
一起使用。在这种情况下,您可以在带有直接属性的公理中通过c
定义b
,并使用带有反向属性的公理中的b
通过c
定义c
。因此,您必须知道c
才能定义def callback(source=source):
data = source.get('data')
f = cb_obj.get('value')
data['x'] = [0.9, 0.8, 0,7]
data['y'] = [1, 2, 3 ]
source.trigger('change')
。在OWL 2 DL中不允许使用这种循环,这就是为什么Protege会告诉你有关循环定义的原因。总而言之,你只能拥有其中一个公理,但不能同时拥有这两个公理。
答案 1 :(得分:0)
知道a和c不需要b。这可以很容易地与经典的例子,叔叔的定义:
:hasUncle
rdf:type owl:ObjectProperty ;
owl:propertyChainAxiom (
:hasParent
:hasBrother
) .
然后,如果:David :hasParent :Mary
和:Mary :hasBrother :John
,DL推理器确实会推断出:David :hasUncle :John
。但如果我们断言:David :hasUncle :John
和:David :hasParent :Mary
,那么这不足以推断出:Mary :hasBrother :John
。事实上,约翰可以成为玛丽另一位父母的兄弟。
请注意,定义声明表明属性链是:hasUncle
的subProperty而不是等效属性。因此,即使您将:hasParent
断言为功能,推理者仍然不会从 a 和 c 推断 b 。但是,OWL2不允许具有等效的对象属性组合。
应谨慎应用财产链。例如,在S1ºS2º3......ºSn⊑R中,R只能位于表达式左侧的第一个或最后一个位置。否则它将无法判定。这是常规RBoxes的限制之一。如果应用于常规RBox,属性链或更正式的“一般角色包含”只能是可判定的。