是否可以计算将两个实例连接到SPARQL查询的边的数量?我想找到一条路。两个资源之间的路径
回答
您可以使用SPARQL的属性路径和聚合函数来计算唯一路径中的边数。例如,对于这样的数据,它包含了我们所关心的两个路径(一个有两个边缘ç和d一起克三条边):
@prefix : <https://stackoverflow.com/questions/19587520/sparql-path-between-two-instance/> .
:a :p :b . # a to c is a path of length 2
:b :p :c .
:d :p :e . # d to g is a path of length 3
:e :p :f .
:f :p :g .
可以使用像下面这样的查询。注意我已经使用了特定的属性:p
,而不是一个变量。这是必需的,因为来自SPARQL 1.1规范的9.1 Property Path Syntax不允许属性路径中的变量。
prefix : <https://stackoverflow.com/questions/19587520/sparql-path-between-two-instance/>
select ?start ?end (count(?mid) as ?length)
where {
values (?start ?end) { (:a :c) (:d :g) }
?start :p+ ?mid .
?mid :p* ?end .
}
group by ?start ?end
和得到的结果是这样的:
$ sparql --query query.rq --data data.n3
------------------------
| start | end | length |
========================
| :d | :g | 3 |
| :a | :c | 2 |
------------------------
这里发生了什么的更详细的描述中可以找到:
- Calculate length of path between nodes?(这实际上是看路在树)
- this answer到Finding all steps in property path(请注意,接受的答案表示您不能这样做,但链接的答案说明你实际上可以);
- 接受的答案为Is it possible to get the position of an element in an RDF Collection in SPARQL?。
的基本理念,虽然是,如果你有从?start
到?end
的路径,那么你也有,对于一堆?mid
,从?start
到?mid
的路径不同的值,并从路径?mid
到?end
。您可以为?mid
选择不同值的号码(如果您允许其中一个端点并禁止其他端点)恰好是路径的长度。
该属性是否必须指定?我不能这样做吗? - >?p *或?p + – user2837896
@ user2837896属性_does_需要指定。我更新了我的回答。不幸的是[属性路径语法](http://www.w3.org/TR/sparql11-query/#pp-language)不允许变量。 –
我不想指定属性..我想在不指定属性的情况下找到资源之间的最短路径。在java中可能吗? – user2837896
- 1. 在两个应用程序之间共享资源/构建路径
- 2. 两个路径之间的Nodejs差异
- 3. 两个表之间的依赖路径
- 4. Rails资源路径
- 5. tastypie资源路径
- 6. svn资源路径
- 7. 资源类路径
- 8. 资源路径组件和EDM标签之间的OData关系
- 9. 轨道路由中的资源和资源之间的区别?
- 10. Spring MVC的资源路径
- 11. 资源的路径索引
- 12. 类路径资源的java.nio.file.Path
- 13. CommonJS的资源路径
- 14. Xcode的路径资源
- 15. 嵌套资源的路径
- 16. 资源的url路径
- 17. javac的类路径和源路径选项之间的差异
- 18. 多个资源中的相同路径
- 19. RestEasy的多个资源路径华林
- 20. 两点之间最长的路径
- 21. 绘制两点之间的路径
- 22. Symfony2的资产资源路径
- 23. 链路之间的两个
- 24. WPF - 默认资源路径
- 25. CMake和资源路径
- 26. 图标资源路径
- 27. REST资源路径设计
- 28. 设置资源路径MVC
- 29. symfony翻译资源路径
- 30. Unity:获取资源路径
是和不是......你想只是一个特定属性的路径?图中的个体之间只有一条路径吗? –
您需要更详细地说明您的数据是什么以及您想要的结果(路径边缘列表,路径长度等)。与此同时,您可能会发现[查找属性路径中的所有步骤](http://stackoverflow.com/q/18024413/1281433)和[是否可以在SPARQL中获取RDF集合中元素的位置?] (http://stackoverflow.com/q/17523804/1281433)有帮助。 –
嗯,花了我一两分钟才找到它,但你也应该看看[计算节点之间的路径长度?](http://stackoverflow.com/q/5198889/1281433)。不过,我们需要澄清一下,您是否正在寻找边数,然后找到_length_,或者如果您正在寻找实际的_path_,这是一组边。 –