uml与RDF和OWL的组合关系

时间:2014-02-20 22:02:20

标签: uml rdf owl

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

我试图将此图转换为OWL语法。

enter image description here

<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)

验证器发出错误,因为我使用了composBy作为ID两次。 (我现在把它删除了)

如何正确翻译此图表。

:))

2 个答案:

答案 0 :(得分:3)

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

  

House⊑= 1 hasPart.Kitchen
  House⊑≥2havePart.Room
  House⊑⊑hasPart.Garden

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

  

厨房⊑⊑hasPart.Chair
  厨房⊑⊑hasPart.Table

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

house ontology, kitchen class with axioms

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>

答案 1 :(得分:0)

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

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

正如您在评论中所建议的那样,原则上,使用XML命名空间来获取这些不同composedBy OWL属性的不同名称(如限定名称house:composedBy和{{1 }})。实际上,这对应于UML属性,它们始终位于由(域)类定义的命名空间中。因此,您必须声明与具有kitchen:composedBy属性的域的类一样多的名称空间。

编辑:我将尝试总结约书亚泰勒和我自己的两个答案。

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