绑定到由 VALUES 和大括号提供的内联数据

BINDing to inlined data provided by VALUES, and braces

我在 WDQS 上尝试了以下查询:

SELECT ?item ?itemLabel ?string ?StringLabel ?iri ?iriLabel 
WHERE {
  VALUES ?item { wd:Q1339 }
  BIND( STR(?item) AS ?string ).
  BIND( IRI(?string) AS ?iri ).
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

并且结果有 ?string?iri 值。但是,如果我在查询表达式中放置一对额外的大括号

SELECT ?item ?itemLabel ?string ?StringLabel ?iri ?iriLabel 
WHERE {
  VALUES ?item { wd:Q1339 }
  {
    BIND( STR(?item) AS ?string ).
    BIND( IRI(?string) AS ?iri ).
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  }
}
结果中的

?string?iri 是空的,看起来好像第一个 BIND 表达式中缺少 ?item。为什么结果不同?

SPARQL 的 "bottom-up evaluation" 通常通过它的其他标签,即 "inside-out evaluation" 可以更好地理解。即嵌套是从最内层到最外层计算的。

如果你翻转嵌套,你会看到the results you expected --

SELECT ?item ?itemLabel ?string ?StringLabel ?iri ?iriLabel 
WHERE 
  {
    BIND( STR(?item) AS ?string ).
    BIND( IRI(?string) AS ?iri ).
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
    {
      VALUES ?item { wd:Q1339 }
    }
  }