【发布时间】:2017-06-20 22:24:39
【问题描述】:
我尝试通过地理名称 ID 在 Wikidata 中查询一个城市。
我可以看到属性的id是P1556:https://www.wikidata.org/wiki/Property:P1566
所以我对柏林的查询(例如)是:
SELECT * WHERE {
?id wdt:P1566 wd:2950157
}
但我没有找到匹配项。
我做错了什么?
【问题讨论】:
我尝试通过地理名称 ID 在 Wikidata 中查询一个城市。
我可以看到属性的id是P1556:https://www.wikidata.org/wiki/Property:P1566
所以我对柏林的查询(例如)是:
SELECT * WHERE {
?id wdt:P1566 wd:2950157
}
但我没有找到匹配项。
我做错了什么?
【问题讨论】:
在 Wikidata 上进行简单的试验和错误会导致以下结果:不需要wd:2950157,它是一个文字,所以只使用 "2950157"。使用如下(SERVICE 用于显示城市名称):
编辑:直截了当的方法:
SELECT ?id ?idLabel WHERE {
?id wdt:P1566 "2950157".
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
}
编辑结束
使用 BIND 或 FILTER
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 而不是最明显的用法,即把文字放在三元组模式的对象位置?