Разбор 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 .

благодаря

  • Определение Hypernym или Hyponym с помощью wordnet nltk
  • Использование SPARQL для ограниченных рассуждений RDFS и OWL
  • Использование Python rdflib: как включить литералы в sparql-запросы?
  • 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.

    Interesting Posts

    Веб-поиск или очистка или сканирование? Какой инструмент / библиотеку следует использовать?

    Захват KeyboardInterrupt в Python во время выключения программы

    Запрос отношения «многие ко многим» в SQLAlchemy

    метод сеттера декоратора свойств, который не называется

    Установка столбцов для пустого кадра данных pandas

    Объект Python .__ repr __ (self) должен быть выражением?

    Преобразование ipython ноутбуков в pdf-html

    Почему матричное умножение происходит быстрее с numpy, чем с ctypes в Python?

    Как использовать ключевое слово "raise" в Python

    3D-визуализация и графика python

    разница в производительности re.match vs re.search

    Как рассчитать количество дней между двумя датами с помощью Python?

    Как преобразовать hex в десятичный в Python?

    Загрузка объектов хранилища данных из проекта Python в Go приводит к вложенным structs slices of slices error

    Как выставить функцию, возвращающую объект C ++, на Python без копирования объекта?

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