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

时间:2013-10-24 07:30:53

标签: rdf ontology owl protege

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

所以,如果我有这个:

  巴特有父亲。

     

Lisa hasFather Homer。

因为BartLisa拥有相同的父亲,我想推断:

  

丽莎有兄弟。

使用任何属性特征是否有任何方法可以做到这一点?

4 个答案:

答案 0 :(得分:8)

使用属性链和轧制

Antoine Zimmermann's answer是解决这个问题的一个非常好的开端,并触及了解决此类任务所需的主要问题:

  

x 到每个 x 兄弟,有一条路径 hasFather o hasFather -1 < / em>的

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

  

hasSibling≡hasFathero hasFather -1

(实际上,那只是 hasPaternalSibling ;更精确的定义会使用 hasParent 。)现在,使用这个,你可以要求兄弟,这些兄弟只是兄弟姐妹是 x 的男性,其查询类似于:

  

(hasSibling值x)和Man

但是, 很好地定义了正确的 hasBrother 属性。如果你有一个特殊的属性将每个 Man 链接到他自己,并且只将男性链接到自己,你可以使用属性链和 hasSibling 执行此操作:

  

hasBrother≡hasSiblingo specialProperty

事实上,这样的属性就是我们从一种名为 rolification 的技术中获得的,已经在一个问题OWL 2 rolification及其答案中对此进行了更详细的描述。我们的想法是,对于类 Man ,我们创建一个新属性 r Man 并添加等价:

  

男人≡r男人一些自我

表示每个 Man r Man 属性以及个实例相关联 Man 是如此连接。这正是我们上面的 specialProperty 所需的属性。因此,我们最终得到以下 Man hasSibling hasBrother 的定义:

definition of Man definition of hasSibling definition of hasBrother

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

  

hasBrother -1 value x

例如,我们可以要求 Greg 的兄弟姐妹,并获得 Peter Greg (他自己)和 Bobby

example of query

样本本体

这是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 .

答案 1 :(得分:2)

假设每个人都是他们自己的兄弟,姐妹也是兄弟:

:hasBrother  owl:propertyChainAxiom  (:hasFather [ owl:inverseOf :hasFather ]) .

几乎不可能定义:更准确地说,更为精确,不包括女性兄弟和自我兄弟情谊。但你可以推断Lisa的所有兄弟如下:

:Female  a  owl:Class .
:Male  a  owl:Class;
  owl:disjointWith  :Female .
:Lisa  a  :Female .
:Bart  a  :Male .
:Homer a  :Male .
:hasFather  a  owl:ObjectProperty;
  rdfs:range  :Male .
:hasBrother a  owl:ObjectProperty;
  rdfs:range  :Male .
:hasSiblingOrSelf  owl:propertyChainAxiom  ( :hasFather [ :hasFather ] ) .
:LisaBrother  owl:equivalentClass  [
    a  owl:Restriction;
    owl:onProperty  [ owl:inverseOf  :hasBrother ];
    owl:hasValue  :Lisa
  ], [
    a  owl:Class;
    owl:intersectionOf  (
      [ a owl:Restriction; owl:onProperty :hasSiblingOrSelf; owl:hasValue :Lisa ]
      :Male
    )
  ] .

答案 2 :(得分:1)

一种解决方法是使用SWRL规则。

处于保护状态:

  1. 转到窗口
  2. 点击标签
  3. 单击“旋转”选项卡
  4. 按下“新建”按钮并编写以下规则

编写规则:

isChildOf(?x,?y)^FatherOf(?y,?z)^differentFrom(?z,?x)->isBrotherOf(?x,?z)

这意味着,如果“ x是y的子代”,并且“ y也是z的父代”且“ z和x不同”,则“ z和x是兄弟”。

答案 3 :(得分:0)

兄弟是男性兄弟姐妹。因此,我们应该同时定义“男性”和“兄弟姐妹”。但是,由于同胞本身就是同一父母的异同孩子,因此也应该定义自己是孩子。为简单起见,我们将同父异母的兄弟姐妹视为同胞兄弟,将域限制为人类,并将诸如母性和父性之类的相关概念的明确定义放在一边。

1定义人

  1. 创建一个Human
  2. 创建一个与Gender类不相交的Human类。创建malefemale作为实例化Gender类型的个人(还有其他方法可以做到这一点,但这很简单)。
  3. 创建一个hasGender对象属性,将Human作为域,将Gender作为其范围
  4. 创建一个Man类作为Human的子类。使其等同于Human and (hasGender value male)

2定义子对象

  1. 使用Human为其域和范围创建isChildOf对象属性(可选:将Child类定义为与isChildOf some Human等效的human子类型。您可以通过类似的方式还创建对象属性,然后创建MotherParentDaughter等的类。

3在SWRL的帮助下定义同级

  1. 首先,在Protege中使用其域和范围的isSiblingOf创建一个不自反的,对称的Human对象属性。
  2. 在Protege顶部的菜单栏中,确保已选中“窗口->选项卡-> SWRLTab”,然后找到并单击“ SWRLTab”选项卡。
  3. 单击“新建”以创建新规则,然后添加规则:isChildOf(?sibling1, ?parent) ^ isChildOf(?sibling2, ?parent) ^ differentFrom(?sibling1, ?sibling2) -> isSiblingOf(?sibling1, ?sibling2) 您可能还想添加规则,以便从同级关系中推断出什么,例如isSiblingOf(?x, ?y) ^ isChildOf(?x, z?) -> isChildOf(?y, ?z)

4定义是...的兄弟

  1. 在Protege中使用域isBrotherOf和范围Man创建Human对象属性
  2. 在SWRLTab上,添加以下规则: Man(?x) ^ isSiblingOf(?x, ?y) -> isBrotherOf(?x, ?y)

isBrotherOf(?x, ?y) -> Man(?x)

isBrotherOf(?x, ?y) -> isSiblingOf(?x, ?y)

第一个规则规定,任何男性兄弟姐妹都是兄弟。第二个和第三个从兄弟情谊中推断出男性和同胞。

  1. (可选)创建一个与Brother等效的isBrotherOf some Human类,以完成滚动过程。