Owl 如何表达xRy&;yR-z&;x=Z

Owl 如何表达xRy&;yR-z&;x=Z,owl,protege,Owl,Protege,我正在做一个关于系谱的本体论,我发现我可以使用链属性来轻松地表达一些属性。所以我有两个属性hasChild和hasParent(一个是另一个的相反) 我想创建一个关系,其中包括: 对于所有x,y,z:hasSibling(x,z)=hasParent(x,y)和hasChild(y,z) 因此,我创建了hasSibling属性,并使用chain属性将其定义为: hasParent o hasChild->hasSibling 问题是一个人是他自己的兄弟姐妹。我知道这很正常,因为我从没说过x!=Z

我正在做一个关于系谱的本体论,我发现我可以使用链属性来轻松地表达一些属性。所以我有两个属性hasChild和hasParent(一个是另一个的相反)

我想创建一个关系,其中包括:

对于所有x,y,z:hasSibling(x,z)=hasParent(x,y)和hasChild(y,z)

因此,我创建了hasSibling属性,并使用chain属性将其定义为:

hasParent o hasChild->hasSibling

问题是一个人是他自己的兄弟姐妹。我知道这很正常,因为我从没说过x!=Z所以我的问题是:我如何用Protégé来表达这一点


如有必要,请随时更正我的问题。

有没有办法找到y的孩子数?如果是这样的话,那么家长的孩子数量>1将是检查hasSibling的问题。我不知道这是否可能。我尝试使用不可弯曲的特性,但推理者(HermiT)不想接受属性链定义器上的特性。你能得到父对象的子对象吗?这是正确的,你不能使属性不可弯曲,然后将其用作属性链公理中的超级属性。这对于确保OWL2DL推理的可判定性是必要的。使用SWRL规则是另一种选择:
hasChild(?y,z),hasChild(?y,x),与(?x,z)->hasSibling(?x,z)
Ok,所以我使用了
hasChild(?y,z)^ hasChild(?y,x)^与(?x,z)->hasSibling(?x,z)
。我有一个小问题,因为我没有将人定义为不同的人,所以我认为与人的不同不是真的。但一旦我改变了这个,它就成功了。谢谢有没有办法找到y的孩子的数目?如果是这样的话,那么家长的孩子数量>1将是检查hasSibling的问题。我不知道这是否可能。我尝试使用不可弯曲的特性,但推理者(HermiT)不想接受属性链定义器上的特性。你能得到父对象的子对象吗?这是正确的,你不能使属性不可弯曲,然后将其用作属性链公理中的超级属性。这对于确保OWL2DL推理的可判定性是必要的。使用SWRL规则是另一种选择:
hasChild(?y,z),hasChild(?y,x),与(?x,z)->hasSibling(?x,z)
Ok,所以我使用了
hasChild(?y,z)^ hasChild(?y,x)^与(?x,z)->hasSibling(?x,z)
。我有一个小问题,因为我没有将人定义为不同的人,所以我认为与人的不同不是真的。但一旦我改变了这个,它就成功了。谢谢