GraphDB无法基于含逆属性的属性链公理推理的问题及解决
问题场景
我创建了一个OWL本体,结构如下:
- 类层级:
LabInfra下包含Node和Connection;Connection又分为RedConnection、BlueConnection - 对象属性层级:
endpoint下包含endpointA、endpointB;endpointA的子属性为redEndpointA、blueEndpointA;endpointB的子属性为redEndpointB、blueEndpointB - 个体关联:所有
RedConnection个体通过redEndpointA和redEndpointB指向Node个体;BlueConnection个体同理通过blueEndpointA、blueEndpointB关联Node - 定义了两个属性链公理:
inverse(redEndpointB) o redEndpointA → connectedToByRedinverse(blueEndpointB) o blueEndpointA → connectedToByBlue
在Protege中使用HermiT推理器时,能正常基于上述公理推导出connectedToByRed和connectedToByBlue的关联关系,但将本体导入采用OWL2-RL规则集的GraphDB仓库后,无法得到对应的推理结果。
原因分析
GraphDB的OWL2-RL推理器不支持在属性链公理中直接使用inverse(someProperty)形式的元素。HermiT作为完整的OWL2推理器,支持处理这类包含逆属性的属性链语义,但OWL2-RL作为轻量级规则集,在GraphDB的实现中对这类语法做了限制。
解决方案
通过新增显式命名的逆属性,替代属性链中的inverse(someProperty)即可解决:
- 为
redEndpointB创建显式逆属性(比如isRedEndpointBOf),并标注该属性为redEndpointB的逆属性(即添加InverseOf(redEndpointB)公理) - 为
blueEndpointB创建显式逆属性(比如isBlueEndpointBOf),标注其为blueEndpointB的逆属性 - 修改属性链公理:
- 将
inverse(redEndpointB) o redEndpointA → connectedToByRed替换为isRedEndpointBOf o redEndpointA → connectedToByRed - 将
inverse(blueEndpointB) o blueEndpointA → connectedToByBlue替换为isBlueEndpointBOf o blueEndpointA → connectedToByBlue
- 将
- 将修改后的本体重新导入GraphDB,即可正常推导出预期的关联谓词。
内容的提问来源于stack exchange,提问作者fgabor
相关产品推荐
相关产品推荐

