2

我正在使用 Protegé 创建 OWL 本体,但我有疑问。

我有以下设置:

        (relation1)
ClassA isTriggeredBy ClassB

        (relation1)
ClassC isTriggeredBy ClassD

然而,关系应该是(ClassA,ClassB)或(ClassC,ClassD)。我不希望像 (ClassA, ClassD) 这样的组合成为可能,因为从本体语义的角度来看它没有意义。我试图通过在relationship1 isTriggeredBy的对象属性描述中指定以下内容来避免这种情况:

Domain (intersection)
ClassA or ClassC

Ranges (intersection)
ClassB or ClassD

我在ClassAClassC的类描述中添加了局部约束:

Description:ClassA
SubClass Of
isTriggeredBy some ClassB

Description:ClassC
SubClass of
isTriggeredBy some ClassD

但我不知道这是否正确。此外,我不知道这是否是更合适的方法,或者是否有必要创建不同的对象属性。

感谢关注和支持,

pLs

4

1 回答 1

3

要回答您的问题,了解使用域和范围限制的原因很重要。如果有

ObjectProperty: isTriggeredBy
  Domain: A
  Range: B 

您想要实现的是,只要您知道某个个体与个体a之间存在关联,推理器就可以推断出它属于类型并且属于类型。isTriggeredBybaAbB

如果你有

ObjectProperty: isTriggeredBy
  Domain: ClassA or ClassC
  Range: ClassB or ClassD

它最多可以推断出 individuala是 typeClassA or ClassC和 individualb是 type 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时,它会推断出 that ais of typeClassA并且bis of type ClassB

于 2018-07-31T15:15:28.293 回答