在OWL中定义类时,如何约束一个对象属性必须与另一个对象属性引用同一个体?

问题描述 投票:0回答:1

我正在学习 OWL 2 Web Ontology Language Primer 并希望在使用的“家族”示例本体的上下文中添加我自己的类。所以我添加了一个新类

City
以及一个新的对象属性
bornIn
:

ObjectProperty: bornIn
   Domain: Person
   Range: City
   Characteristics: Functional

现在我想添加另一个类

X
,它代表配偶与他们出生在同一城市的所有人。我觉得我已经准备好了所有的“成分”,但我不知道如何将它们结合起来。看来我可以使用
EquivalentTo
通过以下两个约束来定义新类:

  1. 所有
    X
    的个人都必须有配偶:
    hasSpouse some Person
  2. 原身和配偶的出生地(即
    City
    的个人)必须相同。看来我可以用财产链
    hasSpouse o bornIn
    来表示配偶的出生地。另外,从语言入门中我了解到有
    owl:sameAs
    来断言两个人是相同的。语言入门还表明,
    value
    可以用来指代一个特定的个体。但就我而言,似乎我需要某种占位符而不是特定的个人,所以我不确定如何将其结合起来。

我能想到的最好的猜测如下,但是当我将其添加到 Protégé 中的类(在类表达式编辑器中)时,我收到错误,链运算符

o
在此位置是意外的:

Class X:
   EquivalentTo: Person and (hasSpouse some Person) and (hasSpouse o bornIn value owl:sameAs bornIn value)

owl ontology protege manchester-syntax
1个回答
0
投票

这不是可以用 OWL 表达的东西,但可以通过添加 SWRL 规则来完成,假设你有一个类

SpouseBornInSameCity
:

hasSpouse(?x, ?y) ^ bornIn(?x, ?z) ^ bornIn(?y, ?z) -> SpouseBornInSameCity(?x) ^ SpouseBornInSameCity(?y) 
© www.soinside.com 2019 - 2024. All rights reserved.