我试图了解 SPARQL 查询的计算限制,并且我想知道如何编写一个查询来确定两个对象之间是否存在有向路径。
我知道一种针对特定长度的路径执行此操作的方法:
SELECT ?a ?b ?c ?d
WHERE { ?a <http://graphtheory/hasNeighbor> ?b .
?b <http://graphtheory/hasNeighbor> ?c .
?c <http://graphtheory/hasNeighbor> ?d .
FILTER (?a != ?c && ?b != ?d
&& ?a = <http://graphtheory/node/1>
&& ?d = <http://graphtheory/node/2>)
}
LIMIT 10
有没有办法在单个查询中搜索任意长度的路径?这对于 SPARQL 来说不可能吗?
AndyS 给出了回答这个问题的所有要素,但有一些拼写错误可能会使其难以应用。正如他所说:
SPARQL 1.1 具有包含任意数量的 * 运算符的属性路径。
它不会告诉您路径是什么,也不会告诉您最短路径的长度 - 只会告诉您是否存在这样的路径。
执行此操作的方法(基于 AndyS,但有两个小修复)是:
PREFIX : <http://graphtheory/>
PREFIX node: <http://graphtheory/node/>
ASK { node:1 :hasNeighbor* node:2 }
据我所知,如果不使用属性路径,就无法做到这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)