INSERT/DELETE/UPDATE query using SPARQLWrapper

后端 未结 2 1745
孤独总比滥情好
孤独总比滥情好 2021-01-18 09:24

Although I have gone through lot of examples on the web explaining the use of python SPARQLWrapper using SELECT statements for fetching data from sesame triple store, but no

相关标签:
2条回答
  • 2021-01-18 09:52

    This is not particularly clear from the docs, but I think you can just execute an update statement in the same way that you execute a query:

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

    In the case of Sesame, one thing to keep in mind is that the URL for the update endpoint (repositories/<repId>/statements) is not the same as the URL for the query endpoint (repositories/<repId>). See the Sesame protocol docs for details.

    0 讨论(0)
  • 2021-01-18 10:06

    The SPARQL queries are send as GET request, but the UPDATE (like INSERT, DELETE, etc.) requires the query be send as a POST request. Just add the following line before sparql.query()

    sparql.method = 'POST'
    

    Also, the url for update is different from the query. The update is based on workbench and not sesame url. For example, if the query url is:

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

    or

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

    then the update url would be:

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

    Therefore, the UPDATE/INSERT request should look like:

    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()
    
    0 讨论(0)
提交回复
热议问题