Как можно подготовить запрос sparql для тройного хранилища blazegraph с помощью python?

Я ищу способ, которым запрос может быть подготовлен и запущен на удаленном сервере. Я знаю, что это возможно в Stardog и GraphDB с использованием rdf4j в Java. Но как это сделать с помощью Python для Blazegraph? Я пробовал посмотреть Sparqlwrapper и rdflib. rdflib поддерживает подготовленный оператор, но его можно использовать только для синтаксического анализа файлов, и я не нашел много документации о том же, что и драйвер, как в случае rdf4j. SparqlWrapper позволяет использовать запросы к удаленному репозиторию, но у него нет примеров подготовленных операторов, и мне нужны оба.

Я просмотрел этот запрос SPARQL на удаленной удаленной конечной точке RDFLib / Redland, но кажется устаревшим (8 лет)

Требуется создать микросервис поверх blazegraph для выполнения пользовательского ввода во время выполнения. Если подготовленные операторы не используются, конкатенация строк сделает их уязвимыми для угроз безопасности и шаблонных кодов.


person user1996684    schedule 31.05.2019    source источник
comment
зачем вам это нужно для SPARQLWrapper? Это просто обычная строка запроса, отправляемая по протоколу HTTP. setQuery() не выполняет никаких преобразований алгебры и т.п., поэтому вы можете использовать простую строку Python в качестве шаблона и изменять ее посредством модификации строки.   -  person UninformedUser    schedule 31.05.2019
comment
var queryTemplate = "select * where {?s a {}}", а затем позвоните, например, queryTemplate.format("ex:Class") или что-то еще   -  person UninformedUser    schedule 31.05.2019
comment
вот справочник: < i> setQuery (self, query): установить текст запроса SPARQL. Примечание: этот модуль не проверяет правильность запроса (синтаксиса или иного), за исключением проверки типа запроса (SELECT, ASK и т. Д.). Проверка синтаксиса и валидности выполняется самой службой SPARQL.   -  person UninformedUser    schedule 31.05.2019
comment
Спасибо, но это приведет к конкатенации строк, что сделает ее уязвимой для угроз безопасности и шаблонных кодов, в то время как нам понадобится микросервис, который будет построен с пользовательским вводом. Я изменил вопрос на то же самое.   -  person user1996684    schedule 03.06.2019
comment
rdflib имеет некоторую реализацию хранилища вокруг службы SPARQL, называемую SPARQLStore, но она не работает с подготовленными запросами. Более того, если вы проверяете исходный код варианта в памяти, подготовленные запросы позволяют предоставлять привязки, которые просто обрабатываются с помощью поиска по словарю в контексте запроса во время оценки запроса SPARQL. Тебе никакой другой проверки не делалось. Удаленные привязки вводятся в запрос через функцию SPARQL 1.1 VALUES, см. Соответствующий код здесь.   -  person UninformedUser    schedule 03.06.2019
comment
Я имею в виду, что вы могли бы проанализировать запрос, чтобы проверить строку запроса и преобразовать ее обратно в строку. Кроме того, вы можете повторно использовать, например, код из API Apache Jena для проверки значений: щелкните - это всего лишь ~ 20 LOC, и, возможно, вы могли бы внести свой вклад в проект rdflib.   -  person UninformedUser    schedule 03.06.2019
comment
Конечно, лучший ответ вы, скорее всего, получите, если спросите разработчиков, по электронной почте или по вопросам на Github: github .com / RDFLib / rdflib / issues - также может быть запрос функции (если он где-то еще не существует ...), в настоящее время они работают над версией 5.0   -  person UninformedUser    schedule 03.06.2019
comment
Спасибо :) Я свяжусь с SPARQLStore, и если он все еще не решит, я сделаю запрос функции   -  person user1996684    schedule 03.06.2019
comment
Он не работает с подготовленными запросами, я уже говорил об этом и показал вам часть кода в своих предыдущих комментариях: github.com/RDFLib/rdflib/blob/master/rdflib/plugins/stores/ - он проверяет, является ли запрос типа str, который на самом деле это не так после синтаксического анализа объекта Query   -  person UninformedUser    schedule 03.06.2019