gpt4 book ai didi

SPARQL:组内外相同变量的绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 11:58:48 26 4
gpt4 key购买 nike

是使用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其中指出:

    The variable introduced by the BIND clause must not have been used in the group graph pattern up to the point of use in BIND.

  • 我对 18.2.1 Variable Scope 的阅读
    是在查询 1 中,变量 ?p在范围内
    内部组,因此也在组外的范围内。
    查询 2 的 arq 错误消息是否也适用于
    查询 1?

  • 我将不胜感激。

    最佳答案

  • 不,查询 1 不违反 BIND 的规则,查询有效。这是因为 SPARQL 中组的查询评估是由内而外定义的。内部组单独评估,并在外部组之前进行。如果内组是自己取的,使用BIND显然很好,因为?p尚未绑定(bind)到组中。在您引用的规范文本中,两个关键部分是:“不得使用...... 在组图模式中直到 在 BIND 中使用。”
  • 需要为组中的每个子句单独确定范围内变量,或者换句话说,在组中的不同位置,不同的变量在范围内。对于查询 1 中的外部组,在 BIND 之前,范围内没有变量,因此 BIND已验证。在 BIND 之后, ?p在范围内,这就是为什么第二个 BIND在查询 2 中给出错误。一种思考方式:一个组以空范围开始,每个子句都可能为该组贡献变量。如果变量已经由前面的子句提供,BIND可能不会分配该变量。
  • 关于SPARQL:组内外相同变量的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56129799/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com