Virtuosoを使用してグラフ内の2つのノード間の距離を見つけるにはどうすればよいですか?推移性のドキュメントを読みましたが、1つの述語に制限されています。例:
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
で、述語タイプはありません。これを「どの述語でも」に拡張するにはどうすればよいですか?実際のパスは必要ありません。true/false(ASKクエリ)だけが必要です。foaf:knowsを?pに変更するのはやり過ぎのようです。
私は現在、2つのノードが特定の距離内に接続されているかどうかを調べるために、一連の再帰ASKを実行していますが、それは効率的ではないようです。