我想将多个类(具有有限的推理)定义为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并显式定义实例类型,但我不想删除范围,因为它会限制搜索空间的范围。
答案 0 :(得分:2)
您必须创建所涉及的所有类的联合类并减去它们的交集(例如:((Furniture or Device) and not (Furniture and Device))
)并将该类设置为范围。需要对域使用相同的方法。
您可以将其声明为命名类,或将其(包含必要的RDF / XML结构)直接插入到范围公理中。我认为您可能需要在多个地方使用相同的类,因此命名类可能是最佳解决方案。