我正在使用Protegé创建OWL本体,并且遇到了问题。
我进行了以下设置:
(relation1)
ClassA isTriggeredBy ClassB
(relation1)
ClassC isTriggeredBy ClassD
尽管如此,该关系应该是(ClassA,ClassB)或(ClassC,ClassD)。我不希望像(ClassA,ClassD)这样的组合成为可能,因为从本体语义角度来看这是没有意义的。为了避免这种情况,我在Relation1 isTriggeredBy 的对象属性描述中指定了以下内容:
Domain (intersection)
ClassA or ClassC
Ranges (intersection)
ClassB or ClassD
并且我在 ClassA 和 ClassC 的 Class Description 中添加了局部约束:
Description:ClassA
SubClass Of
isTriggeredBy some ClassB
Description:ClassC
SubClass of
isTriggeredBy some ClassD
但是我不知道这是否正确。而且,我不知道这是否是更合适的方法,或者是否有必要创建不同的对象属性。
感谢您的关注和支持,
pLs
答案 0 :(得分:2)
要回答您的问题,了解使用域和范围限制的原因很重要。如果有
ObjectProperty: isTriggeredBy
Domain: A
Range: B
您想要实现的是,每当您知道单个a
通过isTriggeredBy
与单个b
相关时,推理者就可以推断出a
的类型A
和b
的类型为B
。
如果有
ObjectProperty: isTriggeredBy
Domain: ClassA or ClassC
Range: ClassB or ClassD
最多可以推断出个体a
的类型为ClassA or ClassC
,个体b
的类型为ClassB or ClassD
。即使添加了公理也是如此
Class:ClassA
SubClassOf: isTriggeredBy some ClassB
Class:ClassC
SubClassOf:isTriggeredBy some ClassD
您将不区分(ClassA
,ClassB
)和(ClassC
,ClassD
)之间的关系。
实现这种区分的一种方法是使用子属性:
ObjectProperty: isTriggeredBy
Domain: ClassA or ClassC
Range: ClassB or ClassD
ObjectProperty: isTriggeredByB
SubPropertyOf: isTriggeredBy
Domain: ClassA
Range:ClassB
ObjectProperty: isTriggeredByD
SubPropertyOf: isTriggeredBy
Domain: ClassC
Range:ClassD
然后,当您有一个通过a
与单个isTriggeredByB
关联的单个b
时,它将推断a
的类型为ClassA
和{ {1}}的类型为b
。