我在使用 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)