说我有一个“成人”类和一个“孩子”类,以及两个对象属性“ isFatherOf”和“ playsMonopolyWith”。假设我想要所有与孩子一起垄断的父亲。现在,我可以做一个类似的子类:
Adult
isFatherOf some Child
playsMonopolyWith some Child
但这并不完全正确,因为这里将包括一个仅与他人的孩子一起垄断的父亲。真正想要的是:
Adult
(isFatherOf and PlaysMonopolyWith) some child
父亲与父亲垄断的孩子必须与父亲一样。
这给出语法错误。所以我猜想描述逻辑不允许这种构造?有解决方法吗?
答案 0 :(得分:1)
为了描述业务逻辑,通常最好使用推理规则代替OWL逻辑。
以您的示例为例,如果您想为NiceFather
自己Father
的{{1}}个用户playsMonopolyWith
来上课,Child
。
转到“窗口”>“标签” ,并选中“ SWRLTab” ,然后转到新创建的“ SWRLTab” 。点击“新建”按钮。
写下您在问题中描述的规则。语法非常简单。
isFatherOf(?father, ?child) ^ playsMonopolyWith(?father, ?child) -> NiceFather(?father)
单击“确定”以创建规则,然后运行推理程序。
Here是要点,您可以在Protégé中下载并打开。正如您所看到的,阿尔伯特是个好父亲,因为他与儿子阿尔伯特·小鲍勃一起玩《大富翁》,而不是一个好父亲,因为他是与小阿尔伯特而不是自己的儿子鲍勃·小鲍勃一起玩大富翁:)< / p>