【问题标题】:uml Composition relationships to RDF and OWLuml 与 RDF 和 OWL 的组合关系
【发布时间】:2014-02-20 22:02:19
【问题描述】:

我是 RDF 和 OWL 本体的初学者。

我正在尝试将此图表转换为 OWL 语法。

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
        >

    <!-- OWL Class Definition - Robot Position -->
    <owl:Class rdf:ID="house" />
            <owl:Class rdf:ID="room" />
            <owl:Class rdf:ID="kitchen" />
            <owl:Class rdf:ID="garden" />
            <owl:Class rdf:ID="table" />
            <owl:Class rdf:ID="chair" />

    <owl:ObjectProperty rdf:ID="composedBy">
        <rdfs:domain rdf:resource="#house"/>
        <rdfs:rang rdf:resource="#room" >
    </owl:ObjectProperty>              
</rdf:RDF>

我不知道该怎么做才能使组合关系多次使用。 我正在考虑使用

来设置集合类型的范围

(house)---composedBy---(room, kitchen, garden)

但是,我想使用相同的关系

(kitchen)---comoposedBy---(table, chair)

验证器出错,因为我两次使用了composerBy 作为ID。 (我现在删除了)

如何正确翻译此图。

:))

【问题讨论】:

  • 明确地说,您是想说“家中的每样东西都是房间、厨房或花园”(unionOf 在这里工作),或者“家必须有一个房间,必须有厨房,还必须有花园”(unionof 在这里不起作用)?

标签: uml rdf owl


【解决方案1】:

如果你想说一栋房子必须有一个(或至少一个)厨房,必须有一个(或至少一个)房间,并且必须有一个(或至少一个)花园,那么 unionOf并没有真正解决这里的问题。与其担心组合属性的范围,我认为如果你有一个更通用的组件属性可能会更有帮助,并通过使用存在限制来表达必须保持的不同关系。例如,你可以这样说

房子 &sqsubseteq; =1 hasPart.Kitchen
房子&sqsubseteq; ≥2 有Part.Room
房子&sqsubseteq; ∃hasPart.花园

说一所房子只有一个厨房、至少两个房间和至少一个花园。同样,你可以说有一张桌子和一把椅子,

厨房&sqsubseteq; ∃hasPart.Chair
厨房&sqsubseteq; ∃hasPart.Table

在 Protégé 中,这看起来像:

Turtle 和 RDF/XML 中的 RDF 序列化是:

@prefix :      <http://www.example.org/houses#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@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#> .

<http://www.example.org/houses>
        a       owl:Ontology .

:hasPart  a     owl:ObjectProperty .

:Table  a       owl:Class .
:Room   a       owl:Class .
:Garden  a      owl:Class .
:Chair  a       owl:Class .

:House  a                owl:Class ;
        rdfs:subClassOf  [ a                            owl:Restriction ;
                           owl:minQualifiedCardinality  "2"^^xsd:nonNegativeInteger ;
                           owl:onClass                  :Room ;
                           owl:onProperty               :hasPart
                         ] ;
        rdfs:subClassOf  [ a                   owl:Restriction ;
                           owl:onProperty      :hasPart ;
                           owl:someValuesFrom  :Garden
                         ] ;
        rdfs:subClassOf  [ a                         owl:Restriction ;
                           owl:onClass               :Kitchen ;
                           owl:onProperty            :hasPart ;
                           owl:qualifiedCardinality  "1"^^xsd:nonNegativeInteger
                         ] .


:Kitchen  a              owl:Class ;
        rdfs:subClassOf  [ a                   owl:Restriction ;
                           owl:onProperty      :hasPart ;
                           owl:someValuesFrom  :Table
                         ] ;
        rdfs:subClassOf  [ a                   owl:Restriction ;
                           owl:onProperty      :hasPart ;
                           owl:someValuesFrom  :Chair
                         ] .
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns="http://www.example.org/houses#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  <owl:Ontology rdf:about="http://www.example.org/houses"/>
  <owl:Class rdf:about="http://www.example.org/houses#Room"/>
  <owl:Class rdf:about="http://www.example.org/houses#House">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty>
          <owl:ObjectProperty rdf:about="http://www.example.org/houses#hasPart"/>
        </owl:onProperty>
        <owl:onClass rdf:resource="http://www.example.org/houses#Room"/>
        <owl:minQualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger"
        >2</owl:minQualifiedCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://www.example.org/houses#hasPart"/>
        <owl:someValuesFrom>
          <owl:Class rdf:about="http://www.example.org/houses#Garden"/>
        </owl:someValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://www.example.org/houses#hasPart"/>
        <owl:onClass>
          <owl:Class rdf:about="http://www.example.org/houses#Kitchen"/>
        </owl:onClass>
        <owl:qualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger"
        >1</owl:qualifiedCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  <owl:Class rdf:about="http://www.example.org/houses#Chair"/>
  <owl:Class rdf:about="http://www.example.org/houses#Table"/>
  <owl:Class rdf:about="http://www.example.org/houses#Kitchen">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://www.example.org/houses#hasPart"/>
        <owl:someValuesFrom rdf:resource="http://www.example.org/houses#Table"/>
      </owl:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://www.example.org/houses#hasPart"/>
        <owl:someValuesFrom rdf:resource="http://www.example.org/houses#Chair"/>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
</rdf:RDF>

【讨论】:

  • 您的本体允许不直观的陈述,即房屋由其他房屋组成,或者花园由厨房组成,等等。因此,当您处理未询问的事情(属性基数)时,您会做没有提供问题的解决方案,但您宁愿掩盖一个或多个 hasPart 属性的问题。所以,如果你不改进你的答案,它应该被否决。
  • @gwag 好吧,否决按钮的工具提示说“这个答案没用”。我希望这很有用,即使它还没有完全回答这个问题。在 OWL 中,某些事物可能与我们没有预料到的其他事物相关并不是完全不直观的,因为 OWL 做出了开放世界假设。尽管如此,您的观点是好的,alibenmessaoud 可能希望房屋只有这些类型的一部分,并且可以通过“房屋 subClassOf (hasPart only (厨房房间花园))”公理。我会更新我的答案。
  • @gwag 通常,OWL 本体的用途与 UML 图不同。如果我们确实有一个像“House subClassOf (hasPart only HousePart)”这样的公理,然后看到像“house73 hasPart house89”这样的公理,那么我们不会自动得到不一致。相反,我们推断 house89 具有(除了它可能具有的任何其他类型之外)类型 HousePart。如果我们在某个地方(声明或推断)House 和 HousePart 是不相交的类,我们只会得到不一致。你是绝对正确的,我在这里的答案中添加了一些解释;原因……
  • @gwag 是我认为这个问题有点不明确,并且有一些在 OWL 中建模领域的经验(这与 UML 中的建模不同),我试图说明足够多的可能的事情OP 可能一直在 尝试 去做,因此在实际做这件事时有足够的答案。
  • 虽然这个问题没有解决基数约束的问题,但它提出了一个很好的观点:一个本体中是否可以有一个通用的组合关系,或者我们是否需要定义域- 特定的组成关系?您事后添加 allValuesFrom 限制无助于回答这个问题。因此,请扩展您的答案以解决这个主要问题。否则,它没有帮助,反而令人困惑。
【解决方案2】:

确实,这种composedBy 属性的范围应该是一个联合。

由于您在 UML 类模型中有两个不同的组合,您可能必须定义两个不同的 OWL 属性,例如 houseComposedBykitchenComposedBy

正如您在评论中所建议的那样,原则上,也可以选择使用 XML 命名空间来为这些不同的 composedBy OWL 属性获取不同的名称(例如限定名称 house:composedBykitchen:composedBy)。事实上,这对应于 UML 属性,它们总是在由它们的(域)类定义的命名空间中。因此,您必须声明与属于 composedBy 属性域的类一样多的命名空间。

编辑:我将尝试总结 Joshua Taylor 和我自己的两个答案。

  1. UML 没有通用的组合关系,而是特定于类的 isComposedOf(或 hasPart)属性,这些属性在其(域)提供的命名空间中定义班级。因此,可以选择将此类 UML 属性转换为相应的 OWL 属性,这些属性可以在属性名称中隐式编码它们的命名空间,或者使用 XML 命名空间显式编码。
  2. Joshua Taylor 在回答中指出的第二种方法是基于默认情况下 OWL 属性是通用的(不限于特定域类)这一事实。这允许定义一个通用的 hasPart 属性。然而,为了获得我们在 UML 类模型中的相同范围约束,我们必须在我们的通用 hasPart 属性上定义相应的allValuesFrom 限制。除了这些对翻译必不可少的allValuesFrom 限制之外,我们还可以定义与我们的 UML 类模型中定义的多重性约束相对应的基数限制(如果有的话)。

【讨论】:

  • 我可以使用命名空间,例如 house:ComposedBy & kitchen:ComposedBy 吗?所以我必须声明一些实体??
  • 谁对我的答案投了反对票而没有在评论中解释?是同一个人删除了他被否决的答案?
  • 不是我投反对票,但这里投反对票的一种可能性是,虽然这里的属性范围确实可以是一个联合类,但如果@alibenmessaoud 正在尝试的实际问题是如果说一所房子必须(例如)至少有这些东西中的一种,那么 unionof 并没有真正的帮助;需要一些存在的限制。
  • 但是@alibenmessaoud 并没有说明这种多重性约束,所以这是您对原始问题的补充。
  • 自从我在 UML 关系中标记了组合,@Joshua 是对的。
猜你喜欢
  • 2015-05-29
  • 2011-12-12
  • 2014-02-08
  • 2017-01-04
  • 1970-01-01
  • 2014-09-18
  • 2018-01-18
  • 2014-08-05
  • 2011-07-06
相关资源
最近更新 更多