使用SPARQL获取图形路径

时间:2015-03-06 11:19:54

标签: rdf sparql semantic-web

我们有以下海龟数据集,表示我们想要观察一些属性的图。

@prefix v1: <http://localhost:9091/graphe/> .
@prefix v2: <http://localhost:9091/graphe#> .
v1:a v2:p v1:b.
v1:a v2:q v1:f.
v1:a v2:p v1:g.
v1:b v2:p v1:c.
v1:c v2:q v1:h.
v1:c v2:p v1:i.
v1:c v2:p v1:d.
v1:d v2:p v1:e.
v1:f v2:p v1:g.
v1:f v2:q v1:l.
v1:f v2:p v1:k.
v1:g v2:p v1:c.
v1:g v2:p v1:f.
v1:h v2:p v1:n.
v1:i v2:q v1:j.
v1:j v2:p v1:o.
v1:j v2:q v1:n.
v1:k v2:p v1:l.
v1:l v2:p v1:g.
v1:m v2:q v1:g.
v1:n v2:p v1:m. 

我们期望编写的查询必须打印源节点和目标节点之间的所有完整路径。

PREFIX g: <http://localhost:9091/graphe-ttl-1>
PREFIX t: <http://localhost:9091/graphe#>
PREFIX o: <http://localhost:9091/graphe/>
SELECT * WHERE {
GRAPH g: {
      o:a t:p{*} o:o .
}}

这是我们到目前为止所写的查询,但是我们没有输出,因为我们没有任何变量表达式。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

使用sparql属性路径无法做到这一点:你只是找出路径是否存在,而不是路径是什么。

你可以尝试:

o:a t:p{*} ?middle .
?middle t:p{*} o:o .

但我不相信这会奏效。

编辑:好吧,这确实有效(我认为*会贪婪),虽然你不会得到这些属性。我使用!ex:nothing *表示'任何属性'(必须有更好的方法):

prefix ex: <http://invalid.org/>
select * {
  o:a !ex:nothing* ?middle .
  ?middle !ex:nothing* o:o
}

答案 1 :(得分:0)

这将给你一个&amp; n个节点。 select ?start ?end (count(?mid) as ?length) where {values (?start ?end) { (:a :n) } ?start :p+ ?mid . ?mid :p* ?end . }group by ?start ?end