如何将wikidata的结果过滤到特定语言

时间:2018-05-18 14:32:58

标签: sparql wikidata

我有一个查询来获取所有首都。 (首都城市)

SELECT DISTINCT ?Stadt ?label ?Staat ?StaatLabel ?geographische_Koordinaten ?StadtLabel WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  ?Stadt wdt:P31 wd:Q5119.
  ?Stadt rdfs:label ?label.
  OPTIONAL { ?Stadt wdt:P17 ?Staat. }
  OPTIONAL { ?Stadt wdt:P625 ?geographische_Koordinaten. }
}
LIMIT 100

Try it here

结果是:

 wd:Q61     Washington D.C.     wd:Q30  Vereinigte Staaten  Point(-77.036666666 38.895)     Washington, D.C.
wd:Q61  Washington D. C.    wd:Q30  Vereinigte Staaten  Point(-77.036666666 38.895)     Washington, D.C.
wd:Q61  واشنگٹن ڈی سی   wd:Q30  Vereinigte Staaten  Point(-77.036666666 38.895)     Washington, D.C.
wd:Q61  Washington D.C.     wd:Q30  Vereinigte Staaten  Point(-77.036666666 38.895)     Washington, D.C.
wd:Q61  واشنګټن ډي سي   wd:Q30  Vereinigte Staaten  Point(-77.036666666 38.895)     Washington, D.C.
wd:Q61  Вашингтон   wd:Q30  Vereinigte Staaten  Point(-77.036666666 38.895)     Washington, D.C.
wd:Q61  ওয়াশিংটন, ডি.সি.   wd:Q30  Vereinigte Staaten  Point(-77.036666666 38.895)     Washington, D.C.

我用多种语言获得了同一个城市的许多结果。

如何过滤查询,以便每个城市只有一个带有英文标签的结果?

*更新*

感谢帮助斯坦尼斯拉夫。你回答了这个问题。我的新查询是:

SELECT DISTINCT ?Stadt ?label ?StadtLabel ?Staat ?StaatLabel ?geographische_Koordinaten WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  ?Stadt wdt:P31 wd:Q5119.
  ?Stadt wdt:P17 ?Staat.
  OPTIONAL { ?Stadt wdt:P625 ?geographische_Koordinaten. }
}
LIMIT 100

Try it here

我可以问下一个问题吗?为什么我不仅得到这个查询的大写字母?为什么"?Stadt wdt:P31 wd:Q5119。"被忽略了?

1 个答案:

答案 0 :(得分:0)

关注@Stanislav Kralin的通讯和示例here,此查询会返回国家/地区及其首都:

SELECT ?country ?countryLabel ?capital ?capitalLabel ?coords WHERE {
  ?country wdt:P31 wd:Q3624078.
  ?country wdt:P36 ?capital.
  FILTER NOT EXISTS {?country wdt:P31 wd:Q3024240} # not a former country
  OPTIONAL { ?capital wdt:P625 ?coords. }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ?countryLabel
LIMIT 1000

Try it here

some countriesBoliviaCosta RicaSouth Africa因某些原因而拥有多个资本!

要将每个国家/地区限制为一个(随机)资本,请尝试:

SELECT  ?country ?countryLabel ?aCapital ?aCapitalLabel ?coords
WHERE
  { { { SELECT  ?country (SAMPLE(?capital) AS ?aCapital)
        WHERE
          { ?country  wdt:P31  wd:Q3624078
            FILTER NOT EXISTS { ?country  wdt:P31  wd:Q3024240 }
            ?country  wdt:P36  ?capital
          }
        GROUP BY ?country
      }
      OPTIONAL
        { ?aCapital  wdt:P625  ?coords }
      SERVICE wikibase:label
        { bd:serviceParam
                    wikibase:language  "en"
        }
    }
  }
ORDER BY ?countryLabel
LIMIT   1000

Try it here