【问题标题】:timeout transaction when running a query on dbpedia在 dbpedia 上运行查询时超时事务
【发布时间】:2011-12-18 17:54:14
【问题描述】:

您好,有一个查询直到昨天还在工作:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX foaf: <http://xmlns.com/foaf/0.1/>
    SELECT DISTINCT(?film_link) ?film_abstract ?film_name ?wikipage
    WHERE {
    ?film_link rdf:type <http://dbpedia.org/ontology/Film> .
    ?film_link rdfs:comment ?film_abstract 
    FILTER (langMatches( lang(?film_abstract), "EN")) .
    ?film_link  foaf:name ?film_name .
    ?film_title foaf:page ?wikipage .

    }

但今天它显示:Virtuoso 42000 错误估计的执行时间 99232592(秒)超过了 1500(秒)的限制。 我之前也看到过这个错误,但是当我在运行一段时间后再次运行这样的查询时...... 谁能解释错误的含义?

【问题讨论】:

  • 为什么不接受您的问题的任何答案?这种行为不鼓励人们帮助你......

标签: sparql dbpedia


【解决方案1】:

这意味着 Virtuoso 的查询计划器(Virtuoso 是运行 DBPedia 的三元存储库)估计了评估您的查询需要多长时间,并且它认为需要太长时间,因此拒绝运行查询。

我怀疑问题是您查询中的最后一个三元组模式:

?film_title foaf:page ?wikipage

在此之前您从未使用过任何一个变量,因此您要求 Virtuoso 做的是将每个可能的三元组与谓词位置中的 foaf:page 与查询的其余部分中的结果相乘。

如果您将其更改为以下内容,它应该可以正常工作:

?film_link foaf:page ?wikipage

我怀疑这就是你想要写的东西,虽然它仍然很慢,但它仍然有效,因为你的查询非常广泛,FILTER 子句通常很难评估。

【讨论】:

  • 为了解决这个问题,我使用我将上面的查询分成两个查询,第一个是页面名称和链接,另一个是摘要。前缀 rdfs: w3.org/2000/01/rdf-schema#> SELECT DISTINCT(?film_link) ?film_abstract WHERE { ?film_link rdf:type dbpedia.org/ontology/Film> 。 ?film_link rdfs:comment ?film_abstract FILTER (langMatches( lang(?film_abstract), "EN")) } 仍然出现同样的问题。当我删除过滤器时它得到解决。这个过滤器很重要,因为我只需要英语就可以在这方面帮助我吗?
  • “过滤器”有什么替代品吗?
  • FILTER 是过滤语言的唯一方法。如果 DBPedia 拒绝您的查询,您可能需要调查从他们的数据库转储中创建 DBPedia 的本地副本
  • RobV 正在发生一个非常奇怪的现象。这个过滤器几天前还在工作,但 dbpedia 拒绝它。知道为什么会出现这种行为吗?
  • 这将取决于许多因素,它使用的确切查询,DBPedia 上的当前负载等。DBPedia 使用各种限制机制,所以如果它有压力或者你个人已经发出了很多查询可能不允许您运行复杂的查询。考虑在 DBPedia 列表 dbpedia-discussion@lists.sf.net 上询问更多信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
  • 2015-08-16
  • 2016-08-30
  • 2013-11-26
  • 2013-06-04
  • 1970-01-01
相关资源
最近更新 更多