[英]How can i set “only” restriction properly in protege?
我想在Protégé中代表一个球容器。 我有一个RedBallContainer类是一个容器,一个RedBall是一个球,如下图所示:
我创建了一个包含域的容器和范围球的属性Contains。
现在我想说“如果一个容器仅包含红球,则它是RedBallContainer”。 为此,我添加了以下规则:
现在,当我运行推理机时,它告诉我Container类等于Thing,但我认为我要表示的内容是错误的! 这是推理机推断的图片:
我究竟做错了什么?
好吧,您的限制规则不正确。 它说
“ RedballContainer等效于仅包含RedBallContainers的类”
它应该是:
“ RedballContainer等效于仅包含RedBalls的类”
如发现上述修复程序一样进行编辑 ,不会删除奇怪的推断对等关系。 出现此问题的原因有些令人费解,但大致是这样的:
contains
的域是Container
,因此根据定义,任何使用contains
属性的Container
。 RedBallContainer
等同于仅包含RedBall
的任何内容,因此仅包含红球的任何项目都是红球容器。 RedBallContainer
是Container
的子类。 现在想象一些不是Container
。 可能有两个选择:它要么包含某些内容,要么不包含任何内容。 如果确实包含某些内容,那么根据定义1,它毕竟仍然是一个Container
。
但是,如果它不包含任何东西,这意味着它包含的所有球其实都是红球(因为没有它包含了零个球不是红球)! 根据我们的第二个定义,这个东西就是RedBallContainer
。 根据我们的第三个定义,因此它毕竟必须是一个Container
。
简而言之,在这套规则下,某些东西不可能不是Container
。 一切都是Container
,因此Container
和Thing
是等效的。
啊,逻辑。
要解决此问题,您可以更改限制,使RedBallContainer
等同于仅包含红球的任何Container
:
EquivalentTo Container and contains only RedBall
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.