rdflib icon indicating copy to clipboard operation
rdflib copied to clipboard

Error when parsing SPARQL query with blank node

Open william-vw opened this issue 1 year ago • 2 comments

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.

william-vw avatar Aug 18 '23 20:08 william-vw

As a workaround you can replace [...] with a _:bnodename.

WhiteGobo avatar Aug 19 '23 16:08 WhiteGobo

@WhiteGobo That's exactly what I did - I just wanted to bring this to your attention :-)

william-vw avatar Aug 19 '23 17:08 william-vw