OWL 不同类的相同对象属性

Posted

技术标签:

【中文标题】OWL 不同类的相同对象属性【英文标题】:OWL Same Object Property for different Classes 【发布时间】:2018-11-03 20:35:01 【问题描述】:

我正在尝试将 UML 类图转换为 Ontoloy,但我有一个问题。

假设我有以下设置:

        rel1
ClassA ------> ClassB

        rel1
ClassC ------> ClassD

对于第一种情况,我将关系“rel1”转换为对象属性,如下所示:

_x:rel1 rdf:type owl:ObjectProperty ;
    rdfs:domain _x:ClassA ;
    rdfs:range _x:ClassB .

但我不知道如何进行第二个。我想要的是: rel1 具有域-范围对 (ClassA,ClassB) OR (ClassC, ClassD)。首先我考虑使用联合,但它没有以适当的方式对其建模,因为像 (ClassA, ClassD) 或 (ClassC, ClassB) 这样的组合是可能的。

希望有人能帮忙。

谢谢你, 约翰

【问题讨论】:

【参考方案1】:

您的rel1 关联的意思是,它具有ClassAClassC 的联合域,其范围是ClassBClassD 的联合域,您可以按如下方式指定:

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

为属性指定域和范围限制的主要好处是,如果通过该属性链接了 2 个个体,则推理器可以推断出个体的类型。如上所述指定域和范围将不允许这样做,因为ClassA or ClassC 是一个匿名类,并且推理器通常只对命名类而不是匿名类进行推理。要解决此问题,您可以执行以下操作:

Class: Rel1Domain 
  EquivalentTo: ClassA or ClassC

Class: Rel1Range 
  EquivalentTo: ClassB or ClassD

ObjectProperty: rel1
  Domain: Rel1Domain
  Range: Rel1Range    

【讨论】:

好吧,我忘了提到的是,关系应该是(ClassA,ClassB)或(ClassC,ClassD)。我不希望像 (ClassA, ClassD) 这样的组合成为可能。所以我不知道工会是否能做到这一点。 那么你真的有2个不同的属性,它应该被称为不同的名字。 IE。 rel1AB rel1CD 以及您需要的域和范围。 问题是,我应该根据 UML 类图来做。而且我不允许更改它。但如果没有解决方法,也许我必须这样做。顺便说一句,我使用了你在论文中描述的许多 UML 到 OWL 规则,所以谢谢你。这真的很有帮助:) 你可以设置局部约束来排除不需要的对;即,添加一个公理,说明 ClassA 是 forall rel1 ClassB 的子类。这意味着任何在 ClassA 的个人和 ClassD 的个人之间使用 rel1 都会失败(假设 ClassB 和 ClassD 是不相交的)。否则,您必须放弃通用范围并指定每次使用时您希望成为 rel1 的填充物。 @John 当 UML 中不同类之间有关联 rel1 时,rel1 的实际限定名是不同的。 IE。它是A::rel1C::rel1。因此,严格来说,它们是不同的关联。但是,如果您按照我的建议将域和范围收集在一起,您会发现各种建模启发式违规行为。我将在my dissertation 的第 7 章讨论这个问题。

以上是关于OWL 不同类的相同对象属性的主要内容,如果未能解决你的问题,请参考以下文章

OWL 对象属性双向

owl中的递归对象属性

OWL 对象属性域/范围限制到同级类

OWL:如何从超类继承两个类之间的属性关系?

面向对象

面向对象