Запрос INSERT/DELETE/UPDATE с использованием SPARQLWrapper

Хотя я просмотрел множество примеров в Интернете, объясняющих использование python SPARQLWrapper с помощью операторов SELECT для извлечения данных из тройного хранилища кунжута, но не уверен, как мы можем использовать операторы INSERT/DELETE/UPDATE в sesame, используя его. Может кто-нибудь из вас, пожалуйста, руководство в этом отношении.

Спасибо


person imran    schedule 04.01.2013    source источник


Ответы (2)


Запросы SPARQL отправляются как запрос GET, но UPDATE (например, INSERT, DELETE и т. д.) требует, чтобы запрос был отправлен как запрос POST. Просто добавьте следующую строку перед sparql.query()

sparql.method = 'POST'

Кроме того, URL-адрес для обновления отличается от запроса. Обновление основано на рабочем месте, а не на URL-адресе сезама. Например, если URL-адрес запроса:

http://localhost:8080/openrdf-sesame/repositories/test/

or

http://localhost:8080/openrdf-workbench/repositories/test/query

тогда URL-адрес обновления будет таким:

http://localhost:8080/openrdf-workbench/repositories/test/update

Поэтому запрос UPDATE/INSERT должен выглядеть так:

queryString = "INSERT DATA { GRAPH <http://example.com/> { "b" a "c". } }" 
sparql = SPARQLWrapper("http://localhost:8080/openrdf-workbench/repositories/test/update")

sparql.setQuery(queryString) 
sparql.method = 'POST'
sparql.query()
person Khwaishien    schedule 10.03.2013

Это не совсем ясно из документов, но я думаю, что вы можете просто выполнить оператор обновления так же, как вы выполняете запрос:

queryString = "DELETE WHERE { ?s ?p ?o. }" 
sparql = SPARQLWrapper("http://localhost:8080/openrdf-sesame/repositories/test/statements")

sparql.setQuery(queryString) 
ret = sparql.query()

В случае с Sesame следует помнить, что URL-адрес конечной точки обновления (repositories/<repId>/statements) не совпадает с URL-адресом конечной точки запроса (repositories/<repId>). Подробнее см. в документах по протоколу Sesame.

person Jeen Broekstra    schedule 07.01.2013
comment
этот URL дает ошибку, SPARQLWrapper.SPARQLExceptions.EndPointInternalError: EndPointInternalError: конечная точка вернула код 500 и ответ. org.openrdf.workbench.exceptions.BadRequestException: Ненастроенный путь: /statements. Я пробовал много других URL, например. (localhost:8080/openrdf-sesame/repositories/test/remove), но нет успеха. Спасибо за ответы. - person imran; 07.01.2013
comment
Вы заменили бит test в URL-адресе фактическим идентификатором вашего репозитория? Я добавил ссылку на документы протокола Sesame в ответ, в котором содержится более подробная информация. - person Jeen Broekstra; 08.01.2013
comment
Также: исключение Workbench? Верстак вообще не должен играть никакой роли в этой настройке. - person Jeen Broekstra; 08.01.2013
comment
Ах! Я ошибся в ‹repID›. Теперь мой URL-адрес localhost:8080/openrdf-sesame/repositories/sample/statements и при запуске выдает следующую ошибку: urllib2.HTTPError: HTTP Error 406: Not Acceptable. Я также посетил документы по протоколу кунжута и попытался понять причину этой ошибки. Я очень благодарен за вашу помощь. - person imran; 08.01.2013
comment
Sesame отправляет ошибку HTTP 406, когда клиент не указывает приемлемый формат ответа. Так что это похоже на проблему в SPARQLWrapper. На вашем месте я бы связался с разработчиками напрямую (думаю, у них есть список рассылки). - person Jeen Broekstra; 09.01.2013
comment
Большое спасибо за Вашу помощь. - person imran; 10.01.2013