我无法使用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)
答案 0 :(得分:1)
我可以确认查询速度很慢。
我尝试了一些可能影响速度的变化,但它没有帮助。我看不出任何明显的原因,为什么这种类型的查询会特别慢,抱歉。
另一种方法是,为了获得更一致的响应时间,可以下载DBPedia转储,grep out您感兴趣的谓词,然后将它们加载到本地三元组中,例如:耶拿。