OWL 2推理规则构建咨询:如何实现“不喜欢则厌恶”的推理?
在Protege中实现「不喜欢则厌恶」推理规则的操作步骤
嘿,我来手把手教你在Protege里搞定这个推理逻辑。你已经搭好了基础:设置了like和dislike属性不相交,还有个体A的专属公理,现在要补的是「某人不喜欢某物就厌恶该物」的规则,下面分两种方法来操作,看你偏好哪种:
方法一:用OWL互补属性定义(推荐,更符合OWL语义)
你要的「不喜欢→厌恶」,本质上是让like和dislike成为互补属性——意思是对任意两个个体x和y,要么x喜欢y,要么x厌恶y,不存在中间状态。结合你已经设置的「不相交」特性,这两个属性就构成了完全的二分关系。操作步骤:
- 打开Protege,切换到「Object Properties」标签页(如果你的
like/dislike是数据属性,就切到「Data Properties」标签) - 在左侧的属性列表里找到
like,右键点击它选择「Edit...」 - 在弹出的编辑窗口中,切换到「Characteristics」标签页
- 勾选「Complement Of」选项,然后在右侧的下拉框里选中
dislike属性,点击「OK」保存 - 搞定!之后只要启动推理机(比如HermiT),它就会自动推导:如果某个个体x没有
like(x,y)的断言,或者有明确的not like(x,y)公理,就会自动生成dislike(x,y)的结论
方法二:用SWRL显式规则实现(灵活适配复杂场景)
如果你更习惯用直白的规则语句来表达,SWRL规则会更直观。不过要先确保装了SWRLTab插件:
- 点击顶部菜单栏的「File」→「Check for plugins...」,搜索「SWRLTab」并安装,之后重启Protege
- 切换到「SWRLTab」标签页,在规则编辑框里输入这条规则:
not like(?x, ?y) → dislike(?x, ?y) - 点击编辑框下方的「Add」按钮,把这条规则添加到知识库中
- 启动推理机:顶部菜单栏「Reasoner」→ 选一个支持SWRL的推理机(比如HermiT、Pellet)→ 点击「Start Reasoner」
- 推理完成后,所有符合「不喜欢某物」条件的个体,都会被自动加上「厌恶该物」的断言
验证推理是否生效
为了确认规则真的起作用,你可以做个小测试:
- 创建两个新个体
C和D,给C添加断言not like(C, D)(注意:OWL默认是开放世界假设,只不给C加like(C,D)的话,推理机不会默认它不喜欢,所以要显式加否定断言) - 启动推理机后,查看
C的属性断言,应该能看到自动推导出来的dislike(C, D)
内容的提问来源于stack exchange,提问作者LostIT
相关产品推荐
相关产品推荐

