GraphDB 或 RDF4J 错误? BOUND() 产生错误的值

GraphDB or RDF4J bug? BOUND() yields wrong value

Ontotext GraphDB 或 RDF4J SPARQL 评估中的 BOUND() 函数似乎有问题。后者不太可能,因为我无法使用内存中的 SAIL 重现错误。

版本:Graphdb Free 9.4.1(以及一些更早的版本:在 9.4.0 中确认,在 9.3.3 中疑似,也可能更早)。

重现:

将下面的测试数据导入到默认图中:

@prefix ex: <http:example.com/vocab#> .
@prefix : <http:example.com/test#> .

:buildingA a ex:Building ;
    ex:height 100;
    ex:floors 30 .

:buildingB a ex:Building ;
    ex:height 80 .

执行这个查询:

select ?type (bound(?type) as ?test)
where {
    ?s a ?type .
}

结果:

?type    ?test
<http:example.com/vocab#Building>    "false"^^<http://www.w3.org/2001/XMLSchema#boolean>
<http:example.com/vocab#Building>    "false"^^<http://www.w3.org/2001/XMLSchema#boolean>

显然,?test 在两种解决方案中都应该成立。

我尝试了 sparql 查询的多种变体,例如在 where 子句中绑定 ?test 并尝试使用图形模式 - 结果始终相同。

如果有解决此问题的方法,我将不胜感激。

正如@damyan-ognyanov 指出的那样,我已经验证了这一点:最简单的解决方法是在投影中引入一个任意未使用的变量,例如

select ?type (bound(?type) as ?test) ?fictive_var where { ...

注意:此解决方法仅适用于在投影中使用 bound(),不适用于 where 子句中的 bind() 函数。