2

我正在对 DBpedia SPARQL 端点进行一系列查询(从循环内部)。代码看起来或多或少是这样的:

for (String citySplit : citiesSplit) {
  RepositoryConnection conn = dbpediaEndpoint.getConnection();
  String sparqlQueryLat = " SELECT ?lat ?lon WHERE { "
                        + "<http://dbpedia.org/resource/" + citySplit.trim().replaceAll(" ", "_") + "> <http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?lat . "
                        + "<http://dbpedia.org/resource/" + citySplit.trim().replaceAll(" ", "_") + "> <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?lon ."
                        + "}";
  TupleQuery queryLat = conn.prepareTupleQuery(QueryLanguage.SPARQL, sparqlQueryLat);
  TupleQueryResult resultLat = queryLat.evaluate();
}    

问题是,经过几次迭代,我收到一条 503 消息:

httpclient.wire.header - << "HTTP/1.1 503 Service Temporarily Unavailable[\r][\n]"
(...)
org.openrdf.query.QueryInterruptedException
    at org.openrdf.http.client.HTTPClient.getTupleQueryResult(HTTPClient.java:1041)
    at org.openrdf.http.client.HTTPClient.sendTupleQuery(HTTPClient.java:438)
    at org.openrdf.http.client.HTTPClient.sendTupleQuery(HTTPClient.java:413)
    at org.openrdf.repository.http.HTTPTupleQuery.evaluate(HTTPTupleQuery.java:41)

如果我理解正确,这条 503 消息来自 DBpedia。我对吗?成功的连续查询的数量是可变的。有时它会在收到消息之前运行 13 秒,有时是 15 分钟。无论如何,我不认为这是正常的。会发生什么?

4

1 回答 1

1

通过DBpedia wiki的网页访问 DBpedia 数据集在1.1 节中说。公共 SPARQL 端点说:

合理使用政策:请阅读这篇文章,了解有关公共 DBpedia 端点限制的信息。这些也可能有用[原文如此]:1 , 2

链接的帖子说公共 DBpedia SPARQL 端点实现了速率限制。

http://dbpedia.org/sparql端点对您可以建立的连接数/秒有速率限制,以及对结果集和查询时间的限制,根据以下设置:

[SPARQL]
ResultSetMaxRows           = 2000
MaxQueryExecutionTime      = 120
MaxQueryCostEstimationTime = 1500

这些是为了确保每个人都有平等的机会从 dbpedia.org 取消引用数据,并防止编写错误的查询/机器人。

我认为你很可能已经达到了这个极限。

于 2013-06-24T01:24:28.203 回答