我需要测试几百万个SPARQL查询的某些结构属性,为此我需要 WHERE
语句的结构。目前我正尝试使用fyzz来完成这项任务,但不幸的是它的文档并不是很有用。解析查询很容易,但问题是我还没有能够恢复语句的结构。例如:
>>> from fyzz import parse
>>> a=parse("SELECT * WHERE {?x a ?y . {?x a ?z}}")
>>> b=parse("SELECT * WHERE {?x a ?y OPTIONAL {?x a ?z}}")
>>> a.where==b.where
True
>>> a.where
[(SparqlVar('x'), ('', 'a'), SparqlVar('y')), (SparqlVar('x'), ('', 'a'), SparqlVar('y'))]
在 fyzz 中是否有一种方法可以恢复实际的解析树而不仅是三元组,或者其他工具可以让我做到这一点?RDFLib 似乎过去曾经拥有一个 bison SPARQL 解析器,但我在 rdflib
或 rdfextras.sparql
包中找不到它。
谢谢。