SPARQL 在达到超时之前获取所有数据

SPARQL get all the data before it reaches timeout

我正在尝试使用以下查询获取世界上所有国家所有城市名称。每当我在下面执行此查询时,它 returns 这条消息 "Query timeout limit reached".

有没有其他方法可以在达到超时限制之前获取所有数据?

SELECT ?country ?countryLabel ?city ?cityLabel
WHERE
{
  ?city wdt:P31/wdt:P279* wd:Q515;
        wdt:P17 ?country .

  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
ORDER BY ?country

这是一个有效的查询。

SELECT DISTINCT ?cityID ?cityIDLabel ?countryID ?countryIDLabel WHERE 
{
  {
    SELECT * WHERE 
    {
      ?cityID wdt:P31 ?cityInstance.
      VALUES (?cityInstance) {
        (wd:Q515)
        (wd:Q5119)
      }
      OPTIONAL {
        ?cityID wdt:P17 ?countryID.
        ?countryID p:P31/ps:P31 wd:Q6256.
      }

      FILTER NOT EXISTS {
        ?cityID wdt:P17 "".
        ?countryID wdt:P30 "".
      }
    }
  }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
ORDER BY ?countryIDLabel

我完全不确定为什么,但是,这个查询对我有用:

SELECT ?country ?countryLabel ?city ?cityLabel
WHERE
{
  ?city wdt:P31/wdt:P279* wd:Q515;
        wdt:P17 ?country .

  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
ORDER BY ?countryLabel
LIMIT 100000

与您的原始查询的两个不同之处是:

  1. 我猜按 countryLabel 排序是您真正想要的,而不是按 country 排序。根据我的经验,按标签订购有时也更快。
  2. 我设置了一个限制数量。查询显示 return 个与没有限制时长度相同的结果,因为限制高于正确的结果数。

我已根据我的评论发布此 answer on the Open Data site,但删除 ORDER BY 使查询得以通过。

这是一个使用我们最近发布的 Wikidata SPARQL Query Service endpoint 的查询。

PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX bd: <http://www.bigdata.com/rdf#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 

SELECT distinct ?country ?countryLabel ?city ?cityLabel
WHERE
{
  ?city wdt:P31/wdt:P279* wd:Q515;
        wdt:P17 ?country ;
        rdfs:label ?cityLabel . 
  FILTER (lang(?cityLabel) = "en")

  ?country rdfs:label ?countryLabel .
  FILTER (lang(?countryLabel) = "en")

}
ORDER BY ?country

Live Query Results Page