在https://query.wikidata.org的 SPARQL Wikidata 查询服务中,变量字符串的精确匹配并没有给出我预期的结果。
我期待我能做到:
SELECT * {
hint:Query hint:optimizer "None" .
{ SELECT DISTINCT (xsd:string(?author_name_) AS ?author_name) { wd:Q5565155 skos:altLabel ?author_name_ . } }
?work wdt:P2093 ?author_name .
}
但我没有从 Wikidata 查询服务得到返回结果:
但是,如果我使用“=”比较,我可以匹配字符串:
SELECT * {
hint:Query hint:optimizer "None" .
{ SELECT DISTINCT (xsd:string(?author_name_) AS ?author_name) { wd:Q5565155 skos:altLabel ?author_name_ . } }
?work wdt:P50 wd:Q5565155 .
?work wdt:P2093 ?author_name__ .
FILTER (?author_name = ?author_name__)
}
使用 Wikidata 中的当前数据,我在此查询中返回了五行。
获取此数据的另一种方法是使用BIND
:
SELECT * {
BIND("Knudsen GM" AS ?author_name)
?work wdt:P2093 ?author_name .
}
我想铸造可能有问题,因为这不会返回任何东西:
SELECT * {
BIND(xsd:string("Knudsen GM") AS ?author_name)
?work wdt:P2093 ?author_name .
}
xsd:string
在原始查询中更改为STR
或根本没有转换的组合都不会产生结果行。