Skip to content

Maximum recursion depth exceeded when parsing a nested SERVICE query #2136

@GreenfishK

Description

@GreenfishK

Consider following query straight from wikidata (Cats, with pictures). To execute this query and get results using my local GraphDB instance, I need to wrap the body with SERVICE pointing ot the wikidata SPARQL endpoint. So the query is valid and returns a non-empty result set.

query = """
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX bd: <http://www.bigdata.com/rdf#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?item ?pic 
WHERE 
{
    SERVICE <https://query.wikidata.org/sparql> {
        ?item wdt:P31 wd:Q146 .
		?item wdt:P18 ?pic
        SERVICE wikibase:label {
            bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
        } # Helps get the label in your language, if not, then en language
    }
}

"""

However, when I parse it using rdflib's parseQuery I get the error message "RecursionError: maximum recursion depth exceeded in comparison".

Full stack trace

    query_tree = parser.parseQuery(query)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/rdflib/plugins/sparql/parser.py:1544: in parseQuery
    return Query.parseString(q, parseAll=True)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:1131: in parse_string
    loc, tokens = self._parse(instring, 0)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:3886: in parseImpl
    loc, exprtokens = e._parse(instring, loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4114: in parseImpl
    return e._parse(
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4375: in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:3886: in parseImpl
    loc, exprtokens = e._parse(instring, loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4375: in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:5226: in parseImpl
    return super().parseImpl(instring, loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4375: in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:3886: in parseImpl
    loc, exprtokens = e._parse(instring, loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4114: in parseImpl
    return e._parse(
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4375: in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:3886: in parseImpl
    loc, exprtokens = e._parse(instring, loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4891: in parseImpl
    return super().parseImpl(instring, loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4790: in parseImpl
    loc, tokens = self_expr_parse(instring, loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:3864: in parseImpl
    loc, resultlist = self.exprs[0]._parse(
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4375: in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4114: in parseImpl
    return e._parse(
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4375: in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:3886: in parseImpl
    loc, exprtokens = e._parse(instring, loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4375: in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:5226: in parseImpl
    return super().parseImpl(instring, loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4375: in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:3886: in parseImpl
    loc, exprtokens = e._parse(instring, loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4114: in parseImpl
    return e._parse(
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4375: in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:3886: in parseImpl
    loc, exprtokens = e._parse(instring, loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4891: in parseImpl
    return super().parseImpl(instring, loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4790: in parseImpl
    loc, tokens = self_expr_parse(instring, loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:3864: in parseImpl
    loc, resultlist = self.exprs[0]._parse(
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4375: in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:4114: in parseImpl
    return e._parse(
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:823: in _parseNoCache
    tokens = self.postParse(instring, loc, tokens)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/rdflib/plugins/sparql/parserutils.py:227: in postParse
    service_string = sgp.searchString(instring)[0][0]
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:1311: in search_string
    [t for t, s, e in self.scan_string(instring, maxMatches, debug=debug)]
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:1311: in <listcomp>
    [t for t, s, e in self.scan_string(instring, maxMatches, debug=debug)]
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:1202: in scan_string
    nextLoc, tokens = parseFn(instring, preloc, callPreParse=False)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:3886: in parseImpl
    loc, exprtokens = e._parse(instring, loc, doActions)
../../anaconda3/envs/baseDSEnv/lib/python3.8/site-packages/pyparsing/core.py:817: in _parseNoCache
    loc, tokens = self.parseImpl(instring, pre_loc, doActions)
E   RecursionError: maximum recursion depth exceeded
!!! Recursion detected (same locals & position)
----------------------------- Captured stderr call -----------------------------
Traceback (most recent call last):
  File "/home/fkovacev/.vscode/extensions/ms-python.python-2022.16.0/pythonFiles/lib/python/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch_regular.py", line 359, in __call__
    is_stepping = pydev_step_cmd != -1
RecursionError: maximum recursion depth exceeded in comparison

Metadata

Metadata

Assignees

No one assigned

    Labels

    SPARQLbugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions