<!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 />
    <article-meta>
      <title-group>
        <article-title>StarBench: Benchmarking RDF-star Triplestores</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Ghadeer Abuoda</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Christian Aebeloe</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Daniele Dell'Aglio</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Arthur Keen</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Katja Hose</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>ArangoDB</institution>
          ,
          <addr-line>San Francisco</addr-line>
          ,
          <country country="US">United States</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Department of Computer Science, Aalborg University</institution>
          ,
          <addr-line>Aalborg</addr-line>
          ,
          <country country="DK">Denmark</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Institute of Logic and Computation, TU Wien</institution>
          ,
          <addr-line>Vienna</addr-line>
          ,
          <country country="AT">Austria</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>RDF-star has rapidly gained popularity as a way to annotate RDF statements while avoiding the disadvantages of reification. Hence, a number of triplestores supporting this new standard have become available. Yet, it is dificult to assess the performance of these systems and to which degree they support RDF-star and the corresponding SPARQL-star query language. Hence, in this paper, we propose StarBench, a benchmark for testing SPARQL-star support and runtime performance. We ran StarBench on a number of state-of-the-art triplestores with RDF-star and SPARQL-star support and share our findings. Based on these findings, we highlight existing challenges and research opportunities.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Benchmark</kwd>
        <kwd>RDF-star</kwd>
        <kwd>SPARQL-star</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>and SPARQL-star constructs are supported. For example, embedded patterns in object position
or using Union or Optional between diferent embedded graph patterns. Moreover, REF only
reports runtime performance but does not check if the query answers are correct.</p>
      <p>
        Hence, we propose StarBench, a benchmark aimed at overcoming such limitations, tailored
for evaluating and comparing the performance of SPARQL-star query engines. We built
StarBench by extending REF: we designed a comprehensive set of queries that account for various
specific constructs of RDF-star and SPARQL-star [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], totaling in 56 SPARQL-star queries. The
benchmark is available at the URL: https://github.com/dkw-aau/SPARQL-star-Benchmark under
open licences (CC-BY 4.0 for the data and ASL 2.0 for the code).
      </p>
      <p>We discuss the efectiveness of StarBench by analyzing the performance of various
SPARQLstar query engines, including Apache Jena, Oxigraph, and GraphDB. The insights we gather
from our results hint the research and development directions need to fully support RDF-star to
eficiently query it.</p>
      <p>This paper is structured as follows: we introduce the related work in Section 2 and the
background in Section 3. We describe the modification strategies used to generate StarBench
queries and how we selected them in Section 4. We describe our experience applying StarBench
to existing query engines in Section 5, and we conclude with final remarks in Section 6.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Related Work</title>
      <p>
        Ever since the inception of SPARQL, there has been a long-standing tradition of benchmarking
SPARQL query engines. This efort is still ongoing with several works on benchmarking SPARQL
query engines being published over the past few years [
        <xref ref-type="bibr" rid="ref10 ref11 ref13 ref14 ref15 ref16 ref17 ref18 ref8 ref9">8, 9, 10, 11, 13, 14, 15, 16, 17, 18</xref>
        ]. These
benchmarks cover various diferent aspects of SPARQL query engines, such as reasoning [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ],
federations [
        <xref ref-type="bibr" rid="ref13 ref14">13, 14</xref>
        ], stress-testing [
        <xref ref-type="bibr" rid="ref10 ref15">10, 15</xref>
        ], and query processing performance [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. Furthermore,
the Linked Data Benchmarking Council (LDBC) [
        <xref ref-type="bibr" rid="ref19 ref20">19, 20</xref>
        ] aims to organize management and
development of RDF and SPARQL benchmarks in a collaborative environment.
      </p>
      <p>
        While many SPARQL benchmarking suites focus on diferent aspects of query engines, they
have some commonalities. Most of these benchmarks are community-driven initiatives. Several
benchmarks focus on realistic and real-world data and queries [
        <xref ref-type="bibr" rid="ref13 ref14 ref15 ref16">13, 14, 15, 16</xref>
        ]. As an example,
LargeRDFBench [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] is a benchmarking suite for federated SPARQL query engines: it comprises
13 diferent and interlinked datasets within various domains, such as general knowledge and
biomedical data, and 40 queries of varying complexity and dificulty that access data across
numerous of these datasets. Other benchmarks instead choose to provide synthetic datasets
or queries [
        <xref ref-type="bibr" rid="ref10 ref8 ref9">10, 8, 9</xref>
        ]. They usually focus on performance-heavy metrics like stress-testing
and only secondarily focus on the meaningfulness of the data or the query. For instance, the
Waterloo SPARQL Diversity Test Suite (WatDiv) [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] provides data and query generators to
create synthetic datasets with unlimited scale factors and diferent queries based on predefined
query templates. Doing so helps assess the performance of query engines under stress for a
diversified set of queries.
      </p>
      <p>
        While plenty of benchmarking suites exist to test various aspects of SPARQL query engines,
to the best of our knowledge, there is only one benchmark to assess SPARQL-star capabilities
in query engines, called the RDF Reification Benchmark (REF) [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. REF was initially proposed
to assess reification techniques over SPARQL-star engines. As such, REF provides an RDF-star
representation of the Biomedical Knowledge Repository (BKR) dataset [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]. Furthermore, REF
includes 12 queries, 7 of which were extracted from the original BKR paper [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] as well as [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ].
The remaining 5 queries were created specifically for the REF benchmark. However, most
queries in the REF benchmark contain only basic graph patterns with triple patterns in the form
(, , ) or ((, , ), , ), optionally with FILTER clauses.
      </p>
      <p>We argue that we need a more diverse set of queries to comprehensively test the features of
SPARQL-star engines. Therefore, when designing StarBench we opted for a hybrid approach:
we use a real-world dataset, i.e., the one of the REF, and extend the REF query set with synthetic
queries. Such a mixed set of real-world and synthetic queries can be beneficial for experimenting
with realistic workloads as well as for testing the correct behavior of the SPARQL-star engines.</p>
      <p>
        It is also worth noting that the goal of StarBench is to test the support of SPARQL-star engines.
This is diferent from the goal of REF and other initiatives like [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ], which aimed to evaluate
reification strategies and compare them. As such, we believe that StarBench can be a valuable
resource for researchers and practitioners focusing on the development and comparison of
SPARQL-star query engines.
      </p>
      <p>
        Finally, regarding the assessment of RDF-star support in RDF triple stores in general, previous
studies focused on RDF-star implementations in commercial RDF stores [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ]. In this paper, we
consider diferent commercial and open-source RDF triplestores with a more practical, extensive
analysis of RDF-star support.
      </p>
    </sec>
    <sec id="sec-3">
      <title>3. Background</title>
      <p>An RDF statement is a triple consisting of a subject, a predicate, and an object. The subject is
the described resource, the predicate and object are the property-value pair of the resource.
Definition 1 (RDF statement). Let , , and  be the disjoint sets of IRIs, blank nodes, and
literals. Let  = ( ∪  ∪ ) be the set of RDF terms. An RDF statement is a triple (, , ) ∈
( ∪ ) ×  × ( ∪  ∪ ), representing that subject  and object  are in a relation  ( predicate).
An RDF graph is a finite set of RDF statements.</p>
      <p>RDF-star then extends the above definition of RDF statements by allowing subjects and objects
to be statements themselves.</p>
      <p>Definition 2 (RDF-star statement). Let  ∈  ∪  ,  ∈ ,  ∈  ∪  ∪ , then an RDF-star
statement is a triple defined recursively as follows:
• Any RDF statement (, , ) is an RDF-star statement;
• Let  and ¯ be RDF-star statements. Then, (, , ), (, , ), and (, , ¯) are RDF-star
statements – also known as asserted statement.  and ¯ are referred to as embedded (or
quoted) statements.</p>
      <p>
        SPARQL [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ] is the standard language for querying RDF graphs. At its core, there is the notion
of triple pattern.
Definition 3 (Triple pattern). Let  be the set of query variables, infinite and disjoint from the
set of RDF terms  . A SPARQL triple pattern conforms to: ( ∪  ) × ( ∪  ) × ( ∪  ).
Triple patterns can then be combined into basic graph patterns (BGPs) via joins on the involved
query variables. Additionally, SPARQL queries can be extended with operators, such as, such
as left join (OPTIONAL), union (UNION), and selection (FILTER) as well as aggregations and
solution modifiers, such as ORDER and LIMIT. For a full description, we refer the reader to
the SPARQL standard [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ]. The semantics of SPARQL queries are based on multisets (bags) of
mappings, i.e., a SPARQL solution mapping  is a partial function that maps query variables to
RDF terms.
      </p>
      <p>SPARQL-star then extends SPARQL to process RDF-star statements. One of the main
diferences is the definition of triple patterns, which accounts for embedded statements.
Definition 4 (SPARQL-star triple pattern).
recursively defined as follows:</p>
      <p>A SPARQL-star triple pattern is a triple pattern
• Every SPARQL triple pattern is a SPARQL-star triple pattern;
• If  and ¯ are SPARQL-star triple patterns,  is an RDF term or a query variable, and  is an
IRI or a query variable, then (, , ), (, , ), and (, , ¯) are SPARQL-star asserted triple
patterns, and  and ¯ are embedded triple patterns.</p>
      <p>A SPARQL-star basic graph patterns (BGP-star) correspond to a conjunction of a set of
SPARQLstar triple patterns. A SPARQL-star solution mapping  is a partial function that maps variables
to the RDF-star terms, i.e. URIs, blank nodes, literals, and RDF-star triples.</p>
    </sec>
    <sec id="sec-4">
      <title>4. StarBench Design</title>
      <p>
        When designing StarBench, we built upon REF [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] for our baseline queries and the dataset.
We use the Biomedical Knowledge Repository (BKR) dataset [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ], which contains 61,032,567
triples, including approximately 35 million distinct subjects, 8 million distinct objects, and over
33 million distinct predicates.
      </p>
      <p>At its core, StarBench relies on a number of baseline queries (Section 4.1) that are then
systematically modified using a well-defined set of modification strategies (Section 4.2), which
are applied individually or in combination to generate new query variations.</p>
      <sec id="sec-4-1">
        <title>4.1. Baseline Queries</title>
        <p>REF contains twelve baseline queries, grouped into three distinct categories: A, B, and F1. In
the following, we use the identifier format   to indicate that a query is the  th query in
category  .
1The complete list of queries is available in our project repository: https://github.com/dgraux/RDFStarObservatory/
tree/master/testSuits/REF-Benchmark
1 SELECT ?s ?p ?o
2 WHERE { &lt;&lt; ?s ?p ?o &gt;&gt; provenir:derives_from pubmed:99992-INST }</p>
        <sec id="sec-4-1-1">
          <title>Listing 1: Baseline query A1</title>
          <p>1 SELECT ?source_cl (COUNT(?source_cl) AS ?c)
2 WHERE {
3 ?source_inst rdf:type ?source_cl .
4 &lt;&lt; meta:C0543467-INST bkr_sn:TREATS ?o &gt;&gt; provenir:derives_from ?source_inst
5 } GROUP BY ?source_cl</p>
        </sec>
        <sec id="sec-4-1-2">
          <title>Listing 2: Baseline query A3.</title>
          <p>
            Category A includes four queries, for example, the two queries in Listings 1 and 2. These
queries are derived from the study conducted by Sahoo et al. [
            <xref ref-type="bibr" rid="ref21">21</xref>
            ], and are characterized by the
presence of a unique statement with embedded statements. The queries in this category include
a specific provenance predicate :derives_from 2.
1 SELECT ?o1 ?o2 ?pmid2
2 WHERE {
3 &lt;&lt; ?o1 bkr_sn:CAUSES ?o2 &gt;&gt; provenir:derives_from ?pmid2 .
4 &lt;&lt; bkr_sn:C0543467-INST bkr_sn:TREATS ?o1 &gt;&gt; provenir:derives_from pubmed:10979521-INST
5 }
          </p>
        </sec>
        <sec id="sec-4-1-3">
          <title>Listing 3: Baseline query B2.</title>
          <p>Category B has three queries involving more complex triple patterns. An example is shown in
Listing 3 containing two SPARQL-star triple patterns, where the two embedded triple patterns
share a common variable.
1 SELECT ?o1 ?o2 ?pmid2
2 WHERE {
3 &lt;&lt; bkr_meta:C0543467-INST bkr_sn:TREATS ?o1 &gt;&gt; provenir:derives_from pubmed:10979521-INST .
4 &lt;&lt; ?o1 bkr_sn:CAUSES ?o2 &gt;&gt; provenir:derives_from ?pmid2 .
5 &lt;&lt; ?o2 bkr_sn:AFFECTS ?o3 &gt;&gt; provenir:derives_from ?pmid3 .
6 }</p>
        </sec>
        <sec id="sec-4-1-4">
          <title>Listing 4: Baseline query B3.</title>
          <p>Another example of is the baseline query B3, shown in Listing 4: it contains three triple
patterns where the join variables lie in the embedded triple patterns.
1 SELECT ?o ?source1 ?source2
2 WHERE {
3 &lt;&lt; bkr:META_C0040300-INST bkr_sn:PART_OF ?o &gt;&gt;
4 provenir:derives_from ?source1 ;
5 provenir:derives_from ?source2 .
6 FILTER ( str(?source1) &gt; str(?source2) )
7 }</p>
        </sec>
        <sec id="sec-4-1-5">
          <title>Listing 5: Baseline query F3.</title>
          <p>
            Finally, category F includes five queries, introduced by the REF authors [
            <xref ref-type="bibr" rid="ref11">11</xref>
            ]. Such queries
are characterized by the presence of FILTER clauses. These queries retrieve asserted statements
containing both provenance and temporal annotations. An example query of this category, F3,
is presented in Listing 5.
2For ease of presentation, we omit prefixes in the examples and the queries in this paper.
          </p>
          <p>SELECT (COUNT(*) as ?Triples)</p>
          <p>WHERE { ?d ?e « ?s ?p ?o » }</p>
        </sec>
      </sec>
      <sec id="sec-4-2">
        <title>4.2. Modification Strategies</title>
        <p>In total, we used six modification strategies (M1 through M6) as described below.
M1. RDF-star constructs. This modification strategy changes the SPARQL-star triple
patterns in the queries to increase or reduce their complexity. In particular:
• it introduces double nesting of embedded graph patterns, as for example in the StarBench
query C1 (Listing 6, Line 2) and
• it positions the embedded triple pattern in the subject or object position of the RDF-star
triple, e.g., query C2 in Listing 7 is derived from baseline query A1 (Listing 1) by moving
the embedded triple pattern from the subject to the object position.
1–16
Listing 6: Query C1: asserted triple pattern as the subject of another asserted triple pattern.</p>
        <sec id="sec-4-2-1">
          <title>Listing 7: Query C2: embedded triple pattern in object position.</title>
          <p>1 SELECT (COUNT(*) as ?Triples)
2 WHERE {
3 &lt;&lt; ?o1 bkr_sn:CAUSES ?o2 &gt;&gt; provenir:derives_from ?pmid2
4 &lt;&lt; meta:C0543467-INST bkr_sn:TREATS ?o1 &gt;&gt; provenir:derives_from ?pmid1 .
5 }</p>
          <p>Listing 8: Query P19: the object of the triple pattern in Line 4 is replaced with a variable
M2. Replacing resources with variables. By replacing resources in a query template with
variables, we can increase the number of retrieved results. For example, query P19 in Listing 8
has been derived from baseline query B2 in Listing 3; the resource pubmed:10979521-INST
in Line 4 is replaced with variable ?pmid1.</p>
          <p>M3. FILTER conditions. This modification strategy modifies the query by introducing
FILTER clauses in diferent flavors:
• condition on one of the variables of an embedded triple pattern,
• string comparisons with REGEX functions, and
• equality and inequality operators, such as &lt;, &gt;, =, between variables.</p>
          <p>For instance, query S14 (Listing 9) is derived from baseline query F3 (Listing 5) by adding a
iflter condition on variable ?o1 of the embedded triple pattern.
1 SELECT (COUNT(*) as ?Triples)
2 WHERE {
3 &lt;&lt; ?s1 bkr_sn:PART_OF ?o1 &gt;&gt;
4 provenir:derives_from ?source1 ;
5 provenir:derives_from ?source2 .
6 FILTER ( str(?o1a) &gt; str(?s1))
7 }</p>
          <p>Listing 9: Query S14: filter on the subject and object variables of the embbeded triple pattern.
M4. Triple pattern addition and removal. This modification strategy transforms a query
by removing or adding triple patterns. As a consequence, this modification strategy afects
query complexity as well as the number of retrieved results. An example of a query derived
through M4 is query P17 in Listing 10, which is derived from baseline query B2 (Listing 3) by
removing the triple pattern in Line 3.
1 SELECT (COUNT(*) as ?Triples)
2 WHERE {
3 « ?o1 bkr_sn:CAUSES ?o2 » provenir:derives_from ?pmid2 .
4 &lt;&lt; bkr_meta:C0543467-INST bkr_sn:TREATS ?o1 &gt;&gt; provenir:derives_from pubmed:10979521-INST .
5 }</p>
        </sec>
        <sec id="sec-4-2-2">
          <title>Listing 10: Query P17: query with an asserted triple pattern.</title>
          <p>M5. Advanced operators. This modification strategy adds Optional and Union graph patterns
to a query. M5 is useful to both test the parsing capabilities of the query engines and to test
their evaluation strategies beyond BGP evaluation.
4
5
6
7 }
1 SELECT (COUNT(*) as ?Triples)
2 WHERE {
3 &lt;&lt; bkr:META_C0543467-INST bkr_sn:TREATS ?o1 &gt;&gt;</p>
          <p>:10979521-INST
{ &lt;&lt; ?o1 bkr_sn:CAUSES ?o2 &gt;&gt; provenir:derives_from ?pmid2 }
UNION
{ &lt;&lt; ?o2 bkr_sn:AFFECTS ?o3 &gt;&gt; provenir:derives_from ?pmid3 }
provenir:derives_from pubmed</p>
        </sec>
        <sec id="sec-4-2-3">
          <title>Listing 11: Query C10: query with Union.</title>
          <p>An example of a query obtained through this modification strategy is query C10 (Listing
11), derived from the baseline query B3 (Listing 4). By applying M5, a Union operator is added
between the triple patterns in Lines 4 and 6.</p>
          <p>M6. Solution modifiers. This strategy adds or removes solution modifiers, such as DISTINCT,
COUNT, and projected variables in the SELECT clause. For example, we used this strategy to
add COUNT to the queries in Listings 6-11.</p>
        </sec>
      </sec>
      <sec id="sec-4-3">
        <title>4.3. StarBench Queries</title>
        <p>We applied the modification strategies to the baseline queries to obtain a new set of 56 queries.
We designed this set of queries to cover various SPARQL-star operators. We categorized the
StarBench queries into three categories: plain, selective, and complex, identified by P, S, and C,
respectively. We describe them in the remainder of this section.</p>
      </sec>
      <sec id="sec-4-4">
        <title>4.3.1. Category  Queries</title>
        <p>StarBench contains 23 plain (P) queries. They are characterized by having a WHERE clause
consisting of a basic graph pattern, where each triple pattern has at most one embedded
statement as the subject. These queries are usually obtained through modification strategies
M2, M4, and M6.
1 SELECT DISTINCT (COUNT(*) AS ?Triples)
2 WHERE {
3 &lt;&lt; ?s ?p bkr:META_C0339897-INST &gt;&gt; provenir:derives_from ?pm
4 }</p>
        <p>Listing 12: Query P8: the query replaces the predicate resource with a variable and counts the
results.</p>
        <p>For example, query P8, shown in Listing 12, is obtained by applying two modification strategies
to baseline query A1 (Listing 1). First, by applying M2 (Line 2), the variable in the object position
of the embedded triple pattern is replaced with the resource bkr:META_C0339897-INST, and
the object of the asserted triple pattern is replaced by variable ?pm. Next, by applying M6 (Line
1), the DISTINCT clause is added, and the aggregation function Count(*) replaces the projected
variables. Other examples of plain queries are P19 and P17 in Listings 8 and 10.</p>
      </sec>
      <sec id="sec-4-5">
        <title>4.3.2. Category  Queries</title>
        <p>StarBench contains 22  queries. Such queries are structurally similar to the  queries, with
the addition of the selection algebraic operator (i.e. the FILTER clause). The queries are usually
obtained by applying modification strategies M2, M5, and M6.
1 SELECT (COUNT(*) as ?Triples)
2 WHERE {
3 &lt;&lt; ?s1 bkr_sn:PART_OF ?o &gt;&gt;
4 provenir:derives_from ?source1 ;
5 provenir:derives_from ?source2.
6 FILTER(str(?source1) &gt; str(?source2)).
7 }</p>
        <p>Listing 13: Query S11: the query replaces a resource with a variable, and counts the number of
results.</p>
        <p>Queries S14 (Listing 9) and S11 (Listing 13) are examples of  queries. Query S11 is obtained
by applying modification strategies M2 and M6 to baseline query F3 (Listing 5). The former
leads to a replacement of the subject of the embedded statement with a variable ?s1 while the
latter replaces the projected variables with the Count(*) aggregate function.</p>
      </sec>
      <sec id="sec-4-6">
        <title>4.3.3. Category  Queries</title>
        <p>StarBench includes 11 complex queries, which may use Union, Optional and Group By operators,
or complex SPARQL-star triple patterns, i.e., triple patterns with an embedded triple pattern in
the object position, or triple patterns with multiple nested triple patterns.</p>
        <p>Examples of C queries are C1, C2, and C10 in Listings 6, 7, and 11, respectively. Listing 14
shows another example of a complex query: query C9 is obtained by applying modification
strategies M4 and M6 to baseline query B3 (Listing 4), which add the Optional operator (Line 5)
and the Count(*) aggregate function (Line 1).
1 SELECT (COUNT(*) AS ?Triple)
2 WHERE {
3 &lt;&lt; bkr_meta:C0543467-INST bkr_sn:TREATS ?o1 &gt;&gt; provenir:derives_from pubmed:10979521-INST .
4 &lt;&lt; ?o1 bkr_sn:CAUSES ?o2 &gt;&gt; provenir:derives_from ?pmid2 .
5 OPTIONAL { &lt;&lt; ?o2 bkr_sn:AFFECTS ?o3 &gt;&gt; provenir:derives_from ?pmid3 . }
6 }</p>
        <sec id="sec-4-6-1">
          <title>Listing 14: Query C9: query with Optional graph pattern</title>
        </sec>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. StarBench in Action</title>
      <p>In this section, we use StarBench to compare six diferent triplestores with support for RDF-star
and SPARQL-star. Our analysis focuses on the following three aspects: (i) support for RDF-star
and SPARQL-star in the triplestores, (ii) performance of the queries when evaluated over the
triplestores, and (iii) correctness of the obtained query results.</p>
      <p>
        Experimental Setup. We considered the following six triplestores and query engines using
StarBench: (1) Apache Jena/TDB2 [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ] 4.7.0 exposed via Fuseki, (2) Engine X3, (3) Oxigraph [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ]
0.3.16 via Docker, (4) GraphDB [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ] 10.0.2 as a standalone server, (5) AnzoGraph [
        <xref ref-type="bibr" rid="ref29">29</xref>
        ] 2.5.16 via
Docker, and (6) BlazeGraph [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ] 2.1.6 as a standalone Jetty server. However, as we explain in
Section 5.1, AnzoGraph and BlazeGraph had issues loading the datasets. Hence, we were able
to run all the tests only on the remaining four engines.
      </p>
      <p>We ran these engines on a machine with 16 vCPU cores (AMD 7281) with a clock speed of
2.7 GHz, 512KB L1 cache, 8MB L2 cache, 32MB L3 cache, 256GB RAM, 240GB SSD, and 8TB
HDD. We issued the queries from the command line on a diferent machine with the same
specifications as above and on the same network, using cURL to send the HTTP requests. We ran
the queries sequentially (and not concurrently) for each engine 3 times and report the averages
in this section. We used a timeout value of 30 minutes (1,800 seconds) in our experiments.</p>
      <p>The full set of queries provided in StarBench, an overview of the query characteristics and
the expected results, as well as the full experimental setup, including scripts to benchmark the
considered systems, can be found at: https://relweb.cs.aau.dk/starbench/.</p>
      <sec id="sec-5-1">
        <title>5.1. Support for RDF-star and SPARQL-star</title>
        <p>Unfortunately, neither AnzoGraph nor BlazeGraph was able to load the dataset into their native
datastores successfully, and we were thus not able to run StarBench on either of them due to
parsing errors. According to the AnzoGraph documentation4, there is a limit on the allowed
number of property values per edge (255 properties to be exact). As such, when loading the
3Engine X is a commercial engine, and the company behind it preferred to obfuscate the name in this article.
4https://docs.cambridgesemantics.com/anzograph/v2.5/userdoc/lpgs.htm#insert-properties
dataset, we obtained a “Element larger than allowed – too many properties”
error, which prevents the dataset from being loaded. BlazeGraph, on the other hand, threw
a parsing error when trying to load nested statements, meaning that the parser was not able
to parse RDF-star documents, and the support for RDF-star in BlazeGraph is severely limited.
Due to the errors explained above, we omit AnzoGraph and BlazeGraph from the remainder of
this section. However, in the future, we plan to investigate these issues further and adapt the
dataset so that AnzoGraph and BlazeGraph can successfully load the data in order to test their
SPARQL-star capabilities. The remaining query engines were all able to parse and load the data
without any issues.</p>
        <p>Another issue we came across was that, during query execution, Engine X raised parsing
exceptions when attempting to process query C1 (Listing 6). We observe that the peculiarity of
this query is the double nesting, i.e., the triple pattern ««« ?s ?p ?o » ?d ?e » ?t ?u»,
which includes a statement that is both embedded and asserted. This suggests that the query
parser in Engine X is not able to accommodate such cases with double nesting. The remaining
queries were all parsed successfully by Engine X, and all other query engines were able to
parse all the queries as well successfully.</p>
      </sec>
      <sec id="sec-5-2">
        <title>5.2. Correctness of the query answers</title>
        <p>In this section, we report our findings on result completeness and correctness and provide
hypotheses for these inconsistent or missing results. Figure 1 shows the execution times of
queries for which some systems report inconsistent results. Besides the parsing error of query
C1, Engine X does not return results for queries P16, P21, P22, C9, B2, and B3, as well as
incomplete results for query C10.</p>
        <p>As an example of a query with missing results, consider query P22 (Listing 15), derived from
the baseline query B3 (Listing 4). For this particular query, Jena and Oxigraph time out, while
Engine X returns no results, leaving GraphDB as the only system able to successfully answer
the query within the timeout (Figure 1), albeit still taking more than 10 minutes to do so (∼ 657
seconds). Furthermore, GraphDB answers all the queries in Figure 1 (except C1) more eficiently
than the other query engines. We suspect this is due to the query featuring two embedded triple
patterns that are joined on the common variable ?o1 (Listing 15); evidently, GraphDB is able to
handle such joins between embedded triple patterns more eficiently than the other systems.
Moreover, the most likely reason for the general slow performance of all query engines for
query P22 is the large number of resulting bindings (more than 500 million results).
1 SELECT (COUNT(*) AS ?Triples)
2 WHERE {
3 &lt;&lt; bkr_meta:C0543467-INST bkr_sn:TREATS ?o1 &gt;&gt;
4 provenir:derives_from pubmed:10979521-INST .
5 &lt;&lt; ?o1 bkr_sn:CAUSES ?o2 &gt;&gt; provenir:derives_from ?pmid2 .
6 ?t provenir:derives_from ?pmid3 .
7 }</p>
        <sec id="sec-5-2-1">
          <title>Listing 15: Query P22</title>
          <p>Regarding the missing results for Engine X, we hypothesize that Engine X is not able to
process the join between embedded triple patterns (as described above). In fact, to further
investigate this behavior, we executed two additional queries: (1) without the triple pattern at
Line 3, and (2) without the triple pattern at Line 5. Engine X was able to return the expected
results in these cases. This is similar to other queries (mentioned above) with the same join, i.e.,
P16, P21, and C9, as well as B2 and B3.</p>
          <p>Last, for query C10 (Listing 11), Engine X returned only 991, 875 results, while the expected
number of results is 991, 892, i.e., Engine X is missing 17 results. Query C10 features the same
join between embedded triple patterns as query P22 (Listing 15), but the second triple pattern is
included in a UNION statement. Therefore, we hypothesize that the missing 17 results are the
results of that particular join, which corresponds to the 17 results of query P16, whereas the
991, 875 results that Engine X returns are the results of the other part of the UNION statement
(which does not feature a join on the ?o1 variable).</p>
        </sec>
      </sec>
      <sec id="sec-5-3">
        <title>5.3. Queries timing out</title>
        <p>The execution of 26 queries (out of 56) raised timeouts for at least one of the query engines.
Table 1 shows an overview of these 26 queries and their performance for each query engine.
Crucially, we observe that all query engines fail to answer at least one query within the
30minute timeout threshold. From a quantitative perspective, Engine X and GraphDB perform
the best with only a single query timing out for each of the systems (query P4 for Engine X and
query C1 for GraphDB). Oxigraph follows with four timeouts, and Jena times out on 24 queries.</p>
        <p>While Jena experiences a large number of timeouts, most of them are in the S query group.
In fact, Jena is able to answer most P and C queries within the timeout threshold. S queries
include one or more FILTER clauses (e.g., query S14 in Listing 9), and Jena times out for 17 out
of the 22 queries in the S query group. These numbers show that Jena is unable to eficiently
process SPARQL-star queries with FILTER clauses.</p>
        <p>We further notice that GraphDB seems to generally have the best performance over the
queries that time out, with the fastest execution time for 17 of the 26 queries. Furthermore, as
mentioned in Section 5.2, GraphDB was able to answer query P22 in just over 10 minutes, a
query that no other system was able to successfully answer due to a large number of results
(more than 500 million). Second is Engine X, with the best performance for 8 of the 26 queries,
while Oxigraph has the best performance for query C1, which corresponds to the query that
times out for GraphDB and for which Engine X has a parsing error. Jena does not have better
performance for any of the queries in StarBench.</p>
        <p>The queries for which Oxigraph times out generally are queries with multiple embedded triple
patterns that are joined (e.g., query P19 in Listing 8), some of which are compared with FILTERs,
e.g., query S14 in Listing 9. If not properly optimized, evaluating such queries could lead to
a high number of intermediate results with a subsequent high number of filter evaluations
or joins. GraphDB and Engine X generally seem to implement optimization techniques that
accommodate such queries since they show increased performance for those queries.</p>
      </sec>
      <sec id="sec-5-4">
        <title>5.4. Query Performance</title>
        <p>As discussed in Section 5.3, GraphDB and Engine X generally show better performance than
Jena and Oxigraph, where Jena seems to have the worst performance of all the query engines
on StarBench. This is also the case for most of the queries that do not time out for any engine.
Figure 2 shows the execution time of queries P1-P12 over each engine. With a few exceptions,
GraphDB and Engine X have significantly better performance than both Oxigraph and Jena.
For some queries, like query P10, GraphDB and Engine X outperform Oxigraph up to three
orders of magnitude and Jena up to 5 orders of magnitude. These queries generally are the
queries in the P query group with a low number of results (less than 51000).</p>
        <p>We also observe that the engines can behave quite diferently on diferent queries. For
instance, while GraphDB and Engine X generally are more performant than Oxigraph, Oxigraph
outperforms the other engines in query P2. This particular query contains an embedded triple
pattern with all variables, i.e., « ?s ?p ?o », while query P10 contains some bindings
within the embedded triple pattern. Nevertheless, Oxigraph has very similar performance for
the two queries (30 seconds for P2 and 22 seconds for P10), while GraphDB has much better
performance for the query with bindings in the embedded triple pattern (94 seconds for P2
and just 17 milliseconds for P10). This shows that Engine X and GraphDB are able to take
advantage of given bindings in the embedded triple patterns, while Oxigraph and Jena are not
able to do so. The above observations also hold for queries P13-P23; however, due to space
restrictions, we omit details in this paper. They can be found on our website though.</p>
        <p>As discussed in Section 5.3, Jena is unable to eficiently process queries with FILTER
operations. This is in line with the results shown in Figure 3 showing the execution times of queries
S1-S11, where Jena has the worst performance for all queries, even the two it does not time out
for (S1 and S2). Oxigraph also times out for query S11; however, this is expected given the large
number of results (310 million) and the fact that both GraphDB and Engine X struggle with this
query as well (1,366 seconds for GraphDB and 635 seconds for Engine X). Furthermore, in line
with the results for the P query group, GraphDB and Engine X show very similar performance
for most of the queries in the S query group, as well as significantly better performance than
Oxigraph and Jena.</p>
        <p>Figure 4 shows the execution time of queries C1-C11. Similar to the previously recorded
results, GraphDB and Engine X generally have better performance for most of the queries than
Oxigraph and Jena. However, we also note that Engine X was unable to fully execute three of
the queries in the C query group, as discussed in Section 5.2. Furthermore, we note that in the
particular case of query C1, GraphDB actually times out as the only query engine. As discussed
in Section 5.1, this particular query contains a double-nested triple pattern.</p>
        <p>In summary, the experiments suggest that, generally, GraphDB and Engine X are able to
process SPARQL-star queries more eficiently than Oxigraph and Jena. In most cases, this
diference is quite significant; for instance, query P10 leads to up to three orders of magnitude
faster query execution times for Engine X and GraphDB than Oxigraph, and up to five orders of
magnitude faster query execution times than Jena. Nevertheless, we also reiterate the fact that
Engine X is unable to process most queries with joins between embedded triple patterns, and
throws a parsing error for queries with double-nested triple patterns. Our experimental analysis
further shows that Jena generally has problems processing FILTER clauses eficiently. Finally,
our analysis shows that GraphDB is able to successfully process all queries in StarBench except
query C1 because of the double-nested triple pattern. Overall, our experimental analysis shows
that StarBench is efective in comparing and contrasting diferent RDF-star and SPARQL-star
query engines and that it can efectively highlight issues in the engines, such as missing support
for certain SPARQL-star features.</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>6. Conclusion and Future Work</title>
      <p>In this paper, we presented StarBench, a SPARQL-star benchmark for assessing the capabilities
and support of triplestores for RDF-star. StarBench is built on top of the RDF-star representation
of the BKR dataset and the REF benchmark. We applied modification strategies to generate 56
variations from the initial baseline queries.</p>
      <p>We applied StarBench to four triplestores: Jena, Engine X, Oxigraph, GraphDB. Our analysis
highlighted limitations in loading the data, query parsing, correct evaluation of SPARQL-star
queries, as well as contrasting query execution performance across all the engines. These results
suggest that StarBench is efective in comparing and contrasting existing engines.</p>
      <p>In future work, we plan to continue extending StarBench. A direction we envision is to
extend the tested constructs to include SPARQL and SPARQL-star features, such as entailment
regimes and subqueries, as well as incorporating other RDF-star datasets by generating RDF-star
representations of publicly available RDF datasets. Another direction is the consolidation of the
modification strategies in query templates. Such templates can later be used to automatically
generate diferent query loads that fit the needs of the StarBench users. Similarly, we aim to use
diferent datasets, especially the ones with RDF-star statements having more complex structures
than the ones of REF.</p>
    </sec>
    <sec id="sec-7">
      <title>Acknowledgments</title>
      <p>This research is partially funded by the Independent Research Fund Denmark (DFF) under grant
agreement no. DFF-8048-00051B and the Poul Due Jensen Foundation. We thank the Ontotext
team for the fruitful exchange while preparing the camera-ready version of the article.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>R.</given-names>
            <surname>Cyganiak</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Wood</surname>
          </string-name>
          ,
          <string-name>
            <surname>M.</surname>
          </string-name>
          <article-title>Lanthaler, RDF 1.1 Concepts and Abstract Syntax</article-title>
          ,
          <source>W3C Recommendation, W3C</source>
          ,
          <year>2014</year>
          . URL: https://www.w3.org/TR/rdf11-concepts/.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>O.</given-names>
            <surname>Hartig</surname>
          </string-name>
          ,
          <article-title>Foundations of RDF* and SPARQL* (An Alternative Approach to Statement-Level Metadata in RDF)</article-title>
          ,
          <source>in: AMW</source>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>E. R.</given-names>
            <surname>Hansen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Lissandrini</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Ghose</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Løkke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Thomsen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Hose</surname>
          </string-name>
          ,
          <article-title>Transparent Integration and Sharing of Life Cycle Sustainability Data with Provenance</article-title>
          ,
          <source>in: ISWC</source>
          ,
          <year>2020</year>
          , pp.
          <fpage>378</fpage>
          -
          <lpage>394</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>K.</given-names>
            <surname>Hose</surname>
          </string-name>
          ,
          <article-title>Knowledge Graph (R)Evolution and the Web of Data</article-title>
          , in: MEPDaW@ISWC,
          <year>2021</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>7</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>O.</given-names>
            <surname>Pelgrin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Taelman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Galárraga</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Hose</surname>
          </string-name>
          ,
          <article-title>Scaling Large RDF Archives To Very Long Histories</article-title>
          , in: ICSC,
          <year>2023</year>
          , pp.
          <fpage>41</fpage>
          -
          <lpage>48</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>O.</given-names>
            <surname>Pelgrin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Galárraga</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Hose</surname>
          </string-name>
          ,
          <article-title>Towards fully-fledged archiving for RDF datasets</article-title>
          ,
          <source>Semantic Web Journal</source>
          <volume>12</volume>
          (
          <year>2021</year>
          )
          <fpage>903</fpage>
          -
          <lpage>925</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>J.</given-names>
            <surname>Pérez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Arenas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Gutierrez</surname>
          </string-name>
          ,
          <article-title>Semantics and complexity of SPARQL</article-title>
          ,
          <source>ACM Trans. Database Syst</source>
          .
          <volume>34</volume>
          (
          <year>2009</year>
          )
          <volume>16</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>16</lpage>
          :
          <fpage>45</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Guo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Pan</surname>
          </string-name>
          ,
          <string-name>
            <surname>J. Heflin,</surname>
          </string-name>
          <article-title>LUBM: A benchmark for OWL knowledge base systems</article-title>
          ,
          <source>J. Web Sem</source>
          .
          <volume>3</volume>
          (
          <year>2005</year>
          )
          <fpage>158</fpage>
          -
          <lpage>182</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>M.</given-names>
            <surname>Schmidt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Hornung</surname>
          </string-name>
          , G. Lausen,
          <string-name>
            <surname>C.</surname>
          </string-name>
          <article-title>Pinkel, SP2Bench: A SPARQL performance benchmark</article-title>
          ,
          <source>in: ICDE</source>
          ,
          <year>2009</year>
          , pp.
          <fpage>222</fpage>
          -
          <lpage>233</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>G.</given-names>
            <surname>Aluç</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Hartig</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. T.</given-names>
            <surname>Özsu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Daudjee</surname>
          </string-name>
          ,
          <article-title>Diversified stress testing of RDF data management systems</article-title>
          ,
          <source>in: ISWC</source>
          ,
          <year>2014</year>
          , pp.
          <fpage>197</fpage>
          -
          <lpage>212</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>F.</given-names>
            <surname>Orlandi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Graux</surname>
          </string-name>
          ,
          <string-name>
            <surname>D.</surname>
          </string-name>
          <article-title>O'Sullivan, Benchmarking RDF Metadata Representations: Reification, Singleton Property and RDF</article-title>
          , in: ICSC,
          <year>2021</year>
          , pp.
          <fpage>233</fpage>
          -
          <lpage>240</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>G.</given-names>
            <surname>Abuoda</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Dell'Aglio</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Keen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Hose</surname>
          </string-name>
          ,
          <article-title>Transforming RDF-star to Property Graphs: A Preliminary Analysis of Transformation Approaches</article-title>
          , in: QuWeDa,
          <year>2022</year>
          , pp.
          <fpage>17</fpage>
          -
          <lpage>32</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>M.</given-names>
            <surname>Saleem</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hasnain</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. N.</given-names>
            <surname>Ngomo</surname>
          </string-name>
          ,
          <article-title>LargeRDFBench: A billion triples benchmark for SPARQL endpoint federation</article-title>
          ,
          <source>J. Web Semant</source>
          .
          <volume>48</volume>
          (
          <year>2018</year>
          )
          <fpage>85</fpage>
          -
          <lpage>125</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>M.</given-names>
            <surname>Schmidt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Görlitz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Haase</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Ladwig</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Schwarte</surname>
          </string-name>
          , T. Tran,
          <article-title>FedBench: A Benchmark Suite for Federated Semantic Data Query Processing</article-title>
          , in: ISWC,
          <year>2011</year>
          , pp.
          <fpage>585</fpage>
          -
          <lpage>600</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>C.</given-names>
            <surname>Stadler</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Saleem</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Q.</given-names>
            <surname>Mehmood</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Buil-Aranda</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Dumontier</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hogan</surname>
          </string-name>
          , A.-C.
          <article-title>Ngonga Ngomo, LSQ 2.0: A linked dataset of SPARQL query logs</article-title>
          , Semantic
          <string-name>
            <surname>Web</surname>
          </string-name>
          (
          <year>2022</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>C.</given-names>
            <surname>Bizer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Schultz</surname>
          </string-name>
          , The berlin SPARQL benchmark,
          <source>Int. J. Semantic Web Inf. Syst</source>
          .
          <volume>5</volume>
          (
          <issue>2009</issue>
          )
          <fpage>1</fpage>
          -
          <lpage>24</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>S.</given-names>
            <surname>Duan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Kementsietsidis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Srinivas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Udrea</surname>
          </string-name>
          ,
          <article-title>Apples and oranges: a comparison of RDF benchmarks and real RDF datasets</article-title>
          , in: SIGMOD,
          <year>2011</year>
          , pp.
          <fpage>145</fpage>
          -
          <lpage>156</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>M.</given-names>
            <surname>Saleem</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Szárnyas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Conrads</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S. A. C.</given-names>
            <surname>Bukhari</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Q.</given-names>
            <surname>Mehmood</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. N.</given-names>
            <surname>Ngomo</surname>
          </string-name>
          ,
          <article-title>How Representative Is a SPARQL Benchmark? An Analysis of RDF Triplestore Benchmarks</article-title>
          , in: WWW,
          <year>2019</year>
          , pp.
          <fpage>1623</fpage>
          -
          <lpage>1633</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>R.</given-names>
            <surname>Angles</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. A.</given-names>
            <surname>Boncz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. L.</given-names>
            <surname>Larriba-Pey</surname>
          </string-name>
          , I. Fundulaki,
          <string-name>
            <given-names>T.</given-names>
            <surname>Neumann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Erling</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Neubauer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Martínez-Bazan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Kotsev</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Toma</surname>
          </string-name>
          ,
          <article-title>The linked data benchmark council: a graph and RDF industry benchmarking efort</article-title>
          ,
          <source>SIGMOD Rec</source>
          .
          <volume>43</volume>
          (
          <year>2014</year>
          )
          <fpage>27</fpage>
          -
          <lpage>31</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>P. A.</given-names>
            <surname>Boncz</surname>
          </string-name>
          ,
          <article-title>LDBC: benchmarks for graph and RDF data management</article-title>
          , in: B.
          <string-name>
            <surname>C. Desai</surname>
            ,
            <given-names>J. L.</given-names>
          </string-name>
          <string-name>
            <surname>Larriba-Pey</surname>
          </string-name>
          , J. Bernardino (Eds.), IDEAS,
          <year>2013</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>2</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>S. S.</given-names>
            <surname>Sahoo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Bodenreider</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Hitzler</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Sheth</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Thirunarayan</surname>
          </string-name>
          ,
          <article-title>Provenance Context Entity (PaCE): Scalable provenance tracking for scientific RDF data</article-title>
          ,
          <source>in: SSDBM</source>
          ,
          <year>2010</year>
          , pp.
          <fpage>461</fpage>
          -
          <lpage>470</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>V.</given-names>
            <surname>Nguyen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Bodenreider</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Sheth</surname>
          </string-name>
          ,
          <article-title>Don't like RDF reification? Making statements about statements using singleton property</article-title>
          ,
          <source>in: WWW</source>
          ,
          <year>2014</year>
          , pp.
          <fpage>759</fpage>
          -
          <lpage>770</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>J.</given-names>
            <surname>Frey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Müller</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Hellmann</surname>
          </string-name>
          , E. Rahm,
          <string-name>
            <given-names>M.</given-names>
            <surname>Vidal</surname>
          </string-name>
          ,
          <article-title>Evaluation of metadata representations in RDF stores</article-title>
          ,
          <source>Semantic Web</source>
          <volume>10</volume>
          (
          <year>2019</year>
          )
          <fpage>205</fpage>
          -
          <lpage>229</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>F.</given-names>
            <surname>Orlandi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Graux</surname>
          </string-name>
          ,
          <string-name>
            <surname>D.</surname>
          </string-name>
          <article-title>O'Sullivan, How many stars do you see in this constellation?</article-title>
          ,
          <source>in: ESWC 2020 Satellite Events</source>
          ,
          <year>2020</year>
          , pp.
          <fpage>175</fpage>
          -
          <lpage>180</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>S.</given-names>
            <surname>Harris</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Seaborne</surname>
          </string-name>
          , SPARQL
          <volume>1</volume>
          .
          <article-title>1 Query Language</article-title>
          ,
          <source>W3C Recommendation, W3C</source>
          ,
          <year>2013</year>
          . URL: https://www.w3.org/TR/sparql11-query/.
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>Apache</given-names>
            <surname>Software</surname>
          </string-name>
          <string-name>
            <surname>Foundation</surname>
          </string-name>
          , Apache Jena,
          <year>2023</year>
          . URL: https://jena.apache.org/,
          <source>Accessed July 24</source>
          <year>2023</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>T.</given-names>
            <surname>Pellissier</surname>
          </string-name>
          <string-name>
            <surname>Tanon</surname>
          </string-name>
          , Oxigraph,
          <year>2023</year>
          . URL: https://doi.org/10.5281/zenodo.7669346. doi:
          <volume>10</volume>
          . 5281/zenodo.7669346.
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <surname>Ontotext</surname>
          </string-name>
          , Graphdb,
          <year>2023</year>
          . URL: https://graphdb.ontotext.com/,
          <source>Accessed July 24</source>
          <year>2023</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29] Cambridge Semantics, AnzoGraph,
          <year>2023</year>
          . URL: https://cambridgesemantics.com/ anzograph/,
          <source>Accessed July 24</source>
          <year>2023</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [30]
          <string-name>
            <given-names>B.</given-names>
            <surname>Thompson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Personick</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Cutcher</surname>
          </string-name>
          ,
          <article-title>The bigdata® rdf graph database, in: Linked Data Management, Chapman</article-title>
          and Hall/CRC,
          <year>2016</year>
          , pp.
          <fpage>221</fpage>
          -
          <lpage>266</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>