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

使用OWL/RDF/XML创建unionOf的实例,xml,rdf,owl,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="hous

我下面有一个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的正确方法吗

注意。

为什么需要联合类的实例? 当我回答的其余部分将讨论如何创建一个联合类的实例时,我认为你应该考虑你这样做的原因。如果这与您前面的问题有关(这似乎很可能),并且您试图说某个属性的范围是联合类,例如

hasComponent rdfs:范围(类型A或类型B)

为了将某个x用作hasComponent语句的对象,不需要声明某个x的类型(TypeA或TypeB)。相反地。这里所有的rdfs:range声明都提供了观察语句的能力

y分量x

并由此推断

x rdf:类型(类型A或类型B)

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

如何创建它们 我不确定您到底在问什么(您是在尝试生成某些公理的RDF/XML序列化,还是什么),但我认为我们可以找到解决方案。通过使用Protégé,可以很容易地创建一个个体,并将其声明为某个联合类的类型。例如,我们可以断言

x:ABC

在Protégé中:

我们可以看看这个OWL本体的RDF序列化。如果出于某种原因需要手工编写,Turtle序列化是最容易阅读和编写的:

@前缀:。
@前缀rdfs:。
@前缀owl:。
@前缀xsd:。
@前缀rdf:。
##本体声明
猫头鹰:本体论。
##三级
:猫头鹰:上课。
:B猫头鹰:上课。
:C猫头鹰:上课。
##x是一个东西,一个命名的个体,和
##A(A或B或C)。
:一只猫头鹰:东西,猫头鹰:名字是个人;
猫头鹰:类;
owl:unionOf(:A:B:C)
] .
如果您在RDF/XML中确实需要它,那么这只是RDF图的另一个序列化:


您可能还对它的非缩写序列化感兴趣。它更冗长,可读性也更低,但如果您是这样做的话,手写可能会更容易一些:


为什么需要联合类的实例? 当我回答的其余部分将讨论如何创建一个联合类的实例时,我认为你应该考虑你这样做的原因。如果这与您前面的问题有关(这似乎很可能),并且您试图说某个属性的范围是联合类,例如

hasComponent rdfs:范围(类型A或类型B)

为了将某个x用作hasComponent语句的对象,不需要声明某个x的类型(TypeA或TypeB)。相反地。这里所有的rdfs:range声明都提供了观察语句的能力

y分量x

并由此推断

x rdf:类型(类型A或类型B)

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

如何创建它们 我不确定您到底在问什么(您是在尝试生成某些公理的RDF/XML序列化,还是什么),但我认为我们可以找到解决方案。通过使用Protégé,可以很容易地创建一个个体,并将其声明为某个联合类的类型。例如,我们可以断言

x:ABC

在Protégé中:

我们可以看看这个OWL本体的RDF序列化。如果出于某种原因需要手工编写,Turtle序列化是最容易阅读和编写的:

@前缀:。
@前缀rdfs:。
@前缀owl:。
@前缀xsd:。
@前缀rdf:。
##本体声明
猫头鹰:本体论。
##三级
:猫头鹰:上课。
:B猫头鹰:上课。
:C猫头鹰:上课。
##x是一个东西,一个命名的个体,和
##A(A或B或C)。
:一只猫头鹰:东西,猫头鹰:名字是个人;
猫头鹰:类;
owl:unionOf(:A:B:C)
] .
如果您在RDF/XML中确实需要它,那么这只是RDF图的另一个序列化:


您可能还对它的非缩写序列化感兴趣。它更冗长,可读性也更低,但如果您是这样做的话,手写可能会更容易一些:



另一个可能是