rdflib
rdflib copied to clipboard
Error when parsing SPARQL query with blank node
The following should work, I think:
PREFIX tr: <http://example.org/trace#>
PREFIX : <http://example.org#>
SELECT ?t
WHERE {
[ tr:from :a1 ; tr:to :a2 ] tr:in ?t .
}
But it gives the following parsing error:
Traceback (most recent call last):
File "/Users/wvw/git/pm/pmq/test.py", line 16, in <module>
qres = g.query(query)
^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/rdflib/graph.py", line 1565, in query
return result(processor.query(query_object, initBindings, initNs, **kwargs)) # type: ignore[arg-type]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/rdflib/plugins/sparql/processor.py", line 144, in query
strOrQuery = translateQuery(parseQuery(strOrQuery), base, initNs)
^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/rdflib/plugins/sparql/parser.py", line 1542, in parseQuery
return Query.parseString(q, parseAll=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 1131, in parse_string
loc, tokens = self._parse(instring, 0)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 3886, in parseImpl
loc, exprtokens = e._parse(instring, loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 4114, in parseImpl
return e._parse(
^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 4375, in parseImpl
return self.expr._parse(instring, loc, doActions, callPreParse=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 3886, in parseImpl
loc, exprtokens = e._parse(instring, loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 4375, in parseImpl
return self.expr._parse(instring, loc, doActions, callPreParse=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 5226, in parseImpl
return super().parseImpl(instring, loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 4375, in parseImpl
return self.expr._parse(instring, loc, doActions, callPreParse=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 3886, in parseImpl
loc, exprtokens = e._parse(instring, loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 4114, in parseImpl
return e._parse(
^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 4375, in parseImpl
return self.expr._parse(instring, loc, doActions, callPreParse=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 3864, in parseImpl
loc, resultlist = self.exprs[0]._parse(
^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 4959, in parseImpl
loc, tokens = self_expr._parse(instring, loc, doActions, callPreParse=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 4375, in parseImpl
return self.expr._parse(instring, loc, doActions, callPreParse=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 4375, in parseImpl
return self.expr._parse(instring, loc, doActions, callPreParse=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 5226, in parseImpl
return super().parseImpl(instring, loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 4375, in parseImpl
return self.expr._parse(instring, loc, doActions, callPreParse=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 3864, in parseImpl
loc, resultlist = self.exprs[0]._parse(
^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 817, in _parseNoCache
loc, tokens = self.parseImpl(instring, pre_loc, doActions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 4375, in parseImpl
return self.expr._parse(instring, loc, doActions, callPreParse=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 856, in _parseNoCache
tokens = fn(instring, tokens_start, ret_tokens)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/pyparsing/core.py", line 291, in wrapper
ret = func(*args[limit:])
^^^^^^^^^^^^^^^^^^^
File "/Users/wvw/anaconda3/lib/python3.11/site-packages/rdflib/plugins/sparql/parser.py", line 82, in expandTriples
if i + 1 < l_ and terms[i + 1] not in ".,;":
^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'in <string>' requires string as left operand, not CompValue
I'm using rdflib v.7.
As a workaround you can replace [...]
with a _:bnodename
.
@WhiteGobo That's exactly what I did - I just wanted to bring this to your attention :-)