Мне нужно проверить определенное структурное свойство пары миллионов запросов 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
.
Спасибо