当前位置: 首页 > 知识库问答 >
问题:

GraphDB还是RDF4J bug?BOUND()产生错误的值

元胡媚
2023-03-14

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

版本:Graphdb Free 9.4.1(以及一些早期版本:在9.4.0中确认,在9.3.3中怀疑,可能也早于此)。

复制:

  • 在Windows 10下安装新的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>

显然,?测试在两种解决方案中都应为真。

我尝试了许多变化的parql查询,如绑定?测试在哪里子句中,并玩弄图形模式——结果总是一样的。

如果有解决这个问题的办法,我很高兴听到。

共有1个答案

曹茂材
2023-03-14

正如@damyan ognyanov所指出的,我已经证实了这一点:最简单的解决方法是在投影中引入任意未使用的var,例如。

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

注意:此变通方法仅适用于在投影中使用bind(),如果在where子句中的bind()函数中使用,则不适用。

 类似资料:
  • 为什么当我添加一个语义谓词(虽然这里是一个虚拟谓词)作为替代选项时,它总是说“第1行:5在输入' '处没有可行的替代选项”?如果我删除带有false语义谓词的替代选项,错误就会像预期的那样消失。 PS:我使用的是antlr-4.0-complete.jar

  • 问题内容: 中大型Python WSGI应用程序,Apache + mod_wsgi或Nginx + mod_wsgi使用什么? 哪种组合需要更多的内存和CPU时间? 哪一个更快? 哪一个比另一个稳定? 我也在考虑使用CherryPy的WSGI服务器,但听说它不太适合负载非常大的应用程序,您对此有什么了解? 注意 :我没有使用任何Python Web Framework,只是从头开始编写了整本书。

  • 问题内容: 这是我的PHP脚本- 如果要执行,显然应该显示一些内容。 我所看到的只是一个空白页。为什么不工作? 也无济于事。我得到的只是一个空白页。 我去过那里,并开始了。什么都没发生。 问题答案: 您的文件语法错误,因此未解释您的文件,因此未更改设置,并且页面空白。 您可以将文件分成两个。 index.php error.php

  • 这是我的密码。

  • 问题内容: 也许我在PHP手册中某个地方缺少它,但是错误和异常之间的区别到底是什么?我可以看到的唯一区别是错误和异常的处理方式不同。但是什么导致异常,什么导致错误? 问题答案: 引发异常 -旨在捕获异常。错误通常是无法恢复的。例如,让我们说- 您有一段代码将在数据库中插入一行。此调用有可能失败(重复ID)-您将希望遇到一个“错误”,在这种情况下为“异常”。当您插入这些行时,您可以执行以下操作 程序

  • 问题内容: 似乎对此产生了很多困惑和不同意见([1]和其他来源),究竟会产生深拷贝还是浅拷贝。 该测试表明该副本很深: 该测试表明该副本较浅: 解决方案是否仅是制作顶层维度的深层副本,而其他维度是浅层副本?真相是什么? 问题答案: 它产生一个浅表副本,即一个包含“旧”引用的 新 数组(指向相同的对象,这些对象没有被复制)。 特别是,如果您有嵌套数组,则不会复制这些数组。您将得到一个新数组,其“顶级