1

在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或根本没有转换的组合都不会产生结果行。

4

0 回答 0