我怎样才能在protege中正确设置“仅”限制?

时间:2018-07-01 14:02:13

标签: owl ontology protege

我想在Protégé中代表一个球容器。我有一个RedBallContainer类是一个容器,一个RedBall是一个球,如下图所示:

class hierarchy

我创建了一个属性Contains,该属性包含域Container和Range Ball。

现在我想说“如果一个容器仅包含红球,则它就是RedBallContainer”。为此,我添加了以下规则:

rule

现在,当我运行推理机时,它告诉我Container类等于Thing,但我认为我要表示的内容是错误的!这是推理机推断的图片:

reasoner result

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

好吧,您的限制规则不正确。它说

“ RedballContainer等效于仅 包含RedBallContainers的类”

应为:

“ RedballContainer等效于仅 包含RedBalls的类”

编辑,因为您发现上述修复并未删除奇怪的推断对等关系。出现这种情况的原因有些令人费解,但大致是这样:

  1. 我们知道contains的域是Container,因此,根据定义,任何使用contains属性的事物都是Container
  2. 我们知道RedBallContainer等同于仅包含RedBall的任何内容,因此,仅包含红球的任何项目都是一个红球容器。
  3. 我们还知道RedBallContainerContainer的子类。

现在想象一下某个不是Container的项目。可能有两个选择:它要么包含某些内容,要么不包含任何内容。如果确实包含某些内容,那么根据定义1,它毕竟仍然是Container

但是,如果它不包含任何东西,则意味着它所包含的所有球实际上都是红色球(因为其中所包含的零球都不是红色球)!根据我们的第二个定义,这个东西因此是RedBallContainer。因此,根据我们的第三个定义,它必须是Container

简而言之,在这套规则下,某事物不可能不是Container。一切都是Container,因此ContainerThing是等效的。

啊,逻辑。

要解决此问题,您可以更改限制,使RedBallContainer等同于仅包含红球的任何Container

   EquivalentTo Container and contains only RedBall