【发布时间】:2015-03-06 13:54:34
【问题描述】:
我正在尝试编写一个 SPARQL 查询来返回从源到目标的路径。 下面是表示数据集的 Turtle 文件。
@prefix node: <http://prism.uvsq.fr/>.
@prefix edge: <http://prism.uvsq.fr#>.
node:a edge:p node:b.
node:a edge:q node:f.
node:a edge:p node:g.
node:b edge:p node:c.
node:c edge:q node:h.
node:c edge:p node:i.
node:c edge:p node:d.
node:d edge:p node:e.
node:f edge:p node:g.
node:f edge:q node:l.
node:f edge:p node:k.
node:g edge:p node:c.
node:g edge:p node:f.
node:h edge:p node:n.
node:i edge:q node:j.
node:j edge:p node:o.
node:j edge:q node:n.
node:k edge:p node:l.
node:l edge:p node:g.
node:m edge:q node:g.
node:n edge:p node:m.
接下来的图像呈现相同的信息,以便于可视化。
到目前为止我写的查询如下:
prefix graph: <http://prism.uvsq.fr/>
prefix node: <http://prism.uvsq.fr/>
prefix edge: <http://prism.uvsq.fr#>
SELECT * FROM graph: WHERE {
node:a (edge:p|edge:q) ?des.
?des (edge:p|edge:q)* node:h.
}
返回的信息只显示了解决方案的一个级别(它显示了到达目的地的可能邻居节点)。 在此先感谢您的帮助。 最好的问候
【问题讨论】:
-
这是因为
?des只能与?node相距一个边,因为您使用了node:a (edge:p|edge:q) ?des.模式。你的意思是node:a (edge:p|edge:q)* ?des.(带星号)?那么?des可以是a和h之间路径上的任意节点。 -
Finding all steps in property path 可能会有所帮助。接受的答案说这是不可能的,但my answer 表明在某些情况下您实际上可以做到这一点。
-
这似乎与getting a graph path using SPARQL 非常相似。这是课堂作业吗?
-
我也用 * 试过了,但结果一点也不全面。我正在寻找一种方法来获得从 a 到 h 的所有路径。感谢您的链接,我将看看它们。不,这不是课堂作业,我是一名博士生,我正在寻找这种方式将其与我的工作结合起来。
-
询问作业是可以的(尽管如果是的话,通常最好提一下)。您是否碰巧知道您的一位同事是否发布了另一个问题(大约比您早 2 小时):stackoverflow.com/q/28897701/1281433。毕竟,在数据(使用 p 和 q 作为边,节点从 a 到 o 标记)和期望的结果方面几乎是相同的。考虑到时间,很难想象这些是不相关的。