如何在rdflib中获得sparql查询中的令牌位置



如何使用rdflib从给定的sparql查询获得给定的令牌类型(uri,文字,…)和位置?

例如,给定以下查询:

SELECT count(DISTINCT ?uri) as ?count
FROM graph WHERE {
?uri a ?type;
graph:predicate_a ?c;
FILTER(?c = xyz AND ?type != abc)
}

我想实现一个函数get_token_position,这样get_token_position('AND')将返回124(位置)和OperatorType

阅读文档,我注意到库实现了为查询构建解析树的实用程序,因此我认为使用该库可以很容易地完成这个函数。

p。:我的动机是我需要转换& & &;和";OR",,,,和"| |";当这些字符串被用作操作时。此外,我认为使用解析树将是一个比使用正则表达式模式更好的解决方案。

你能进一步解释一下你想做什么吗?似乎你是想实现一个极其复杂的函数集的字符串替换??

s = """
SELECT count(DISTINCT ?uri) as ?count
FROM graph WHERE {
?uri a ?type;
graph:predicate_a ?c;
FILTER(?c = xyz AND ?type != abc)
}
"""
s = s.replace(" AND ", " && ")  # spaces around AND to avoid in-word matches

如果您想确保替换不会影响通过变量替换可能出现在查询中的任何值,您可以简单地执行AND/&&等等先替换,然后变量再替换。

最新更新