rdflib 的 parseQuery 解码导致无效 URI 的查询字符串



我有以下ttl文件:

@prefix : <https://www.example.co/reserved/language#> .
<https://www.example.co/reserved/root> :_id "01G39WKRH76BGY5D3SKDHJP2SX" ;
:transcript%20data [ :_id "01G39WKRH7JYRX78X7FG4RCNYF" ;
:_key "transcript%20data" ;
:value "value" ;
:value_id "01G39WKRH7PVK1DXQHWT08DZA8" ] .

我有以下查询:

q = """
PREFIX : <https://www.example.co/reserved/language#>
SELECT  ?o 
WHERE { ?s :transcript%20data/:value ?o . }
""" 

当试图查询我从ttl文件中得到的图形时,我得到了以下错误:

https://www.example.co/reserved/language#transcript data does not look like a valid URI, trying to serialize this will break.

可以看到,parseQuery已经解码了"%20"到一个空间";哪些情况下URI无效。这将返回False,同时传递给_is_valid_uri函数。

我已经在不同的SPARQL引擎上测试了这个查询,它是有效的,并且像预期的那样工作。那么,你有什么建议?要使查询有效并获得所需的结果?

我在macOS Monterey 12.4上使用rdflib Version: 6.1.1

这是SPARQL解析器中rdflib的一个错误,在此PR中修复了

似乎_hexExpand内部SPARQL解析器函数不恰当地扩展百分比编码的保留字符。添加了一个排除正则表达式来禁用此行为,并添加了一个参数化测试,该测试检查SPARQL解析器对百分比编码的保留字符集

的处理。

最新更新