如何使用Virtuoso查找图形中两个节点之间的距离?我读过及物单证,但他们限制你到一个谓语例如为:OpenLink Virtuoso:查找是否在一定距离内连接了两个节点
SELECT ?link ?g ?step ?path
WHERE
{
{
SELECT ?s ?o ?g
WHERE
{
graph ?g {?s foaf:knows ?o }
}
} OPTION (TRANSITIVE, t_distinct, t_in(?s), t_out(?o), t_no_cycles, T_shortest_only,
t_step (?s) as ?link, t_step ('path_id') as ?path, t_step ('step_no') as ?step, t_direction 3) .
FILTER (?s= <http://www.w3.org/People/Berners-Lee/card#i>
&& ?o = <http://www.advogato.org/person/mparaz/foaf.rdf#me>)
}
LIMIT 20
只有穿越foaf:knows
而不是任何谓词类型。我怎样才能把这个扩展到“任何谓词”?我不需要实际的路径,只需要一个真/假(ASK查询)。改变foaf:知道?p似乎是一种矫枉过正。
我目前正在执行一组递归ASK以查明两个节点是否在特定距离内连接,但看起来效率不高。
如果您有理由相信,有只有一个连接节点的路径,那么你可以用SPARQL 1.1来移植它。这是一个可行的假设吗? – 2014-03-06 17:13:12