RDFLib / sparqlwrapper

A wrapper for a remote SPARQL endpoint
https://sparqlwrapper.readthedocs.io/
Other
513 stars 121 forks source link

sparql.setReturnFormat(RDF) causes rdflib.exceptions.ParserError #176

Closed eggplants closed 2 years ago

eggplants commented 2 years ago
from SPARQLWrapper import SPARQLWrapper, RDF
sparql = SPARQLWrapper('http://ja.dbpedia.org/sparql')
sparql.setQuery('select * where { ?x ?y ?z. } limit 1')
sparql.setReturnFormat(RDF)
results = sparql.query().convert()
/Users/eggplants/prog/sparqlwrapper/SPARQLWrapper/Wrapper.py:649: RuntimeWarning: Sending Accept header '*/*' because unexpected returned format 'rdf' in a 'SELECT' SPARQL query form
  warnings.warn("Sending Accept header '*/*' because unexpected returned format '%s' in a '%s' SPARQL query form" % (self.returnFormat, self.queryType), RuntimeWarning)
Traceback (most recent call last):
  File "<string>", line 5, in <module>
  File "/Users/eggplants/prog/sparqlwrapper/SPARQLWrapper/Wrapper.py", line 1016, in convert
    return self._convertRDF()
  File "/Users/eggplants/prog/sparqlwrapper/SPARQLWrapper/Wrapper.py", line 912, in _convertRDF
    retval.load(self.response)  # (DEPRECATED) publicID=' ')
  File "/Users/eggplants/.pyenv/versions/3.9.9/lib/python3.9/site-packages/rdflib/graph.py", line 1280, in load
    return self.parse(source, publicID, format)
  File "/Users/eggplants/.pyenv/versions/3.9.9/lib/python3.9/site-packages/rdflib/graph.py", line 1851, in parse
    context.parse(source, publicID=publicID, format=format, **args)
  File "/Users/eggplants/.pyenv/versions/3.9.9/lib/python3.9/site-packages/rdflib/graph.py", line 1258, in parse
    parser.parse(source, self, **args)  # type: ignore[call-arg]
  File "/Users/eggplants/.pyenv/versions/3.9.9/lib/python3.9/site-packages/rdflib/plugins/parsers/rdfxml.py", line 608, in parse
    self._parser.parse(source)
  File "/Users/eggplants/.pyenv/versions/3.9.9/lib/python3.9/xml/sax/expatreader.py", line 111, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "/Users/eggplants/.pyenv/versions/3.9.9/lib/python3.9/xml/sax/xmlreader.py", line 125, in parse
    self.feed(buffer)
  File "/Users/eggplants/.pyenv/versions/3.9.9/lib/python3.9/xml/sax/expatreader.py", line 217, in feed
    self._parser.Parse(data, isFinal)
  File "/private/var/folders/w6/33w9tbtn5n92g_3l9n356h7r0000gn/T/python-build.20211204234811.30045/Python-3.9.9/Modules/pyexpat.c", line 461, in EndElement
  File "/Users/eggplants/.pyenv/versions/3.9.9/lib/python3.9/xml/sax/expatreader.py", line 381, in end_element_ns
    self._cont_handler.endElementNS(pair, None)
  File "/Users/eggplants/.pyenv/versions/3.9.9/lib/python3.9/site-packages/rdflib/plugins/parsers/rdfxml.py", line 197, in endElementNS
    self.current.end(name, qname)
  File "/Users/eggplants/.pyenv/versions/3.9.9/lib/python3.9/site-packages/rdflib/plugins/parsers/rdfxml.py", line 366, in node_element_end
    self.error(
  File "/Users/eggplants/.pyenv/versions/3.9.9/lib/python3.9/site-packages/rdflib/plugins/parsers/rdfxml.py", line 225, in error
    raise ParserError(info + message)
rdflib.exceptions.ParserError: None:8:153: Repeat node-elements inside property elements: http://www.w3.org/2005/sparql-results#binding

ref: #190

nicholascar commented 2 years ago

A SPARQL SELECT query doesn't return RDF, so RDF here is not a valid selection for a return type. Return types of JSON & XML are valid and work fine.

So the issue should probably be handled by raising an error due to this incompatibility of the format request, not seeing the code fail.