我可以创建一个SPARQL语句来遍历链接并递归返回某些信息吗?

时间:2015-02-12 11:15:28

标签: sparql

我对SPARQL很新,我想知道是否可以从URI开始,比如dbpedia.org/resource/Steve_Jobs,然后浏览链接到该起始点的每个URI,并返回每个URI的所有名称他被联系到并限制为50个答案的人?我本以为可以做到这一点,但我似乎无法在网上找到任何资源(也许在错误的地方找工作)。 所以我猜SPARQL查询与爬行链接的意义上的蜘蛛类似。

任何帮助都非常感谢并感谢您的时间。

1 个答案:

答案 0 :(得分:1)

这取决于你究竟需要什么。您无法在SPARQL中执行任意递归查询。例如,见

但是,您可以访问属性路径,其中可以包括重复。所以你可以做以下事情:

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

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

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