如何在 protege 中正确设置 "only" 限制?

How can i set "only" restriction properly in protege?

我想在 Protégé 中代表一个装球的容器。我有一个 RedBallContainer class 是一个 Container 和一个 RedBall 是一个 Ball,如下图所示:

我已经创建了一个 属性 包含域 Container 和 Range Ball。

现在我想说"a container is a RedBallContainer if only contains red balls"。为此,我添加了以下规则:

现在,当我 运行 推理机时,它告诉我 Container class 等于 Thing,但我认为我想要表示的东西是错误的!这里有一张推理者推断的图片:

我做错了什么?

嗯,你的限制规则不正确。它说

"RedballContainer is equivalent to a class that only contains RedBallContainers"

应该是:

"RedballContainer is equivalent to a class that only contains RedBalls"

Edit 如您所见,上述修复并未删除奇怪的推断等价关系。它存在的原因有点复杂,但大致是这样的:

  1. 我们知道 contains 的域是 Container,因此根据定义,任何使用 contains 属性 的域都是 Container
  2. 我们知道 RedBallContainer 等同于任何只包含 RedBall 的东西,所以任何只包含红球的物品都是红球容器。
  3. 我们还知道 RedBallContainerContainer 的子类。

现在想象一些不是 Container 的项目。有两种选择:要么包含某些内容,要么什么都不包含。如果它确实包含某些东西,根据定义 1,它毕竟仍然是 Container

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

简而言之,在这套规则下,不可能有不是 Container 的东西。一切都是 Container,所以 ContainerThing 是等价的。

啊,逻辑。

要修复,您可以将限制更改为 RedBallContainer 等同于任何仅包含红球的 Container

   EquivalentTo Container and contains only RedBall