我对SPARQL很新,我想知道是否可以从URI开始,比如dbpedia.org/resource/Steve_Jobs,然后浏览链接到该起始点的每个URI,并返回每个URI的所有名称他被联系到并限制为50个答案的人?我本以为可以做到这一点,但我似乎无法在网上找到任何资源(也许在错误的地方找工作)。 所以我猜SPARQL查询与爬行链接的意义上的蜘蛛类似。
任何帮助都非常感谢并感谢您的时间。
答案 0 :(得分:1)
这取决于你究竟需要什么。您无法在SPARQL中执行任意递归查询。例如,见
但是,您可以访问属性路径,其中可以包括重复。所以你可以做以下事情:
select ?person where {
dbpedia:Steve_Jobs (<>|!<>)* ?person .
?person a dbpedia-owl:Person .
}
limit 10
这里的部分技巧是(<>|!<>)
充当属性通配符,因为每个属性都是<>
或者它不是。我认为,该查询应该大致按照您的要求进行。但是,Virtuoso的SPARQL端点并不喜欢它,并返回错误:
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