2012-02-07 91 views
1

对于以下简单查询,我在dbpedia sparql端点上得到“SR171:事务超时”:为什么会出现此错误?我没有设置任何超时 - 这是在0简单的sparql查询不起作用,日期比较

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)) 

回答

7

这是因为你的查询是太硬了DBpedia的端点没有服务的其他用户造成不利影响回答。

由于DBpedia中是一个众所周知的公共SPARQL端点它会非常频繁使用所以谁托管它的人拥有它配置强加多久查询可以这么跑了严格的限制就是流氓用户不使服务不可用为他人。

在你的情况下,你的查询将花费很长时间,因为你问了一些有很多初始结果(592299是精确的),然后在其上应用FILTERFILTER在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 
} 
+0

因此,有什么我可以做。它在清晨和深夜工作。有趣的是,查询执行几乎不需要1-2秒,我看到了错误。所以,它在平时应该不会工作。平时在系统中工作吗? – 2012-02-09 14:07:41

+0

这可能取决于您所在的时区,因此当峰值使用率与您的时区相关时。我在美国西海岸(PST),试图在我的时间早上9点运行查询,并且超时 – RobV 2012-02-09 17:02:43

+0

我在东欧,正如我上面所说的那样。这对于Web应用程序来说是不可接受的。我想最终在PHP脚本中使用带有参数的查询。我知道这是数据库Pedia.DB是否有一个选项与数据库Pedia申请开发人员“关键”像其他API或某种形式的协议(甚至支付),这将增加查询的时间? – 2012-02-11 11:09:41