微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 sparql 清除 rdf4j 中的内部字符串缓存

如何解决使用 sparql 清除 rdf4j 中的内部字符串缓存

为了避免可能出现的“XY 问题”,让我解释一下我的真正目标:我正在尝试使用 sparql 更改 rdf4j 存储库中语言标签的大小写。但是,尽管 rdf4j 将语言标签存储为定义时编写的语言标签,但它知道足以将它们视为标准规定的不区分大小写。所以它将我尝试的编辑视为无操作:

设置:

INSERT DATA { test:a skos:prefLabel "hello"@EN }

尝试:

DELETE { test:a skos:prefLabel "hello"@EN } 
INSERT { test:a skos:prefLabel "hello"@en }
WHERE 
{ test:a skos:prefLabel "hello"@EN }

结果:
这个查询什么都不做。语言标签仍拼写为 EN。 有趣的是,如果我执行两个单独的查询,这也会失败:

查询 1:

DELETE DATA { test:a skos:prefLabel "hello"@EN } 

查询 2:

INSERT DATA { test:a skos:prefLabel "hello"@en }

显然,已删除的字符串保留在内部缓存中并被重新激活,因此我的 INSERT 查询重新激活 "hello"@EN。重启会清除缓存,但这不是最好的用户体验...

现在,使用一些旧版本的 rdf4j,我可以使用魔法命令 CLEAR SILENT GRAPH <urn:uri:cache> 清除这个内部缓存。但这似乎不适用于 rdf4j 2.3.3,这是我们目前所坚持的。还有没有办法在不重启的情况下清除字符串缓存,或者以任何其他方式更改语言标签的大小写?

PS 我发现 this interesting thread 关于语言标签中大小写的处理;但它并没有让我更接近解决方案。

解决方法

乍一看,这对我来说似乎是一个错误,这是我们几年前为允许在语言标签 (https://openrdf.atlassian.net/browse/SES-1659) 中保留大小写而进行的修复的意外结果。

我不确定是否有任何仅适用于 SPARQL 的解决方法,因此请随时在 https://github.com/eclipse/rdf4j/issues 上记录错误报告/功能请求。

话虽如此,RDF4J 确实具有规范化语言标签的功能。特别是,RDF 解析器可以配置为规范化语言标签(参见 Rio configuration documentation),此外还有一个实用方法 Literals.normalizeLanguageTag,您可以使用它来将任何语言标签转换为标准规范形式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?