rdf范围约束中的多个不相交类

时间:2017-11-28 15:22:11

标签: sparql rdf owl rdfs inference

我想将多个类(具有有限的推理)定义为owl objecttypeproperty的范围。让我举一个例子来详细解释。

我有两个类:家具和设备,它们不是不相交的,即另一个子类/实例可以从这两个类继承,例如,Lamp可以是家具和设备。

现在我想定义一个OWL objecttypeproperty:hasComponent,它只能接受范围:Furniture或:Device,而不是两者。

:hasComponent rdf:type owl:ObjectProperty ;
         rdf:type owl:TransitiveProperty ;
         rdfs:range :Furniture ,
                    :Device .

当我使用属性创建实例时:

:furniture1 rdf:type :furniture .
:device1 rdf:type :device .
:furtniture1 :hasComponent :lamp .

推理引擎会推断:device1是:家具,我不想要,因为我已经定义了device1是一个设备。

一种解决方案是删除rdf:range并显式定义实例类型,但我不想删除范围,因为它会限制搜索空间的范围。

1 个答案:

答案 0 :(得分:2)

您必须创建所涉及的所有类的联合类并减去它们的交集(例如:((Furniture or Device) and not (Furniture and Device)))并将该类设置为范围。需要对域使用相同的方法。

您可以将其声明为命名类,或将其(包含必要的RDF / XML结构)直接插入到范围公理中。我认为您可能需要在多个地方使用相同的类,因此命名类可能是最佳解决方案。