【发布时间】:2010-10-12 12:14:35
【问题描述】:
如何使用 Virtuoso 找到图中 2 个节点之间的距离?我已阅读 Transitivity 文档,但它们将您限制为一个谓词,例如:
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:knows 更改为 ?p 似乎有点过头了。
我目前正在执行一组递归 ASK,以确定两个节点是否在特定距离内连接,但这似乎效率不高。
【问题讨论】:
-
如果您有理由相信只有一条路径连接节点,那么您可以使用 SPARQL 1.1 实现这一点。这是一个可行的假设吗?