如何推断两个人之间的isBrotherOf属性

Ort*_*tzi 6 rdf owl ontology protege

如果他们有同一个父亲,我需要推断一个人是另一个人的兄弟.

所以,如果我有这个:

巴特有父亲.

丽莎有父亲.

因为BartLisa父亲一样,我想推断:

丽莎有兄弟.

有没有任何方法可以使用任何属性特征?

Jos*_*lor 8

使用Property Chains和Rolification

Antoine Zimmermann的答案是解决这个问题的一个很好的开端,并触及了解决这类任务所需要的重点:

X到每个X的兄弟,有如下形式的路径hasFatheröhasFather -1.

但是,现在,这实际上不仅仅是兄弟.这对所有兄弟姐妹和x本身都是如此.这意味着您将拥有hasSibling的以下定义:

hasSibling≡hasFathero hasFather -1

(实际上,这真的只有hasPaternalSibling ;更精确的定义会使用hasParent.)现在,使用这个,你可以要求兄弟,这些兄弟只是男人的兄弟姐妹,x的查询如下:

(hasSibling值x)和Man

但是,定义一个合适的hasBrother属性很好.您可以使用属性链和hasSibling执行此操作,如果您有一个将每个Man链接到自己的特殊属性,并且只将males链接到自己:

hasBrother≡hasSiblingo specialProperty

事实上,这种属性就是我们从一种叫做rolification的技术中获得的,这种技术在一个问题,OWL 2 rolification及其答案中有更多的描述.我们的想法是,对于类Man,我们创建一个新属性r Man并添加等价:

男人≡r 男人有些自我

它说,每个通过与自己[R 男人的财产,而只有实例男人是如此相连.这正是我们上面的specialProperty所需要的属性.因此,我们最终得到了Man,hasSiblinghasBrother的以下定义:

人的定义 hasSibling的定义 hasBrother的定义

现在我们可以通过以下查询询问x的兄弟:

hasBrother -1值x

例如,我们可以要求格雷格的兄弟姐妹,并得到彼得,格雷格(他自己)和鲍比.

查询示例

样本本体

这是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 .
Run Code Online (Sandbox Code Playgroud)