> AFAICT Jena does not provide a way to extend the SPARQL parser. Is there > any way this could be added? Or can you think of another way to do this > without the need to fork Jena itself?
Actually it does, and has done so for a very long time. I was using this in production SPARQL database systems at a previous day job over a decade ago now. The key APIs/interfaces you want to investigate are as follows: - SPARQLParserRegistry which maps Syntax to SPARQLParser instances, register a custom parser via SPARQLParserRegistry.add() - SPARQLParser which implements the actual parser. What I did previously was to use the SPARQL JavaCC grammars from Jena as a base, add the relevant syntax extensions with their productions and then generate a parser class in my code base that I can register per the above. - You may need to extend the Query class in order to capture the syntax extensions. If you're purely using Jena for validation and then passing the original query string as-is you can likely skip this. - When calling QueryFactory.create() pass in your custom Syntax (which maps to your custom SPARQLParser) directly OR set the Syntax.defaultQuerySyntax to your custom syntax Unfortunately the code I worked on was all for proprietary product so I can't share it (and I haven't worked there in nearly 5 years now anyway) but hopefully this is enough to get you started. Happy to answer any further questions as you dig into this. Best Regards, Rob Vesse On 2026-10-13 08:56 UTC Sebastian Trueg via users wrote: > Hi Andy (and others), > > we are currently in the process of replacing Blazegraph as the backend for > the Wikidata query service with Qlever. The current version of WDQS > supports a bunch of non-standard SPARQL features and syntax via > Blazegraph-plugins. For WDQSv2 we are mostly targetting SPARQL 1.1. > However, a few additional features will make it into the new version, to > make the transition easier for users of WDQSv1. One of these features is > named sub-queries. Qlever recently added support for them (see > https://docs.qlever.dev/named-subqueries/), which is nice. However, we > parse each query via Jena for some validation, prefix injection, and custom > service resolving. > > This works fine for most cases, but when it comes to named sub-queries, > Jena will fail to parse additional syntax like "WITH %something AS { ... > }". This is expected of course, since it is not valid SPARQL. > > AFAICT Jena does not provide a way to extend the SPARQL parser. Is there > any way this could be added? Or can you think of another way to do this > without the need to fork Jena itself? > > Have a nice day. > Cheers, > Sebastian >
