绑定到由 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 }
}
}
我在 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 }
}
}