【问题标题】:How to infer isBrotherOf property between two individuals如何推断两个人之间的 isBrotherOf 属性
【发布时间】:2013-10-24 07:30:53
【问题描述】:

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

所以,如果我有这个:

巴特有霍默神父。

丽莎有霍默神父。

因为BartLisa是同一个父亲,所以我想推断:

丽莎有巴特哥哥。

有没有使用任何属性特征的方法来做到这一点?

【问题讨论】:

  • 很遗憾,直观和常见的情况在 OWL 中有如此过于复杂的表示......
  • @loopasam 如果已经定义了其他属性,那就没那么复杂了。例如,如果 Ortzi 使用了 Homer hasSon BartHomer hasDaugher Lisa,并声明 hasSonhasDaughterhasChild 的子属性,并将 hasParent 定义为 hasChild 的逆,那么hasBrother 就是 hasParent o hasSon。 (不过,这不能处理这个人是他自己的兄弟问题。)解决方案的复杂性取决于现有表示的表现力。 (也许我应该将此添加到我的答案中……)

标签: rdf ontology owl protege


【解决方案1】:

使用属性链和转换

Antoine Zimmermann's answer 是解决这个问题的一个很好的开端,并且触及到你需要解决这类任务的要点:

xx的每一个兄弟,有一条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 中需要的属性。因此,我们最终得到了 ManhasSiblinghasBrother 的以下定义:

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

hasBrother-1值x

例如,我们可以询问 Greg 的兄弟姐妹,并得到 PeterGreg(他自己)和 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 .

【讨论】:

  • 难以置信的答案!谢谢。
  • 我对答案有疑问。在那个解决方案中,如果我们有两个兄弟 A 和 B,那么推断的结果显示 A hasSibling B,但也表明 A hasSibling A。可以解决吗?
  • @jartymcfly 这是一个很好的观察,不幸的是,没有很好的解决方案来解决它。根据您的用例,最好的办法可能就是过滤掉这些结果。例如,请参阅AntoineZimmermann's answer 上的 cmets。
  • 此语句中的“o”是什么? "hasFather o 逆 (hasFather)"
  • @crapthings 它是 OWL 术语中的属性组合或属性链。例如,如果 Joe fatherOf TimTim brotherOf Hank,那么 Joe fatherOf o brotherOf Hank。在曼彻斯特语法(Protege 使用)中,您只需输入一个小写字母“o”。
【解决方案2】:

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

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

几乎不可能更精确地定义 :hasBrother,不包括女性兄弟和自兄弟。但是你可以推断出 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
    )
  ] .

【讨论】:

  • 使用 rolificationFemale 类,我认为您实际上可以很容易地排除姐妹。不过,我不确定您是否可以轻松排除同胞兄弟。
  • 是的,你是对的。最后一件困难的事情是排除做自己的兄弟。如果可能的话,我不知道该怎么做,在 OWL 中。
【解决方案3】:

一种方法是使用 SWRL 规则。

在门生:

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

写规则:

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

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

【讨论】:

    【解决方案4】:

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

    1 定义人

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

    2 定义子节点

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

    3 在 SWRL 的帮助下定义同级

    1. 首先,在 Protege 中创建一个不自反、对称的 isSiblingOf 对象属性,其域和范围为 Human
    2. 在 Protege 顶部的菜单栏中,确保选中 Window -> tabs -> SWRLTab,然后找到并单击 SWRLTab 选项卡。
    3. 点击新建新建规则,添加规则:isChildOf(?sibling1, ?parent) ^ isChildOf(?sibling2, ?parent) ^ differentFrom(?sibling1, ?sibling2) -&gt; isSiblingOf(?sibling1, ?sibling2) 您可能还想为您希望能够从兄弟关系中推断出的内容添加规则,例如 isSiblingOf(?x, ?y) ^ isChildOf(?x, z?) -&gt; isChildOf(?y, ?z)

    4 定义为兄弟

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

    isBrotherOf(?x, ?y) -&gt; Man(?x)

    isBrotherOf(?x, ?y) -&gt; isSiblingOf(?x, ?y)

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

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

    【讨论】:

      猜你喜欢
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 2020-04-27
      • 2010-12-25
      • 1970-01-01
      相关资源
      最近更新 更多