“的范围是什么?”;价值观;在SPARQL查询图中

“的范围是什么?”;价值观;在SPARQL查询图中,sparql,Sparql,我有一个包含许多子查询的查询,其中也包含一些子查询。我想知道SPARQL查询中values子句的范围。它也会进入子查询吗 如果我在子查询中定义了一个values子句,并在父查询中使用了相同的变量,那么该变量是否仅具有子查询中指定的值?(反之亦然?) 我看了一下,但我发现下面的内容似乎没有回答我的问题: 数据的值块可以出现在查询模式中,也可以出现在SELECT查询(包括子查询)的末尾 SPARQL子查询从最内层到最外层进行计算。外部查询中的值块对内部查询不可用。例如: 选择?x?y?z{ 值?x{

我有一个包含许多子查询的查询,其中也包含一些子查询。我想知道SPARQL查询中values子句的范围。它也会进入子查询吗

如果我在子查询中定义了一个values子句,并在父查询中使用了相同的变量,那么该变量是否仅具有子查询中指定的值?(反之亦然?)

我看了一下,但我发现下面的内容似乎没有回答我的问题:

数据的值块可以出现在查询模式中,也可以出现在SELECT查询(包括子查询)的末尾


SPARQL子查询从最内层到最外层进行计算。外部查询中的块对内部查询不可用。例如:

选择?x?y?z{
值?x{“x”}
{select(?x as?y)(“z”as?z){}
}
如果?x的值在内部查询中可用,则?y将具有值“x”,但它没有

另一方面,子查询中块的绑定可以向外传递(如果选中)。例如,在此查询中,子查询绑定?x?y,但仅投影?x

选择?x?y{
{
选择?x{
值?x{“x”}
值?y{“y”}
}
}
}
官方答案在规范中,但不在关于值的部分中。它在里面。这不是最容易遵循的表格,但需要注意的是如下规则:

组{P1 P2…}:如果v在P1、P2…中的一个或多个范围内,则v在范围内

这意味着模式
{…}
的范围内变量集被定义为在中出现的事物的范围内变量的并集。变量向外“传递”到它们的封闭形式,而不是相反

我认为有一个例外,那就是位于最外层查询之外的values块,我认为它与位于最外层查询之内的values块几乎相同:

选择?x?y?yy{
{选择(?y为?yy){}
}
值(?x?y){(12)}
-----------------
| x   | y | z   |
=================
| "x" |   | "z" |
-----------------
-----------
| x   | y |
===========
| "x" |   |
-----------
--------------
| x | y | yy |
==============
| 1 | 2 |    |
--------------