使用OWL / RDF / XML创建unionOf的实例

时间:2014-02-21 13:40:58

标签: xml rdf owl

我在下面有OWL的这个例子,我想知道如何为" unionOf"

启动和创建一个实例(个体)

我想知道如何制作这个

的实例
<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#" >

<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:about="house_composedBy">
    <rdfs:domain rdf:resource="#house"/>
    <rdfs:range>
        <owl:Class>
            <owl:unionOf rdf:parseType="Collection">
                <owl:Class rdf:about="room" />
                <owl:Class rdf:about="kitchen" />
                <owl:Class rdf:about="garden" />
            </owl:unionOf>
        </owl:Class>
    </rdfs:range>
</owl:ObjectProperty>

我是这样开始的,但我停了下来,因为如果我不知道其类型,我就不知道我要添加哪个对象。

示例,

<u:house rdf:ID="p_house01">
    <u:house_composedBy about="room01" />
    <u:house_composedBy about="room02" />
    <u:house_composedBy about="kitchen" />
    <u:house_composedBy about="garden" />
</u:house> 

我现在还不知道如何区分个体,是不是用unionOf做到这一点的正确方法?

问候。

1 个答案:

答案 0 :(得分:4)

为什么需要联合类的实例?

虽然我的其余部分将解决您如何创建联合类的实例,但我认为您应该考虑您正在执行此操作的原因。如果这与您之前的问题uml Composition relationships to RDF and OWL相关,这似乎很可能,并且您试图说明属性的范围是联合类,例如

  

hasComponent rdfs:range(TypeA或TypeB)

需要声明某些单独的x是类型(TypeA或TypeB),以便将它用作hasComponent语句的对象。反之。这里所有的rdfs:range声明都能让你能够观察语句

  

y hasComponent x

推断

  

x rdf:type(TypeA或TypeB)

您无需事先在x上声明任何类型。域和范围声明允许您根据它们在断言中的使用方式推断事物的类型;它们不提供任何一致性强制或完整性约束。

如何创建它们

我不确定你究竟在问什么(你是否正在尝试生成某些公理的RDF / XML序列化,或者是什么),但我认为我们可以找到解决方案。 WingProtégé,很容易创建一个人,并声明它具有某种类型的联合类。例如,我们可以断言

  

x: B C

在Protégé:

unionOf example

我们可以看一下这个OWL本体的RDF序列化。如果你因为某些原因需要手工编写,那么Turtle序列化是最容易阅读的,也是最容易编写的:

@prefix :      <http://www.example.org/unionof-example#> .
@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#> .

## Ontology declaration
<http://www.example.org/unionof-example>
        a       owl:Ontology .

## Three classes
:A      a       owl:Class .
:B      a       owl:Class .
:C      a       owl:Class .

## x is a thing, a named individual, and 
## an (A or B or C).
:x      a       owl:Thing , owl:NamedIndividual ;
        a       [ a            owl:Class ;
                  owl:unionOf  ( :A :B :C )
                ] .

如果你真的需要这个RDF / XML,那只是RDF图的另一个序列化:

<rdf:RDF
    xmlns="http://www.example.org/unionof-example#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    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/unionof-example"/>
  <owl:Class rdf:about="http://www.example.org/unionof-example#A"/>
  <owl:Class rdf:about="http://www.example.org/unionof-example#B"/>
  <owl:Class rdf:about="http://www.example.org/unionof-example#C"/>
  <owl:Thing rdf:about="http://www.example.org/unionof-example#x">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#NamedIndividual"/>
    <rdf:type>
      <owl:Class>
        <owl:unionOf rdf:parseType="Collection">
          <owl:Class rdf:about="http://www.example.org/unionof-example#A"/>
          <owl:Class rdf:about="http://www.example.org/unionof-example#B"/>
          <owl:Class rdf:about="http://www.example.org/unionof-example#C"/>
        </owl:unionOf>
      </owl:Class>
    </rdf:type>
  </owl:Thing>
</rdf:RDF>

您可能也对该非缩写序列化感兴趣。它更冗长,人性化程度更低,但如果你正在做的话,手写的可能会更容易一些:

<rdf:RDF
    xmlns="http://www.example.org/unionof-example#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" > 
  <rdf:Description rdf:about="http://www.example.org/unionof-example#A">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
  </rdf:Description>
  <rdf:Description rdf:nodeID="A0">
    <rdf:first rdf:resource="http://www.example.org/unionof-example#B"/>
    <rdf:rest rdf:nodeID="A1"/>
  </rdf:Description>
  <rdf:Description rdf:about="http://www.example.org/unionof-example#B">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
  </rdf:Description>
  <rdf:Description rdf:nodeID="A2">
    <rdf:first rdf:resource="http://www.example.org/unionof-example#A"/>
    <rdf:rest rdf:nodeID="A0"/>
  </rdf:Description>
  <rdf:Description rdf:about="http://www.example.org/unionof-example#C">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
  </rdf:Description>
  <rdf:Description rdf:nodeID="A3">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
    <owl:unionOf rdf:nodeID="A2"/>
  </rdf:Description>
  <rdf:Description rdf:nodeID="A1">
    <rdf:first rdf:resource="http://www.example.org/unionof-example#C"/>
    <rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
  </rdf:Description>
  <rdf:Description rdf:about="http://www.example.org/unionof-example">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Ontology"/>
  </rdf:Description>
  <rdf:Description rdf:about="http://www.example.org/unionof-example#x">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#NamedIndividual"/>
    <rdf:type rdf:nodeID="A3"/>
  </rdf:Description>
</rdf:RDF>