GraphDB 为何未推理含 inverseOf 的属性链?
数据小许
结论
从这个案例的实验结果看,问题可能出在属性链中逆属性的写法上:GraphDB 没有通过包含 owl:inverseOf 匿名节点的链完成推理。可以先为逆关系声明一个有名称的对象属性,再在属性链中引用它。这样,链中就不再需要用匿名节点表示逆属性。
调整属性链
原属性链在 Turtle 中用匿名节点表示 inverse(:redEndpointB):
:connectedToByRed owl:propertyChainAxiom (
[ owl:inverseOf :redEndpointB ]
:redEndpointA
) .
为逆关系声明命名属性,并将其加入属性链:
:redEndpointBInverse owl:inverseOf :redEndpointB .
:connectedToByRed owl:propertyChainAxiom (
:redEndpointBInverse
:redEndpointA
) .
蓝色连接也可以照此处理:
:blueEndpointBInverse owl:inverseOf :blueEndpointB .
:connectedToByBlue owl:propertyChainAxiom (
:blueEndpointBInverse
:blueEndpointA
) .
owl:inverseOf 声明命名属性与原属性互为逆属性。链的顺序不变:先沿 :redEndpointBInverse(或 :blueEndpointBInverse)关系,再沿对应的 A 端点属性。
验证预期关系
原始数据中,:conn1 有 :redEndpointA :nodeA1 和 :redEndpointB :nodeA2。按属性链的方向,预期推理结果为:
:nodeA2 :connectedToByRed :nodeA1 .
蓝色连接的预期关系同理:
:nodeB2 :connectedToByBlue :nodeB1 .
修改本体后,重新导入数据或触发 repository 的推理更新,再查询这些关系。如果关系仍未出现,检查属性链是否引用了命名逆属性、属性顺序是否正确,以及相关数据是否已载入当前 repository。
适用范围
这套方法是针对题述本体和 GraphDB 配置得出的实验性解决办法。现有信息不足以判断所有 GraphDB 版本和配置是否都支持这类属性链。如果命名逆属性仍未产生预期结果,可以根据具体版本、repository 配置和查询结果继续排查。
备注:内容仅供参考。
