GraphDB中spif:titleCase函数标题大小写转换行为异常问询
问题原因
GraphDB 9.x及更早版本对spif:titleCase()函数的实现存在已知bug,未遵循SPIN规范中「每个单词首字母大写、其余字符保持小写」的定义,实际逻辑为全字符串转换为大写,这是导致转换结果不符合预期的根本原因。
修复方案
有两种可落地的解决方案,优先推荐第一种,兼容性更强:
- 方案1:使用SPARQL原生函数自定义实现标题大小写转换
不需要依赖spif扩展,直接用LCASE、REPLACE、UCASE组合实现,示例代码如下:
该逻辑会先将整个字符串转小写,再匹配每个单词的首字母将其转为大写,完全符合标题大小写的转换要求。PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT * WHERE { ?s rdfs:label ?label BIND( REPLACE( LCASE(STR(?label)), "(^|\\s)([a-z])", "$1" || UCASE("$2") ) AS ?tcase ) } LIMIT 10 - 方案2:升级GraphDB版本
官方在GraphDB 10.3及以上版本修复了spif:titleCase()的实现bug,升级到对应版本后原有代码即可正常输出预期结果。
内容的提问来源于stack exchange,提问作者Menelao
相关产品推荐
相关产品推荐

