这应该是有效的SPARQL吗?
SELECT ("text" AS ?aString)
WHERE {}
ORDER BY ?aString
我尝试了两种不同的引擎。一个返回?aString的“text”,其他错误,说是?aString没有在ORDER BY中定义。 SPARQL规范是否涵盖了这种情况?或者这只是一个实现细节,它恰好在某些引擎中工作,但不是严格可移植的?
答案 0 :(得分:2)
SPARQL查询(实际上,查询的一个级别,即SELECT)在模式模式中分割,并对模式的结果进行操作。这些操作称为修饰符。
它们按顺序发生:
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
可以使用它进行排序。
答案 1 :(得分:0)
Sparql.org's query validator说这是合法的。这实际上是一个非常重要的案例,因为我们希望能够做到这样的事情:
select ?min ?max ((?max - ?min) as ?range) {
#-- ...
}
order by ?range