2

我在使用 Jena 对 dbpedia.org 执行 SPARQL 查询时遇到问题。

查询的形式为:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX p: <http://dbpedia.org/property/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
SELECT ?album ?name ?dateofrelease 
WHERE { 
?album p:artist <http://dbpedia.org/resource/SomeArtist> . 
?album rdf:type <http://dbpedia.org/ontology/Album> . 
?album rdf:type <http://schema.org/MusicAlbum> . 
?album p:name ?name . 
?album <http://dbpedia.org/ontology/releaseDate> ?dateofrelease . 
FILTER(xsd:dateTime(?dateofrelease) >= '2009-01-01T00:00:00Z'^^xsd:dateTime) 
} LIMIT 5 

其中http://www.dbpedia.org/resource/SomeArtist是一个有效的艺术家 URI,例如http://dbpedia.org/resource/Wilco,并且在发送前正确编码了 URL。

使用以下标准代码执行查询:

Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query);
ResultSet results = queryExecution.execSelect();

该程序在同一个表单上执行了大约 30 个查询,但其中一些“挂起”了大约一两分钟,然后 Jena 抛出了一个

 com.hp.hpl.jena.sparql.resultset.ResultSetException: Not an ResultSet result

如果我捕捉到异常并继续,一些查询会挂起,一些查询会快速返回一个结果集,其中包含 0 个或更多结果。这样做几次,返回或“挂起”的查询是随机的。使用具有相同查询的 SPARQL DBpedia 有时可以工作,有时在 Web 浏览器中以相同的方式挂起。

  • 我是否构建了错误的查询,以某种方式使 dbpedia.org 耗时,从而导致服务器上的查询超时?我对语义 Web 和 Jena 很陌生,但我最初认为我的查询不会非常耗时,因为我在

    ?album p:artist <http://www.dbpedia.org/resource/SomeArtist> 
    

    陈述。

  • 是否有一些我不知道的来自单一来源/每个时间单位限制的请求到 dbpedia.org?

(使用耶拿 2.6.4)

4

1 回答 1

1

我可以确认查询很慢。

我尝试了一些可能会影响速度的变化,但没有帮助。抱歉,我看不出这种类型的查询会特别慢的任何明显原因。

要获得更一致的响应时间,另一种方法是下载 DBPedia 转储,用 grep 查找您感兴趣的谓词,然后将它们加载到本地三元存储库中,例如 Jena。

于 2011-11-25T14:04:36.297 回答