<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>J. De Smet);</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Towards tackling SPARQL heterogeneity through modular parsing</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Jitse De Smet</string-name>
          <email>jitse.desmet@ugent.be</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ruben Taelman</string-name>
          <email>ruben.taelman@ugent.be</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>SPARQL</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>SPARQL Tooling</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Modular Parser</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>IDLab, Department of Electronics and Information Systems, Ghent University - imec</institution>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2025</year>
      </pub-date>
      <volume>000</volume>
      <fpage>0</fpage>
      <lpage>0001</lpage>
      <abstract>
        <p>The SPARQL ecosystem has become increasingly fragmented as engines introduce valuable but incompatible language extensions. This growing diversity undermines query portability, tooling reliability, and the pace of innovation. To address this, we designed a modular parser architecture that supports dynamic extension and modular grammar definitions. This paper presents a builder-based, TypeScript-native parser framework inspired by Chevrotain and the modular principles of Comunica. Our prototype demonstrates that key SPARQL extensions can be integrated, altered, or removed with minimal effort and strong type safety. These results suggest that modular, declarative parsing is not only feasible but essential for keeping pace with evolving SPARQL standards. Looking forward, we identify the need for round-trippable ASTs, Babel-inspired generators and transformer pipelines to enable a complete, future-proof SPARQL toolchain.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        The SPARQL query language [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], a cornerstone of the Semantic Web stack, has evolved through
both standardisation and real-world innovation. While SPARQL 1.1 defines a clear and extensible
foundation, the ecosystem has gradually diverged as implementers introduced powerful but
engine-specific extensions. For example, Virtuoso offers full-text search capabilities [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], Apache
Jena supports CONSTRUCT QUAD queries [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], and Oxigraph provides extended
date-timefunctionality including the ADJUST function [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. These features are often highly valuable, but also
incompatible, creating a heterogeneous landscape where queries that run on one engine may fail
      </p>
      <p>
        In this work, we show the need for a modular parser and what such a parser could look like.
Unlike traditional parser generators such as ANTLR [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] or Bison [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], which rely on Domain
Specific Languages (DSLs) and generate static parsing code — our parser should be defined entirely
within a host programming language. This would eliminate the compile step, enable programmatic
extension, and leverage strong typing to provide a safer, more developer-friendly API. The parser
should not be a handwritten parser either, instead it should use declarative rules such as present in
the Typescript-based Chevrotain parser toolkit [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
      </p>
      <p>
        A modular parser, that allows you to add, override, or swap grammar fragments at runtime,
would empower both researchers and practitioners to create a new generation of language-aware
SPARQL tools. This opens the door to use cases such as heterogeneous query tooling (e.g., adapting
editors like YASGUI [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] to custom SPARQL dialects), while keeping maintainability in check.
Additionally, it would allow SPARQL version translation, and rapid experimentation with new
language features. In an ecosystem where SPARQL flavors are growing rather than converging, we
believe modularity is not just a nicety—it’s a necessity.
      </p>
      <p>The next section touches lightly on the related work, while Section 3 describes the system
architecture. Section 4 sketches the demonstration that we will provide to the work‐shop. In
Section 5 we conclude the future work and desired impact of this research.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Related Work</title>
      <p>In this section, we examine prominent software packages in the SPARQL ecosystem that
implement parsing capabilities. Our findings are summarized in Fig. 1.</p>
      <p>Notably, all discussed major open-source SPARQL parsers rely on either parser generators or
parser-building toolkits to define their grammars. In compiled languages such as Rust or Java, the
parser generation step can be integrated directly into the main build step—e.g., Oxigraph uses
rustpeg for this purpose. Interestingly, in our survey only Stardog’s Millan does not use a parser
builder. Instead, it uses Chevrotain without constructing an Abstract Syntax Tree (AST); it appears
to focus solely on validation rather than full syntactic analysis.</p>
      <p>This highlights a broader pattern: while parser generators dominate SPARQL tooling, few
systems are designed with modularity or extensibility as a first-class concern. In particular, full
modularity—including the ability to remove grammar rules—is not supported in current public
implementations, making adaptation or evolution of these parsers difficult.</p>
      <sec id="sec-2-1">
        <title>Software Package</title>
      </sec>
      <sec id="sec-2-2">
        <title>Parsing software</title>
      </sec>
      <sec id="sec-2-3">
        <title>Parser Generator</title>
      </sec>
      <sec id="sec-2-4">
        <title>Comunica</title>
        <p>Yasgui</p>
      </sec>
      <sec id="sec-2-5">
        <title>Apache Jena</title>
      </sec>
      <sec id="sec-2-6">
        <title>Oxigraph</title>
      </sec>
      <sec id="sec-2-7">
        <title>Stardog – Millan</title>
      </sec>
      <sec id="sec-2-8">
        <title>Virtuoso</title>
      </sec>
      <sec id="sec-2-9">
        <title>Blazegraph</title>
      </sec>
      <sec id="sec-2-10">
        <title>GraphDB</title>
      </sec>
      <sec id="sec-2-11">
        <title>SPARQL.js RDF4J</title>
      </sec>
      <sec id="sec-2-12">
        <title>Jison</title>
      </sec>
      <sec id="sec-2-13">
        <title>SWI Prolog</title>
      </sec>
      <sec id="sec-2-14">
        <title>JavaCC</title>
      </sec>
      <sec id="sec-2-15">
        <title>Rust-peg</title>
      </sec>
      <sec id="sec-2-16">
        <title>Chevritain</title>
      </sec>
      <sec id="sec-2-17">
        <title>Bison</title>
      </sec>
      <sec id="sec-2-18">
        <title>JavaCC</title>
      </sec>
      <sec id="sec-2-19">
        <title>JavaCC</title>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. Software Architecture</title>
      <sec id="sec-3-1">
        <title>Parsers are typically implemented in one of three ways:</title>
        <p>
          1. Hand-built parsers: These are manually implemented parsers tailored to a specific
grammar. While they can be highly performant due to low-level optimizations and
language-specific design, they are often difficult to maintain, extend, or modularize.
2. Parser generators: Tools such as ANTLR [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] and Bison [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] use a Domain Specific
Language (DSL), typically based on Extended Backus–Naur Form (EBNF), to define a
grammar. These grammars are then compiled into standalone parser code. While powerful,
such approaches introduce a compile step and tend to be rigid, making modular extensions
cumbersome.
3. Parser building toolkits: Libraries such as Chevrotain [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] offer a hybrid approach,
enabling declarative grammar specification within a host programming language. These
toolkits eliminate the compile step and allow for flexible, programmatic grammar
definitions with fine-grained control over behavior and integration.
        </p>
        <p>
          To support modularity while keeping the mental model approachable, a modular parser should
be build using a parser building toolkit. Parsing itself is typically divided into multiple phases [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ],
of which the following are relevant to this work:
1. Lexical Analysis (scanning): A lexer transforms a character stream into a token stream.
2. Syntax Analysis (parsing): A parser transforms the token stream into an abstract syntax
tree (AST).
3. Semantic Analysis: Performed during or after parsing, this phase validates constraints
not enforced by grammar alone. For instance, SPARQL forbids binding to a variable which
is already in scope.
        </p>
        <p>
          Inspired by the Comunica modular query engine [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ] codebase, the codebase of a modular
parser should not be a big monolith but instead use many smaller packages that can be tied
together to serve a larger purpose. To facilitate the maintainability of many small packages a
monorepo (https://monorepo.tools/) structure could be considered. Within the Comunica codebase,
the usage of small packages allows it to define many different builds (eg. a minimal built for the
web, and a general built with and without file system access). Similar benefits can be expected in
the adoption of such a structure within the modular parser:
1. Engines: These are prebuilt, ready-to-use components such as SPARQL 1.1 and 1.2 parsers
or generators.
2. Non-engine packages: These expose modular building blocks used to construct engines,
such as grammar fragments or core construction utilities.
        </p>
        <p>However, unlike Comunica which uses Components.js, a dependency injection framework
using RDF based config files, the modular query engine can be configured within the host language
itself since components share a similar interface. We propose that a parser be build using a builder
pattern and that parser packages export the builder used, so other may extend upon it. Using a
builder pattern for the parser allows you to take a builder that is used to build one parser and
manipulate the grammar rules to construct a new parser. Concretely, we propose a builder which
allows rules to be registered by name into a rule map, thereby creating a loose coupling between
registered rules. Each rule is defined as a ParserRule object, containing both a rule name and a rule
implementation. Rule implementations can be expressed declaratively using Chevrotain’s grammar
definition functions like:
1. SUBRULE : invokes another rule, registered under some name in the current parser,
2. MANY : matches zero or more occurrences of a pattern,
3. OR : matches one of several alternatives.</p>
        <p>We propose, each rule implementation returns a function that, when invoked, receives the
parsing context and any parameters, and outputs part of the final syntax tree. Listing 1 shows an
example parser rule definition. The ParserBuilder can then be used for compositional construction
and extension through methods like addRule , deleteRule , merge , and typePatch. The typePatch
utility would enable type updates to existing rules — particularly useful when extending or
modifying a dependent rule without altering the original rule’s implementation. After the
construction of your parser, you can build it, as shown in Listing 2, returning a parser which allows
you to start parsing a string from any of the parser rules added to the builder - a property
transferred from the underlying parser builder toolkit.</p>
        <p>import type { SparqlRule } from '@traqula/core';
const iriOrNil: SparqlRule&lt;'iriOrNil', URL | null&gt; = &lt;const&gt;{
name: 'iriOrNil',
impl: ({SUBRULE, CONSUME, OR}) =&gt; () =&gt; OR&lt;URL | null&gt;([
{ALT: () =&gt; SUBRULE(iri, undefined)},
{ALT: () =&gt; {</p>
        <p>CONSUME(nilToken);
return null;
} },
]),
};
Listing 1: The definition of a parser rule parsing either a URI of the nil token, returning the parser
URI or null respectively.</p>
        <p>import { ParserBuilder } from '@traqula/core';
const parser = ParserBuilder
.create([ iriOrNil, rule1 ])
.addRule(rule2)
.patchRule(rule1Alternative)
.build({</p>
        <p>tokenVocabulary: myLexerBuilder.tokenVocabulary,
});
// The argument and return types of the function are known,
// ast will thus be inferred to have the type `URL | null`.</p>
        <p>const ast = parser.iriOrNil(myString, myContext, myParameters)
Listing 2: The construction of a parser including the iriOrNil rule constructed in Listing 1. It also
shows how to parse using the iriOrNil rule as the starting rule.</p>
        <p>As for the lexer, a similar approach to the parser should be taken. Tokens should be coupled
loosely through a name-definition map. The consumption of a token then results in the
consumption of the token with that name in the used lexer. Besides that our only requirement is
that the tokens can be expressed through the definition of a regex.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Demonstration</title>
      <p>
        In the workshop demonstration, we will showcase how our proof of concept modular
parserbuilder enables straightforward modification and extension of the existing parsers. Starting from a
prebuilt SPARQL 1.1 parser, we will incrementally evolve the grammar in four small steps using
the described builder-based architecture. Each change will be demonstrated live, with code edits
performed in an IDE and parser behavior verified in a browser-based UI. Specifically, we will:
1. extend SPARQL to support the ADJUST function [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ],
2. add support for CONSTRUCT QUAD queries [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ],
3. introduce full-text search capabilities [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], and
4. remove support for the OPTIONAL clause due to its impact on query complexity [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] .
      </p>
      <p>These modifications will demonstrate how the modular parser architecture—built around
builders enables safe and modular grammar changes with minimal effort. The focus will be on how
individual grammar components can be extended or replaced with‐out touching unrelated parts of
the parser. We will also highlight how the use of strong typing improves the developer experience
by surfacing integration errors at compile time.</p>
      <p>
        For each of the extensions we alter the grammar rules in accordance to the SPARQL 1.1
specification [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] (rule number shown between paratheses):
1. ADJUST function: We add an ‘ADJUST ’ token to the lexer and add a grammar rule for it,
then patch the BuiltInCall (121) rule.
2. CONSTRUCT QUAD queries: Following Jena’s approach, we patch the ConstructQuery
(10) and ConstructTriples (74) rules and introduce a ConstructQuads rule.
3. Full-text search: We patch the objectPath (86) and object (80) rules to allow an ‘ OPTION’
keyword followed by a scoring clause like ‘ ( score Expression ) ’.
4. Dropping OPTIONAL: This involves deleting the OptionalGraphPattern (57) rule,
patching the GraphPatternNotTriples (56), and removing the ‘OPTIONAL ’ token from the
lexer.
      </p>
      <p>While the demo is not interactive for attendees, all code and tooling will be made available for
experimentation after the session. The demo will serve to illustrate how a modular parser builder
enables a new generation of language-aware SPARQL tools with modular, declarative grammar
support and a strong developer experience.</p>
    </sec>
    <sec id="sec-5">
      <title>5. Conclusion</title>
      <p>In this paper, we presented the need for a modular parser, and offered an initial prototype to
cover this need. Our prototype uses a builder-based architecture for constructing extensible
SPARQL parsers. By embracing runtime modularity, declarative rule definitions, and strong typing,
our approach enables a new class of SPARQL tools that can evolve alongside a rapidly diversifying
query ecosystem. Through our demonstration, we showed that parser modification can be
performed with minimal overhead and high confidence in correctness.</p>
      <p>
        Looking ahead, several important challenges remain:
1. In order to bootstrap the adoption of the modular parser, a robust, default parser with a
well-defined Abstract Syntax Tree (AST) format should be created. This AST should
support round-tripping—ensuring that a query parsed into the AST and then regenerated
from it yields a string-identical query. This requirement on the AST will facilitate the
creation of language tools such as linters.
2. To support such round-tripping, we will need to design a corresponding generator. This
generator could follow architectural patterns established by the Babel JavaScript compiler
[
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] combined with the builder pattern described in this work.
3. We envision the need for a flexible AST transformer system that makes it easy to map the
AST into alternative representations. Such a transformer will facilitate static analysis,
query-optimization, and translation to other query languages.
      </p>
      <p>Together, these next steps would complete a robust pipeline: from parsing, through
transformation, to code generation—all powered by modular, declarative components. We hope
this work provides a foundation for building SPARQL tools that are not only adaptable to change,
but actively enable it.</p>
      <p>Acknowledgements.</p>
      <p>Jitse De Smet is a predoctoral fellow of the Research Foundation – Flanders (FWO) (1SB8525N).
Ruben Taelman is a postdoctoral fellow of the Research Foundation – Flanders (FWO) (1202124N).</p>
      <p>During the preparation of this work, the author(s) used Chat-GPT-4 in order to: Paraphrase and
reword, improve writing style, perform grammar and spelling checks, and drafting the abstract.
After using these tool(s)/service(s), the author(s) reviewed and edited the content as needed and
take(s)full responsibility for the publication’s content.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Harris</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Seaborne</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Prud</surname>
          </string-name>
          'hommeaux, E.:
          <article-title>SPARQL 1.1 Query Language</article-title>
          . W3C, https://www.w3.org/TR/2013/REC-sparql11
          <string-name>
            <surname>-</surname>
          </string-name>
          query-20130321/ (
          <year>2013</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Virtuoso</surname>
          </string-name>
          :
          <article-title>Using Full Text Search in SPARQL</article-title>
          . https://docs.openlinksw.com/virtuoso/sparqlextensions/#rdfsparqlrulefulltext (
          <year>2024</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>Apache</given-names>
            <surname>Jena: ARQ - Construct Quad</surname>
          </string-name>
          . https://jena.apache.org/documentation/query/constructquad.html#Grammar (
          <year>2024</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <article-title>[4] Oxigraph: SEP 0002: calendar and duration operations</article-title>
          . https://github.com/oxigraph/oxigraph/wiki/SPARQL#sep-0002
          <string-name>
            <surname>-</surname>
          </string-name>
          calendar-and
          <string-name>
            <surname>-durationoperations</surname>
          </string-name>
          (
          <year>2024</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Hartig</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Seaborne</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Taelman</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Williams</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tanon</surname>
            ,
            <given-names>T.P.:</given-names>
          </string-name>
          <article-title>SPARQL 1.2 Query Language</article-title>
          . https://www.w3.org/TR/sparql12-query/ (
          <year>2025</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Hartig</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Champin</surname>
          </string-name>
          , P.-A.,
          <string-name>
            <surname>Kellogg</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Seaborne</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>SPARQL 1.2 Query Language</article-title>
          . https://www.w3.org/TR/rdf12-concepts
          <string-name>
            <surname>/</surname>
          </string-name>
          (
          <year>2025</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Parr</surname>
            ,
            <given-names>T.J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Quong</surname>
            ,
            <given-names>R.W.:</given-names>
          </string-name>
          <article-title>ANTLR: A Predicated - LL(k) Parser Generator</article-title>
          .
          <source>Softw.Pract. Exp</source>
          .
          <volume>25</volume>
          ,
          <fpage>789</fpage>
          -
          <lpage>810</lpage>
          (
          <year>1995</year>
          ). doi:
          <volume>10</volume>
          .1002/SPE.4380250705
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          <article-title>[8] GNU: GNU Bison</article-title>
          . https://www.gnu.org/software/bison/ (
          <year>2025</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Chevrotain</surname>
            , Soel,
            <given-names>S.</given-names>
          </string-name>
          :
          <article-title>Chevrotain - Parser Building Toolkit for JavaScript</article-title>
          . https://github.com/Chevrotain/chevrotain/ (
          <year>2025</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Rietveld</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hoekstra</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          :
          <article-title>The YASGUI family of SPARQL clients</article-title>
          .
          <source>Semantic Web</source>
          .
          <volume>8</volume>
          ,
          <fpage>373</fpage>
          -
          <lpage>383</lpage>
          (
          <year>2017</year>
          ). doi:
          <volume>10</volume>
          .3233/SW-150197
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Aho</surname>
            ,
            <given-names>A.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sethi</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ullman</surname>
            ,
            <given-names>J.D.</given-names>
          </string-name>
          : Compilers: Principles, Techniques, and Tools. AddisonWesley, https://www.worldcat.org/oclc/12285707 (
          <year>1986</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Taelman</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Herwegen</surname>
            ,
            <given-names>J.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sande</surname>
            ,
            <given-names>M.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Verborgh</surname>
          </string-name>
          , R.:
          <article-title>Comunica: A Modular SPARQL Query Engine for the Web</article-title>
          . In: Vrandecic,
          <string-name>
            <given-names>D.</given-names>
            ,
            <surname>Bontcheva</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            ,
            <surname>Suárez</surname>
          </string-name>
          <string-name>
            <surname>Figueroa</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.C.</given-names>
            ,
            <surname>Presutti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            ,
            <surname>Celino</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            ,
            <surname>Sabou</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Kaffee</surname>
          </string-name>
          , L.-A., and
          <string-name>
            <surname>Simperl</surname>
          </string-name>
          , E.(eds.)
          <source>The Semantic Web - ISWC 2018 - 17th International Semantic Web Conference</source>
          , Monterey, CA, USA, October 8-
          <issue>12</issue>
          ,
          <year>2018</year>
          , Proceedings, Part II. pp.
          <fpage>239</fpage>
          -
          <lpage>255</lpage>
          . Springer (
          <year>2018</year>
          ). doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>030</fpage>
          -00668-6_
          <fpage>15</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Pérez</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Arenas</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gutierrez</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Semantics and complexity of SPARQL</article-title>
          .
          <source>ACM Trans. Database Syst</source>
          .
          <volume>34</volume>
          ,
          <issue>16</issue>
          :
          <fpage>1</fpage>
          -
          <lpage>16</lpage>
          :
          <fpage>45</fpage>
          (
          <year>2009</year>
          ). doi:
          <volume>10</volume>
          .1145/1567274.1567278
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14] sebmck, nicolo-ribaudo, hzoo: Babel. https://github.com/babel/babel (
          <year>2025</year>
          ).
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>