我需要测试几百万SPARQL查询的特定结构属性,为此我需要WHERE
语句的结构。我目前正在尝试使用fyzz来做到这一点,但不幸的是它的文档并不是非常有用。解析查询很容易,问题是我无法恢复该语句的结构。例如:解析SPARQL查询
>>> 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似乎在过去拥有野牛SPARQL解析器,但我无法在rdflib
或rdfextras.sparql
包中找到它。
感谢
我知道他们是,我需要的是传递给查询引擎的对象树。基本上,我需要做的是检查表单(P1可选P2)的每个子模式P'是否在P1中发生在P2和外部P'中的每个变量。鉴于此,我需要将某些重写规则应用于原始模式,并且因为具有对象树将非常有用。 – ailnlv