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

Sparql 绑定到由值和大括号提供的内联数据,sparql,rdf,wikidata,blazegraph,Sparql,Rdf,Wikidata,Blazegraph,我在上尝试了以下查询: 并且结果具有?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:labe

我在上尝试了以下查询:

并且结果具有
?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". }
  }
}
结果中的
?字符串
?iri
为空,看起来好像第一个绑定表达式中缺少
?项
。为什么结果不同?

SPARQL的“自底向上评估”通常被其另一个标签更好地理解,即“由内而外评估”。也就是说,嵌套是从最内层到最外层进行计算的

如果你翻转嵌套,你会看到

“非正式地说,自底向上求值意味着(逻辑上)首先求值子查询和嵌套组。”From
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". }
  }
}
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 }
    }
  }