排除与某些特定逆属性相关的个体

Exclude individuals that is related by some specific inverse properties

我有一些个体 A、B、C、D、E 和两个属性 P1、P2。

A P1 B
C P1 D
E P2 C

我想构建一个只捕获 A 但不捕获 C 的 Class。所以我设置了一个 Class,比如

  1. 我的Class 等价于:(P1 一些 owl:Thing)和(仅 P1 owl:Thing)
  2. myClass 等价于: (P1 some owl:Thing) and (not inverse P2 some owl:Thing)

但所有这些尝试都失败了。如何区分个人A和C?

myClass EquivalentTo: (P1 some owl:Thing) and (P1 only owl:Thing)

失败是因为 class 表达式实际上等同于 P1 some Thing。由于 每个 个体都是 Thing 的一个实例,因此交叉点的右侧实际上没有添加任何东西。

myClass EquivalentTo: (P1 some owl:Thing) and (not inverse P2 some owl:Thing)

这对于您提供的描述实际上是正确的。您希望个人对 P1 有一定的价值(好),并且 而不是 其他个人的 P2 价值。这是描述的方式。

我认为您遇到的问题是虽然您的数据集不包含

形式的任何三元组

x P2 A

ontology 中没有任何内容表明这样的事情是不可能的。所以你不能确定 A 实际上有类型 (not inverse P2 some Thing)。这种现象被称为开放世界假设 (OWA)。如果您搜索它,您会在 OWL 中找到关于 OWA 的其他一些关于 Stack Overflow 的问题。参见,例如:

  • Why is this DL-Query not returning any individuals?
  • Strange query behaviour in OWL!

在这种情况下,如果你想说 A 不是其他人的 P2 值,你可能必须手动完成,通过添加输入 A 如:

仅反向 P2 owl:Nothing

一旦你这样做了,你就会得到你想要的结果: