Sparql Wikidata按项查询标识

Sparql Wikidata按项查询标识,sparql,wikidata,Sparql,Wikidata,我想通过项目标识符查询给定城市的翻译。 对于本次查询,karlsruhe的if上的属性p31 这是我的问题 SELECT DISTINCT ?city ?label ?population WHERE { ?city (wdt:P31/wdt:P279*) wd:Q515. // is city ?city wdt:P31 wd:Q1040. //is karlsruhe ?city wdt:P1082 ?population. ?city rdfs:label ?label.

我想通过项目标识符查询给定城市的翻译。 对于本次查询,karlsruhe的if上的属性p31

这是我的问题

 SELECT DISTINCT ?city ?label ?population WHERE {
  ?city (wdt:P31/wdt:P279*) wd:Q515. // is city
  ?city wdt:P31 wd:Q1040. //is karlsruhe
  ?city wdt:P1082 ?population.
  ?city rdfs:label ?label.
  FILTER(((LANG(?label)) = "de") || ((LANG(?label)) = "en") || ((LANG(?label)) = "it") || ((LANG(?label)) = "ru") || ((LANG(?label)) = "ro") || ((LANG(?label)) = "tr") || ((LANG(?label)) = "pl") || ((LANG(?label)) = "fr") || ((LANG(?label)) = "es") || ((LANG(?label)) = "hr"))
}
但我没有得到任何结果


我做错了什么?

简而言之,问题是卡尔斯鲁厄不是卡尔斯鲁厄。请仔细阅读的定义

您的查询应该是:

SELECT DISTINCT ?city ?label ?population WHERE {
  VALUES (?city) { (wd:Q1040) }      # is Karlsruhe
  ?city (wdt:P31/wdt:P279*) wd:Q515  # is a city
  OPTIONAL { ?city wdt:P1082 ?population } 
  ?city rdfs:label ?label
  FILTER(LANG(?label) IN ("de", "en", "it", "ru", "ro", "tr", "pl", "fr", "es", "hr"))
}

为了更好地理解,可以用以下方式重写上面的查询:

SELECT DISTINCT ?city ?label ?population WHERE {
  FILTER(?city IN (wd:Q1040))        # is Karlsruhe
  ?city (wdt:P31/wdt:P279*) wd:Q515  # is a city
  OPTIONAL { ?city wdt:P1082 ?population } 
  ?city rdfs:label ?label
  FILTER(LANG(?label) IN ("de", "en", "it", "ru", "ro", "tr", "pl", "fr", "es", "hr"))
}
在RDFS++蕴涵下,人们甚至会写:

SELECT DISTINCT ?city ?label ?population WHERE {
  ?city owl:sameAs wd:Q1040   # is Karlsruhe
  ?city wdt:P31 wd:Q515       # is a city
  OPTIONAL { ?city wdt:P1082 ?population } 
  ?city rdfs:label ?label
  FILTER(LANG(?label) IN ("de", "en", "it", "ru", "ro", "tr", "pl", "fr", "es", "hr"))
}

简言之,问题在于卡尔斯鲁厄不是卡尔斯鲁厄。请仔细阅读的定义

您的查询应该是:

SELECT DISTINCT ?city ?label ?population WHERE {
  VALUES (?city) { (wd:Q1040) }      # is Karlsruhe
  ?city (wdt:P31/wdt:P279*) wd:Q515  # is a city
  OPTIONAL { ?city wdt:P1082 ?population } 
  ?city rdfs:label ?label
  FILTER(LANG(?label) IN ("de", "en", "it", "ru", "ro", "tr", "pl", "fr", "es", "hr"))
}

为了更好地理解,可以用以下方式重写上面的查询:

SELECT DISTINCT ?city ?label ?population WHERE {
  FILTER(?city IN (wd:Q1040))        # is Karlsruhe
  ?city (wdt:P31/wdt:P279*) wd:Q515  # is a city
  OPTIONAL { ?city wdt:P1082 ?population } 
  ?city rdfs:label ?label
  FILTER(LANG(?label) IN ("de", "en", "it", "ru", "ro", "tr", "pl", "fr", "es", "hr"))
}
在RDFS++蕴涵下,人们甚至会写:

SELECT DISTINCT ?city ?label ?population WHERE {
  ?city owl:sameAs wd:Q1040   # is Karlsruhe
  ?city wdt:P31 wd:Q515       # is a city
  OPTIONAL { ?city wdt:P1082 ?population } 
  ?city rdfs:label ?label
  FILTER(LANG(?label) IN ("de", "en", "it", "ru", "ro", "tr", "pl", "fr", "es", "hr"))
}