1

对于以下简单查询,我在 dbpedia sparql 端点上收到“SR171:事务超时”:为什么会出现此错误?我没有设置任何超时 - 它为 0。

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/>

PREFIX ont: <http://dbpedia.org/ontology/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?date (bif:substring(STR(?date), 1, 4) AS ?year) WHERE {
   ?person ont:birthDate ?date .
   ?person foaf:name ?name   

   . FILTER ( (fn:string-length(STR(?date)) = 10) && (bif:substring(STR(?date), 9, 2) = '05') && (bif:substring(STR(?date), 6, 2) = '02') && (?date > "1868-01-01"^^xsd:date) && (?date < "2005-01-01"^^xsd:date) )
4

1 回答 1

8

这是因为您的查询对于 DBPedia 端点来说太难回答而不会对服务的其他用户产生不利影响。

由于 DBPedia 是一个众所周知的公共 SPARQL 端点,因此它被大量使用,因此托管它的人将其配置为对查询可以运行多长时间施加严格的限制,这样流氓用户就不会使该服务对其他人无法使用。

在您的情况下,您的查询将花费很长时间,因为您询问的内容有很多初始结果(准确地说是 592299),然后FILTER对其应用 a 。 FILTER在 SPARQL 中非常昂贵,尤其是在进行字符串操作和日期比较时。AFAIK DBPedia 超时时间相当低,比如几秒钟,端点根本无法在这段时间内完成您的查询,因为应用FILTER.

注意- 这是我用来查看查询的第一部分返回多少结果的查询:

PREFIX ont: <http://dbpedia.org/ontology/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT COUNT(*) 
WHERE 
{
   ?person ont:birthDate ?date .
   ?person foaf:name ?name   
}
于 2012-02-07T17:35:24.240 回答