SELECT 子句中绑定的变量是否可以在 ORDER BY 中访问?
Should variable bound in SELECT clause be accessible in ORDER BY?
这应该是有效的 SPARQL 吗?
SELECT ("text" AS ?aString)
WHERE {}
ORDER BY ?aString
我试过两种不同的引擎。一个 returns "text" 对于 ?aString,另一个错误,说 ?aString 没有在 ORDER BY 中定义。 SPARQL 规范是否涵盖这种情况?或者这只是一个实现细节,它恰好在某些引擎中工作,但不是严格可移植的?
Sparql.org's query validator 说这是合法的。这实际上是一个非常重要的案例,因为我们希望能够做这样的事情:
select ?min ?max ((?max - ?min) as ?range) {
#-- ...
}
order by ?range
一个 SPARQL 查询(实际上,查询的一个级别,即 SELECT)拆分为模式 pattern 和对模式结果的操作。这些操作称为修饰符。
它们按顺序发生:
order - project - distinct - reduces - offset - limit
SELECT
很复杂——它不仅仅是一个修饰符,也不仅仅是一个投影。示例中的 AS
有两个方面,它变得像 BIND
作为最终模式阶段完成,并且还包括项目中的变量。
此查询与查询中的 SPARQL 代数形式完全相同。
SELECT ?aString
WHERE {
...
BIND ("text" AS ?aString)
}
ORDER BY ?aString
或在代数中:
(project (?aString)
(order (?aString)
(extend ((?aString "text"))
...)))
这是由内而外计算的。
?aString
是在排序发生之前定义的,ORDER BY
可以使用它进行排序。
这应该是有效的 SPARQL 吗?
SELECT ("text" AS ?aString)
WHERE {}
ORDER BY ?aString
我试过两种不同的引擎。一个 returns "text" 对于 ?aString,另一个错误,说 ?aString 没有在 ORDER BY 中定义。 SPARQL 规范是否涵盖这种情况?或者这只是一个实现细节,它恰好在某些引擎中工作,但不是严格可移植的?
Sparql.org's query validator 说这是合法的。这实际上是一个非常重要的案例,因为我们希望能够做这样的事情:
select ?min ?max ((?max - ?min) as ?range) {
#-- ...
}
order by ?range
一个 SPARQL 查询(实际上,查询的一个级别,即 SELECT)拆分为模式 pattern 和对模式结果的操作。这些操作称为修饰符。
它们按顺序发生:
order - project - distinct - reduces - offset - limit
SELECT
很复杂——它不仅仅是一个修饰符,也不仅仅是一个投影。示例中的 AS
有两个方面,它变得像 BIND
作为最终模式阶段完成,并且还包括项目中的变量。
此查询与查询中的 SPARQL 代数形式完全相同。
SELECT ?aString
WHERE {
...
BIND ("text" AS ?aString)
}
ORDER BY ?aString
或在代数中:
(project (?aString)
(order (?aString)
(extend ((?aString "text"))
...)))
这是由内而外计算的。
?aString
是在排序发生之前定义的,ORDER BY
可以使用它进行排序。