Sparql 按大地水准面名称查询Wikidata

Sparql 按大地水准面名称查询Wikidata,sparql,wikidata,Sparql,Wikidata,我试图通过地理名称ID查询城市的Wikidata 我可以看到该物业的id为P1556: 因此,我对柏林的查询(作为一个例子)是: 但我没有找到匹配的 我做错了什么?在Wikidata上进行简单的试错会产生以下结果:不需要wd:2950157,它是一个文本,所以只使用“2950157”。使用以下(服务用于显示城市名称): 编辑:简单的方法: SELECT ?id ?idLabel WHERE { ?id wdt:P1566 "2950157". SERVICE wi

我试图通过地理名称ID查询城市的Wikidata

我可以看到该物业的id为P1556:

因此,我对柏林的查询(作为一个例子)是:

但我没有找到匹配的


我做错了什么?

在Wikidata上进行简单的试错会产生以下结果:不需要
wd:2950157
,它是一个文本,所以只使用
“2950157”
。使用以下(
服务
用于显示城市名称):

编辑:简单的方法:

SELECT ?id ?idLabel WHERE {      
  ?id wdt:P1566 "2950157".      
  SERVICE wikibase:label {
      bd:serviceParam wikibase:language "en" .
  }
}
编辑结束

使用绑定或筛选

SELECT ?id ?idLabel WHERE {
  Bind ("2950157" as ?x)
  ?id wdt:P1566 ?x.      
  SERVICE wikibase:label {
      bd:serviceParam wikibase:language "en" .
  }
}
或者(较慢的选项)使用
FILTER

 SELECT ?id ?idLabel WHERE {       
    ?id wdt:P1566 ?x.
    filter (?x = "2950157")
    SERVICE wikibase:label {
        bd:serviceParam wikibase:language "en" .
    }
 }

在Wikidata上进行简单的试错会产生以下结果:不需要
wd:2950157
,它是一个文本,因此只使用
“2950157”
。使用以下(
服务
用于显示城市名称):

编辑:简单的方法:

SELECT ?id ?idLabel WHERE {      
  ?id wdt:P1566 "2950157".      
  SERVICE wikibase:label {
      bd:serviceParam wikibase:language "en" .
  }
}
编辑结束

使用绑定或筛选

SELECT ?id ?idLabel WHERE {
  Bind ("2950157" as ?x)
  ?id wdt:P1566 ?x.      
  SERVICE wikibase:label {
      bd:serviceParam wikibase:language "en" .
  }
}
或者(较慢的选项)使用
FILTER

 SELECT ?id ?idLabel WHERE {       
    ?id wdt:P1566 ?x.
    filter (?x = "2950157")
    SERVICE wikibase:label {
        bd:serviceParam wikibase:language "en" .
    }
 }

为什么要使用
BIND
FILTER
而不是最明显的用法,即将文本放在三重模式的对象位置?你是对的,我将立即修改它!我习惯于从Jena开始工作,在查询中我总是需要插件点。为什么你使用
BIND
FILTER
而不是最明显的用法,即将文本放在三重模式的对象位置?你是对的,我会立即修改它!我习惯于从Jena工作,我总是需要在查询插件点。