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 中疑似,也可能更早)。
重现:
- 在 Windows10
下安装新的 9.4.1 免费 GraphDB
- 使用默认配置创建一个仓库,除了:启用了SHACL验证,没有推断(没有系统地测试其他配置,我怀疑都受到影响)
将下面的测试数据导入到默认图中:
@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() 函数。
Ontotext GraphDB 或 RDF4J SPARQL 评估中的 BOUND()
函数似乎有问题。后者不太可能,因为我无法使用内存中的 SAIL 重现错误。
版本:Graphdb Free 9.4.1(以及一些更早的版本:在 9.4.0 中确认,在 9.3.3 中疑似,也可能更早)。
重现:
- 在 Windows10 下安装新的 9.4.1 免费 GraphDB
- 使用默认配置创建一个仓库,除了:启用了SHACL验证,没有推断(没有系统地测试其他配置,我怀疑都受到影响)
将下面的测试数据导入到默认图中:
@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() 函数。