uml与RDF和OWL的组合关系

uml与RDF和OWL的组合关系,uml,rdf,owl,Uml,Rdf,Owl,我是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/

我是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>


我不知道该怎么做才能使这个被多次使用的组合关系。 我在考虑把范围扩大到收藏类型

(房子)---composedBy(房间、厨房、花园)

但是,我想用同样的关系

(厨房)---comoposedBy-----(桌子、椅子)

验证程序出错,因为我两次使用composedBy作为ID。(我现在把它拆了)

如何正确翻译此图表


:)

事实上,这样一个
composedBy
属性的范围应该是一个并集

由于UML类模型中有两种不同的组合,因此可能必须定义两种不同的OWL属性,如
houseComposedBy
kitchenComposedBy

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

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

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

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

    豪斯&斯克泰克酒店=1.厨房部分
    豪斯&斯克泰克酒店;≥2部分房间
    豪斯&斯克泰克酒店;∃哈斯帕特花园酒店

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

    厨房及厨房;∃hasPart.椅子
    厨房及厨房;∃hasPart.桌子

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

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

    @前缀:。
    @前缀rdfs:。
    @前缀owl:。
    @前缀xsd:。
    @前缀rdf:。
    猫头鹰:本体论。
    :hasPart a owl:ObjectProperty。
    :表a猫头鹰:类。
    :a房间猫头鹰:上课。
    :花园猫头鹰:上课。
    :坐猫头鹰:上课。
    :家猫头鹰:班级;
    rdfs:子类[a owl:限制;
    owl:minQualifiedCardinality“2”^^xsd:nonNegativeInteger;
    猫头鹰:onClass:房间;
    owl:onProperty:hasPart
    ] ;
    rdfs:子类[a owl:限制;
    owl:onProperty:hasPart;
    猫头鹰:一些来自花园的价值
    ] ;
    rdfs:子类[a owl:限制;
    猫头鹰:onClass:厨房;
    owl:onProperty:hasPart;
    owl:qualifiedCardinality“1”^^xsd:nonNegativeInteger
    ] .
    :厨房猫头鹰:班级;
    rdfs:子类[a owl:限制;
    owl:onProperty:hasPart;
    owl:表中的某些值
    ] ;
    rdfs:子类[a owl:限制;
    owl:onProperty:hasPart;
    猫头鹰:椅子上的一些价值
    ] .
    
    
    2.
    1.
    
    我可以使用名称空间吗?例如,house:ComposedBy&kitchen:ComposedBy??所以我必须声明一些实体??谁没有在评论中解释就否决了我的答案?同一个人删除了他被否决的答案?被否决的不是我,但这里被否决的一种可能性是,虽然财产的范围