问题
I have been having this weird issue, I am trying to insert into a virtuoso graph using SPARQLWrapper library in python.
I am able to insert a triple via the browser based endpoint at localhost:8890\sparql
, but when I try the same query via my python SparqlWrapper it throws the below error:
SPARQLWrapper.SPARQLExceptions.QueryBadFormed: QueryBadFormed: a bad request has been sent to the endpoint, probably the sparql query is bad formed.
I feel there is something wrong at configuration end, but failed to identify the same.
PREFIX dbpedia: <http://dbpedia.org/resource/> Insert Data { GRAPH <test> { <http://dbpedia.org/resource/life> <http://umbel.org/umbel/rc/Artist> '2' . } }
Traceback (most recent call last):
File "test.py", line 33, in <module>
sys.exit(process.run("1"))
File "test.py", line 27, in run
result = self.sparql.query().convert()
File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SPARQLWrapper/Wrapper.py", line 390, in query
return QueryResult(self._query())
File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SPARQLWrapper/Wrapper.py", line 363, in _query
raise QueryBadFormed()
SPARQLWrapper.SPARQLExceptions.QueryBadFormed: QueryBadFormed: a bad request has been sent to the endpoint, probably the sparql query is bad formed.
回答1:
If you take this to the sparql.org's SPARQL update validator, it will tell you immediately that this is wrong, and where the syntax error is:
Input:
1 PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 2 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 3 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 4 PREFIX owl: <http://www.w3.org/2002/07/owl#> 5 PREFIX fn: <http://www.w3.org/2005/xpath-functions#> 6 PREFIX apf: <http://jena.hpl.hp.com/ARQ/property#> 7 8 PREFIX dbpedia: <http://dbpedia.org/resource/> 9 Insert Data Into GRAPH <test> { 10 <http://dbpedia.org/resource/life> <http://umbel.org/umbel/rc/Artist> '2'^^xsd:integer . 11 }
Syntax error:
Encountered " "into" "Into "" at line 9, column 13. Was expecting: "{" ...
Of course, to find out how to do what you're trying to do, you'll need to look to the spec. The SPARQL 1.1 Update is the place to look, and while I'd advise you to skim through that to get a good idea of what's in there, one example will be enough to show what you need to write:
Example 2:
This SPARQL 1.1 Update request adds a triple to provide the price of a book. As opposed to the previous example, which affected the default graph, the requested change happens in the named graph identified by the IRI
http://example/bookStore
.PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX ns: <http://example.org/ns#> INSERT DATA { GRAPH <http://example/bookStore> { <http://example/book1> ns:price 42 } }
Your query needs to be
PREFIX dbpedia: <http://dbpedia.org/resource/>
Insert Data
{ GRAPH <test> { <http://dbpedia.org/resource/life> <http://umbel.org/umbel/rc/Artist> '2'^^xsd:integer . } }
来源:https://stackoverflow.com/questions/20636073/sparql-insert-exception-sparqlwrapper-sparqlexceptions-querybadformed