2017-05-08 80 views
1

例如,我有三个类:Flock,Bird,Velocity。我也有两个属性:hasMember(域是Flock,范围是Bird)和hasAttribute(域是Bird,范围是Velocity)。现在我想添加一个EquivalentClass限制到Flock类作为定义。让我们考虑一个非常简单的定义:在一群中,所有的鸟都有相同的速度。如何在OWL中表达这一点?我们可以在OWL限制中使用owl:sameAs吗?

+0

作为一种解决方法,您可以将'Flock'属性'hasAttribute'声明为域,并编写简单的SWRL规则。 –

+0

谢谢斯坦尼斯拉夫。我知道它可以用规则来表达。我只是想知道,如果只有OWL公理可以做到这一点。 – deerls

+0

OWL是无变量的,也就是说,除非具有可以使用的特定值,否则无法对特定类的所有个体的速度做出声明。因此,SWRL存在。 – AKSW

回答

1

警告:这个答案实际上是不正确的,请看看评论,看看为什么。

问题:“我们可以在OWL限制中使用owl:sameAs吗?”答案是否定的,不在OWL(2)本体中。但是,您可以在OWL Full本体中执行任何您喜欢的操作(即,根据基于OWL RDF的语义解释的RDF图)。然而,这与你的问题的细节无关,你想谈谈鸡群中鸟类的速度。

在OWL 2 DL的限制范围内,您的问题有一个解决方案。引入财产flockVelocity并使财产链hasMember o hasAttribute成为flockVelocity的子财产。使flockVelocity成为一个功能属性,你就完成了。或者,您可以在flockVelocity上定义基数限制。在乌龟:

:hasMember a owl:ObjectProperty; 
    rdfs:domain :Flock; 
    rdfs:range :Bird . 
:hasAttribute a owl:ObjectProperty; # why not :hasVelocity? 
    rdfs:domain :Bird; 
    rdfs:range :Velocity . 
:flockVelocity a owl:ObjectProperty, owl:FunctionalProperty; 
    owl:propertyChainAxiom (:hasMember :hasAttribute) . 

完成。如果你不关心在OWL DL中并允许自己完全自由地使用OWL,那么可以使用空白节点而不是:flockVelocity,这样就不必引入假的属性名称。

+0

谢谢安托万。我尝试了财产链。但是,如果我将flockVelocity作为功能属性运行HermiT,则会发生内部推理错误:“推理期间发生错误:非简单属性'<...#flockVelocity>'或其相反出现在基数限制'ObjectMaxCardinality (1 <...#flockVelocity><...#Velocity>)''“所以我将基数限制添加到Flock类,但它没有帮助。 – deerls

+0

@deerls,请参见[11.2关于公理关闭的限制](https://www.w3.org/TR/owl2-syntax/#The_Restrictions_on_the_Axiom_Closure),“对简单角色的限制”和“对属性层次结构的限制”段落。 –

+0

Aaaah,你是对的,我错了!由于斯坦尼斯拉斯提到的原因,我的本体论不在OWL 2 DL中。但是,有可能通过基数限制来获得期望的结果。让我编辑我的答案。 –

相关问题