Мне нужно проверить определенное структурное свойство пары миллионов запросов 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, кажется, в прошлом имел синтаксический анализатор бизонов SPARQL, но я не могу найти его в пакетах rdflib
или rdfextras.sparql
.
Спасибо