Разбор SPARQL-запросов

Мне нужно проверить определенное структурное свойство пары миллионов запросов SPARQL, и для этого мне нужна структура WHERE . В настоящее время я пытаюсь использовать fyzz для этого, но, к сожалению, его документация не очень полезна. Разбор запросов легко, проблема в том, что я не смог восстановить структуру оператора. Например:

 >>> from fyzz import parse >>> a=parse("SELECT * WHERE {?xa ?y . {?xa ?z}}") >>> b=parse("SELECT * WHERE {?xa ?y OPTIONAL {?xa ?z}}") >>> a.where==b.where True >>> a.where [(SparqlVar('x'), ('', 'a'), SparqlVar('y')), (SparqlVar('x'), ('', 'a'), SparqlVar('y'))] 

Есть ли способ восстановить фактическое дерево синтаксиса в fyzz, а не только троек, или какой-нибудь другой инструмент, который позволил бы мне это сделать? Раньше у RDFLib был синтаксический анализатор SPARQL, но я не могу найти его в rdflib или rdfextras.sparql .

  • Некоторые материалы NLP, связанные с грамматикой, помечением, вытеснением и смысловым смысловым смыслом в Python
  • Почему это не синтаксическая ошибка в python?
  • Внедрение парсера для языка с уценкой
  • благодаря

  • TypeError: ожидается объект символьного буфера - при попытке сохранить целое число в текстовый файл
  • Использование isdigit для поплавков?
  • Анализ данных из текстового файла
  • Некоторые материалы NLP, связанные с грамматикой, помечением, вытеснением и смысловым смысловым смыслом в Python
  • Неблокирующий метод для разбора (потоковой передачи) XML в python
  • Почему это не синтаксическая ошибка в python?
  • 2 Solutions collect form web for “Разбор SPARQL-запросов”

    Другим инструментом является roqet инструмент, который упакован в rasqal . Это инструмент командной строки, который возвращает обработанное дерево. Например:

    roqet -i laqrs -d structure -n -e "SELECT * WHERE {?xa ?y OPTIONAL {?xa ?z}}"

    вывел бы ..

     Query: query verb: SELECT query bound variables (3): x, y, z query Group graph pattern[0] { sub-graph patterns (2) { Basic graph pattern[1] #0 { triples { triple #0 { triple(variable(x), uri<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, variable(y)) } } } Optional graph pattern[2] #1 { sub-graph patterns (1) { Basic graph pattern[3] #0 { triples { triple #0 { triple(variable(x), uri<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, variable(z)) } } } } } } } 

    Глядя на ваш комментарий в другом ответе, я не думаю, что это то, что вам нужно. И я не думаю, что вы найдете ответ, просматривающий парсер SPARQL. Оценка объекта (или тройного шаблона) в запросе происходит внутри Query Engines которая в хорошо спроектированных системах изолирована от разбора запроса.

    Например, в 4store вы можете посмотреть команду 4s-query с параметром -vvv (очень многословным), где вы увидите вывод о том, как выполнялся запрос и как выполнялись подстановки для каждой оценки трех шаблонов.

    ANTLR имеет грамматику SPARQL: http://www.antlr.org/grammar/1200929755392/index.html

    ANTLR может генерировать код синтаксического анализа для запуска Python.

    Python - лучший язык программирования в мире.