【问题标题】:Get all nodes in a transitive relation - Extension获取传递关系中的所有节点 - 扩展
【发布时间】:2013-12-11 12:17:54
【问题描述】:

这是Get all nodes in a transitive relation的扩展

是否可以使用 SPARQL 获取两个传递节点之间的所有传递节点?我试图从这个站点和 answer-semanticweb 中挖掘出来,但如果路径的长度没有按照Can JENA ARQ show property path details 中的建议定义,目前似乎是不可能的。但是从Joshua Tayloranswer到第一个问题,我看到了一线希望。

[已编辑]我提供了我的数据样本的图片以显示问题的严重程度:

[已编辑] 我想找到:a 和:h 之间的路径,结果应该是四个结果:
a -> b -> c -> d -> h.
a -> b -> c -> e -> h.
a -> f -> h。
a -> g -> h.

[已编辑] 在评论中使用 Joshua Taylor 的解决方案,我将每个节点分组为单个结果,这是迄今为止我针对此问题获得的最接近的解决方案。

【问题讨论】:

  • 我投票决定关闭这个问题,因为正如所写,它与您引用的问题重复,因为您没有真正解释您的问题实际上有何不同或显示您尝试过的内容,即您是否尝试过修改其他查询以解决您的问题?
  • @RobV 我同意,并且还投票决定以重复身份关闭。 FJE,我很高兴您发现较早的答案很有帮助,但是完全不清楚您在这里尝试做什么,而这些答案中尚未涵盖。您所要求的只是:a :eastOf* ?mid . ?mid :eastOf* :e 的解决方案,不是吗?这会将?m 绑定到:a、:c 和:e。
  • @FJE 你可能也会觉得这很有帮助:Calculate length of path between nodes?。
  • @JoshuaTaylor 和 RobV,我编辑了我的问题。我希望解释足够清楚。

标签: java sparql jena


【解决方案1】:

我认为这在纯 SPARQL 中是不可能的。解决相关问题的关键在于group by 的不同行的结果。一般来说,我不知道每条路径是否有一些独特的东西可以group by 以便每条路径获得一个结果行。

但是,在您的特定数据中(这是您的特定数据的属性,而不是一般的图表),有一个属性可以区分不同的路径:每个路径都包含一个对该路径唯一的节点。也就是说,对于每个节点d、e、f 和g,只有一个包含该节点的路径。这意味着对于这个特定示例,您可能能够做到这一点,如果您能找到一种方法来识别查询中的唯一节点。不过,我也不相信 这是 可能的,因为这相当于问同样的问题:“?start 和 x 之间有多少条路径(其中 x 是其中之一d、e、f 和 g 在这种情况下)?”

【讨论】:

  • 感谢@Joshua 的回答,所以看来纯SPARQL 无法回答。我认为可能的选择是有一个函数来回答这个查询。跨度>
【解决方案2】:

万一其他人后来碰到这个问题,过了一段时间(差不多 10 年!),有一个解决方案作为 OntoText 开发的路径发现的扩展(用于 GraphDB 三元存储)。

他们用一些功能扩展了 SPARQL 属性路径,例如,搜索所有路径 (path:allPaths)、最短路径 (path:shortestPath) 和距离 (path:distance),您可以在以下位置找到它链接GraphDB path search。

引自他们的网站:

GraphDB 通过使用 Graph Path Search 功能扩展 SPARQL 解决了这个问题,该功能不仅可以让您找到资源之间的复杂关系,还可以探索它们并将它们用作过滤器来识别图形模式。它包括最短路径和所有路径搜索的功能,使您能够探索资源之间的连接边(RDF 语句)以找到最短的属性路径,然后再探索所有连接路径。其他支持的功能包括查找资源之间的最短距离和发现图中的循环依赖关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多