2

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

A P1 B
C P1 D
E P2 C

我想构建一个只捕获 A 而不是 C 的类。所以我设置了一个类,例如,

  1. myClass EquivalentTo: (P1 some owl:Thing) 和 (P1 only owl:Thing)
  2. myClass EquivalentTo: (P1 some owl:Thing) and (not inverse P2 some owl:Thing)

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

4

1 回答 1

1

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

失败是因为类表达式真的等同于P1 some Thing。由于每个人都是Thing的一个实例,因此交叉点的右侧实际上并没有添加任何内容。

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

这对于您给出的描述实际上是正确的。您希望个人对 P1(好)有一些价值,而不是其他个人的 P2 价值。这是描述它的方式。

我认为您遇到的问题是,虽然您的数据集不包含任何形式的三元组

    × P2 一个

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

在这种情况下,如果您想说A不是其他人的 P2 值,您可能必须手动执行此操作,方法是向A添加一个类型,例如:

    逆P2 only owl:Nothing

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

额外公理

门生截图

于 2016-05-16T12:41:27.067 回答