借助Wikidata查询服务快速查找发布日期

时间:2018-09-28 08:01:31

标签: sparql wikidata

是否可以在Wikidata Query Service的SPARQL中快速查找发布日期以查找某个日期(例如今天)的发布?

我希望这样的查询很快:

SELECT * WHERE {
  ?work wdt:P577 ?datetime .
  BIND("2018-09-28T00:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> as ?now_datetime)
  FILTER (?datetime = ?now_datetime)
}
LIMIT 10

但是,在https://query.wikidata.org的SPARQL端点上使用它时,它会超时

范围查询似乎都不是很快。下面的查询将在30秒后返回:

SELECT * WHERE {
  ?work wdt:P577 ?datetime .
  FILTER (?datetime > "2018-09-28T00:00:00Z"^^xsd:dateTime)
}
LIMIT 1

1 个答案:

答案 0 :(得分:4)

诀窍是避免完全扫描并使用索引:

  1. VALUES

       
    SELECT * WHERE {
      VALUES (?datetime) {("2018-09-28T00:00:00Z"^^xsd:dateTime)}
      ?work wdt:P577 ?datetime .
    } LIMIT 10
    

    Try it!

  2. hint:rangeSafe

       
    SELECT * WHERE {
      VALUES (?datetime) {("2018-09-28T00:00:00Z"^^xsd:dateTime)}
      ?work wdt:P577 ?date_time .
      hint:Prior hint:rangeSafe true .
      FILTER (?date_time > ?datetime)
    } LIMIT 10
    

    Try it!

      

    [rangeSafe提示]声明对特定三元模式的查询所触及的数据进行了强类型化,因此可以将范围过滤器下推到索引上。