我可以创建一个递归遍历链接和 returns 某些信息的 SPARQL 语句吗?

Can I create a SPARQL statement which traverses links and returns certain info recursively?

我是 SPARQL 的新手,我想知道是否可以从一个 URI 开始,比如 dbpedia。org/resource/Steve_Jobs 然后遍历链接到该起点的每个 URI,return 他所链接的每个人的所有名字并将其限制为 50 个答案?我原以为可以这样做,但我似乎无法在网上找到任何资源(可能是找错地方了)。 所以我想 SPARQL 查询在爬行链接的意义上类似于蜘蛛。

非常感谢任何帮助,感谢您抽出宝贵时间。

这取决于您到底需要什么。您不能在 SPARQL 中执行任意递归查询。参见,例如,

但是,您确实可以访问 属性 路径,其中可以包括重复。所以你可以这样做:

select ?person where {
  dbpedia:Steve_Jobs (<>|!<>)* ?person .
  ?person a dbpedia-owl:Person .
}
limit 10

这里的部分技巧是 (<>|!<>) 充当 属性 通配符,因为每个 属性 要么是 <>,要么不是。我认为,该查询应该大致按照您的要求进行。但是,Virtuoso 的 SPARQL 端点不喜欢它,returns 错误:

Virtuoso 37000 Error SP031: SPARQL compiler: Variable '_::trans_subj_4_0' is used in the query result set but not assigned

SPARQL query:
define sql:big-data-const 0 
#output-format:text/html
define sql:signal-void-variables 1 define input:default-graph-uri <http://dbpedia.org> select * where {
  dbpedia:Steve_Jobs (<>|!<>)* ?person .
  ?person a dbpedia-owl:Person .
}
limit 10

该查询捕获了您想要的内容,但您可能需要与 Virtuoso 开发人员核实以弄清楚如何才能使其正常工作。如果您不使用通配符属性,那么您将得到结果,因此如果您有一组您关心的特定属性,您可以改用它。例如,

select ?person where {
  dbpedia:Steve_Jobs (dbpedia-owl:child|dbpedia-owl:influenced|^dbpedia-owl:child|^dbpedia-owl:influenced)* ?person .
}
limit 10

SPARQL results