使用维基数据查询服务快速查询出版日期

Fast publication date lookup with 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 秒后 returns 下面的查询:

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

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

  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!

    [The rangeSafe hint] declare[s] that the data touched by the query for a specific triple pattern is strongly typed, thus allowing a range filter to be pushed down onto an index.