使用属性链和转换
Antoine Zimmermann's answer 是解决这个问题的一个很好的开端,并且触及到你需要解决这类任务的要点:
从x到x的每一个兄弟,有一条hasFather o hasFather-1。
不过,兄弟之间的情况实际上并非如此。对于所有兄弟姐妹和 x 本身都是如此。这意味着您将拥有 hasSibling 的以下定义:
hasSibling ≡ hasFather o hasFather-1
(实际上,这只是 hasPaternalSibling;更精确的定义是使用 hasParent。)现在,使用这个,你可以要求兄弟,他们只是兄弟姐妹是男性,属于 x,查询如下:
(hasSibling value x) and Man
但是, 最好定义一个合适的 hasBrother 属性。如果你有一个特殊的属性将每个 Man 链接到他自己,并且只将男性链接到他们自己,你可以使用属性链和 hasSibling 来做到这一点:
hasBrother ≡ hasSibling o specialProperty
事实上,这样的属性是我们从一种称为rolification 的技术中获得的,在问题OWL 2 rolification 及其答案中对此进行了更多描述。我们的想法是,对于 Man 类,我们创建一个新属性 rMan 并添加等价性:
Man ≡ rMan 一些自我
这表示每个 Man 都通过 rMan 属性与自己相关,并且 only 实例Man 的人是如此紧密相连。这正是我们在上面的 specialProperty 中需要的属性。因此,我们最终得到了 Man、hasSibling 和 hasBrother 的以下定义:
现在我们可以通过如下查询来询问 x 的兄弟:
hasBrother-1值x
例如,我们可以询问 Greg 的兄弟姐妹,并得到 Peter、Greg(他自己)和 Bobby .
样本本体
这是 Turtle 中的本体:
@prefix : <http://www.example.org/brady#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix brady: <http://www.example.org/brady#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
brady:hasSibling a owl:ObjectProperty ;
owl:propertyChainAxiom ( brady:hasFather [ owl:inverseOf
brady:hasFather ] ) .
brady:Carol a owl:NamedIndividual , brady:Woman .
brady:hasBrother a owl:ObjectProperty ;
owl:propertyChainAxiom ( brady:hasSibling brady:r_Man ) .
<http://www.example.org/brady>
a owl:Ontology .
brady:Woman a owl:Class ;
rdfs:subClassOf brady:Person ;
owl:equivalentClass [ a owl:Restriction ;
owl:hasSelf true ;
owl:onProperty brady:r_Woman
] .
brady:hasFather a owl:ObjectProperty .
brady:Person a owl:Class .
brady:Man a owl:Class ;
rdfs:subClassOf brady:Person ;
owl:equivalentClass [ a owl:Restriction ;
owl:hasSelf true ;
owl:onProperty brady:r_Man
] .
brady:r_Woman a owl:ObjectProperty .
brady:r_Man a owl:ObjectProperty .
brady:Marcia a owl:NamedIndividual , brady:Woman ;
brady:hasFather brady:Mike .
brady:Peter a owl:NamedIndividual , brady:Man ;
brady:hasFather brady:Mike .
brady:Jan a owl:NamedIndividual , brady:Woman ;
brady:hasFather brady:Mike .
brady:Cindy a owl:NamedIndividual , brady:Woman ;
brady:hasFather brady:Mike .
brady:Bobby a owl:NamedIndividual , brady:Man ;
brady:hasFather brady:Mike .
brady:Greg a owl:NamedIndividual , brady:Man ;
brady:hasFather brady:Mike .
brady:Mike a owl:NamedIndividual , brady:Man .