如何在Protege的SWRL规则中定义不同个体,避免自关联兄弟关系
解决SWRL规则中个体自关联的兄弟关系问题
这个问题我之前也帮人处理过,核心原因是你的SWRL规则缺少了个体不等约束,让推理机误以为同一个个体也能满足匹配条件!
修正后的SWRL规则
只需要在规则的前提部分添加SWRL内置谓词swrlb:differentFrom,用来强制约束两个变量指向不同个体:
isSonOf(?BB, ?AA) ^ isSonOf(?CC, ?AA) ^ swrlb:differentFrom(?BB, ?CC) -> isBrotherOf(?BB, ?CC)
规则说明
swrlb:differentFrom(?BB, ?CC)是SWRL内置库的标准谓词,作用就是确保?BB和?CC不能绑定到同一个实例- 现在只有当两个不同的个体同时是
?AA的儿子时,才会被推断为兄弟关系,彻底避免了个体自关联的不合理结果
注意事项
要确保你的本体已经导入了SWRL Built-ins的命名空间:http://www.w3.org/2003/11/swrlb#。大多数本体编辑工具(比如Protégé)都支持直接导入这个命名空间,或者你可以手动添加前缀声明(比如swrlb: <http://www.w3.org/2003/11/swrlb#>),否则推理机无法识别swrlb:differentFrom这个谓词。
内容的提问来源于stack exchange,提问作者yangz
相关产品推荐
相关产品推荐

