使用BIND
有效吗?
# Query 1
SELECT * {
BIND (<http://ex/p2> as ?p)
{
BIND (<http://ex/p1> as ?p)
?s ?p ?o
}
}
在海龟数据上运行时:
@prefix h: <http://ex/> .
h:s1 h:p1 h:o1 .
h:s2 h:p2 h:o2 .
arq 3.11.0给出的结果是:
-------------
| p | s | o |
=============
-------------
不会抛出错误(即使在使用时也不会--strict
)。但是删除组或更改顺序确实会出错:
# Query 2
SELECT * {
BIND (<http://ex/p2> as ?p)
BIND (<http://ex/p1> as ?p)
?s ?p ?o
}
BIND: Variable used when already in-scope: ?p in BIND(<http://ex/p1> AS ?p)
和:
# Query 3
SELECT * {
{
BIND (<http://ex/p1> as ?p)
?s ?p ?o
}
BIND (<http://ex/p2> as ?p)
}
BIND: Variable used when already in-scope: ?p in BIND(<http://ex/p2> AS ?p)
问题:
查询 1 是否违反了10.1 BIND,其中规定:
BIND 子句引入的变量在 BIND 中使用之前不得在组图模式中使用。
我对18.2.1 变量范围的解读 是,在查询 1 中,变量
?p
在内部组的范围内 ,因此也在组外的范围内。查询 2 的 arq 错误消息是否也适用于查询 1?
我将不胜感激。