我有一些个人A,B,C,D,E和两个属性P1,P2。
A P1 B
C P1 D
E P2 C
我想构建一个只捕获A而不是C的类。所以我设置了一个类,
但所有这些尝试都失败了。如何区分个体A和C?
答案 0 :(得分:1)
myClass EquivalentTo :( P1 some owl:Thing)and(P1 only owl:Thing)
失败,因为类表达式实际上等同于 P1 some Thing 。由于每个个体都是 Thing 的实例,因此交叉点的右侧实际上不会添加任何内容。
myClass EquivalentTo :( P1 some owl:Thing)and(而不是反P2某些猫头鹰:事情)
对于您提供的说明,这实际上是正确的。你想要那些对P1有好处的人(好),而不某个人的P2值。这是描述它的方式。
我认为您遇到的问题是,虽然您的数据集不是包含形式的任何三元组
x P2 A
本体论中没有任何内容表明这样的事情是不可能的。所以你不能确定 A 实际上有类型(不是反P2某事)。这种现象被称为开放世界假设(OWA)。如果你搜索它,你会在Stack Overflow上找到关于OWL中OWA的一些其他问题。例如,见:
在这种情况下,如果您想说 A 不是某个其他人的P2值,您可能需要通过向添加类型来手动执行此操作一个喜欢:
逆P2只有猫头鹰:没什么
一旦你这样做,你将得到你想要的结果: