Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ValueError: Invalid \escape while running query

I am trying to query DBpedia using SPARQLWrapper in Python (v3.3). This is my query:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?slot WHERE {
  <http://dbpedia.org/resource/Week> <http://www.w3.org/2002/07/owl#sameAs> ?slot
}

It results in an error from the SPARQLWrapper package:

ValueError: Invalid \escape: line 118 column 74 (char 11126)

Code:

query = "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?slot WHERE{{ {subject} {predicate} {object} }} "

query = query.format(subject=subject, predicate=predicate, object= objectfield)
        self.sparql.setQuery(query)

        self.sparql.setReturnFormat(JSON)


    results = self.sparql.query().convert() # Error thrown at this line 

Error :

Traceback (most recent call last):
  File "getUriLiteralAgainstPredicate.py", line 84, in <module>
    sys.exit(main())
  File "getUriLiteralAgainstPredicate.py", line 61, in main
    entity,predicateURI,result = p.getObject(dataAtURI,predicates, each["entity"])
  File "getUriLiteralAgainstPredicate.py", line 30, in getObject
    result = self.run_sparql("<"+subjectURI+">","<"+predicateURI+">","?slot")
  File "getUriLiteralAgainstPredicate.py", line 24, in run_sparql
    results = self.sparql.query().convert()
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/SPARQLWrapper-1.5.2-py3.3.egg/SPARQLWrapper/Wrapper.py", line 539, in convert
    return self._convertJSON()
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/SPARQLWrapper-1.5.2-py3.3.egg/SPARQLWrapper/Wrapper.py", line 476, in _convertJSON
    return jsonlayer.decode(self.response.read().decode("utf-8"))
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/SPARQLWrapper-1.5.2-py3.3.egg/SPARQLWrapper/jsonlayer.py", line 76, in decode
    return _decode(string)
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/SPARQLWrapper-1.5.2-py3.3.egg/SPARQLWrapper/jsonlayer.py", line 147, in <lambda>
    _decode = lambda string, loads=json.loads: loads(string)
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/decoder.py", line 352, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/decoder.py", line 368, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Invalid \escape: line 118 column 74 (char 11126)
like image 854
Ankit Solanki Avatar asked Jan 12 '23 23:01

Ankit Solanki


2 Answers

The problem is, that dbpedia output has this line:

{ "slot": { "type": "uri", "value": "http://got.dbpedia.org/resource/\U00010345\U00010339\U0001033A\U00010349" }},

Notice literals which start with \U (capital U). This is not valid JSON and python doesn't know how to handle it. So, problem is on DBPedia side and it can't be handled on SPARQLWrapper side.

But… You can handle it yourself like this:

results = self.sparql.query()
body = results.response.read()

fixed_body = body.decode("unicode_escape")

from SPARQLWrapper.Wrapper import jsonlayer
results = jsonlayer.decode(fixed_body)
like image 74
JimiDini Avatar answered Jan 19 '23 21:01

JimiDini


try python-cjson

so the above thing can also be tried as below

import cjson
results = self.sparql.query()
body = results.response.read()
results = cjson.decode(body)
like image 44
Gunjan Avatar answered Jan 19 '23 21:01

Gunjan