从Jena执行对DBpedia的SPARQL查询时,“超时/查询挂起”

时间:2011-11-24 19:01:39

标签: sparql jena dbpedia

我无法使用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在某种程度上耗费时间,以便在服务器上查询超时?我对Semantic Web和Jena很陌生,但我认为最初我的查询不是非常耗时,因为我在

    中使用了对象部分的绝对URI
    ?album p:artist <http://www.dbpedia.org/resource/SomeArtist> 
    

    语句。

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

(使用Jena 2.6.4)

1 个答案:

答案 0 :(得分:1)

我可以确认查询速度很慢。

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

另一种方法是,为了获得更一致的响应时间,可以下载DBPedia转储,grep out您感兴趣的谓词,然后将它们加载到本地三元组中,例如:耶拿。