我正在学习 OWL 2 Web Ontology Language Primer 并希望在使用的“家族”示例本体的上下文中添加我自己的类。所以我添加了一个新类
City
以及一个新的对象属性 bornIn
:
ObjectProperty: bornIn
Domain: Person
Range: City
Characteristics: Functional
现在我想添加另一个类
X
,它代表配偶与他们出生在同一城市的所有人。我觉得我已经准备好了所有的“成分”,但我不知道如何将它们结合起来。看来我可以使用EquivalentTo
通过以下两个约束来定义新类:
X
的个人都必须有配偶:hasSpouse some Person
。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 表达的东西,但可以通过添加 SWRL 规则来完成,假设你有一个类
SpouseBornInSameCity
:
hasSpouse(?x, ?y) ^ bornIn(?x, ?z) ^ bornIn(?y, ?z) -> SpouseBornInSameCity(?x) ^ SpouseBornInSameCity(?y)