<!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>A Taxonomy of Basic Graph Pattern Motifs for Understanding SPARQL Query Logs</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Jaime Salas</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Aidan Hogan</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Universidad de Chile</string-name>
        </contrib>
      </contrib-group>
      <abstract>
        <p>Popular SPARQL query endpoints hosted by open knowledge graphs such as Wikidata and DBpedia process hundreds of thousands or even millions of queries per day. Making sense of queries at this scale is challenging. We propose a taxonomy of basic graph patterns (BGPs) in order to induce a hierarchical structure from such patterns found in a large query log. The leaves of this taxonomy are the raw basic graph patterns extracted from each query of the log. Each layer thereafter applies a generalisation step followed by a canonicalisation step, with each layer representing an increasingly coarse partition based on an increasingly more general motif. Generalisations are applied for constant subjects/objects (nodes), constant predicates (edge labels), direction, constant/variable distinction, and homomorphic equivalence. We discuss use-cases, define these generalisation steps, and apply them to induce a taxonomy of BGPs from a subset of the Wikidata query log.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;SPARQL</kwd>
        <kwd>canonicalisation</kwd>
        <kwd>query logs</kwd>
        <kwd>graph queries</kwd>
        <kwd>Wikidata</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        There are now hundreds of public SPARQL endpoints available on the Web [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], with some of
the largest, such as those hosted by DBpedia [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] and Wikidata [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], evaluating in the order of
hundreds of thousands or millions of queries per day. Although supporting such a volume of
queries poses significant engineering and scientific challenges [
        <xref ref-type="bibr" rid="ref1 ref3">1, 3</xref>
        ], samples of these logs have
been published [
        <xref ref-type="bibr" rid="ref2 ref3">3, 2</xref>
        ], and provide significant research opportunities [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Specifically, these
query logs contain key insights into the distribution of queries of interest to diferent clients
in practice in terms of the complexity of the query patterns [
        <xref ref-type="bibr" rid="ref5 ref6">5, 6</xref>
        ], which operators are more
(or less) frequently used [
        <xref ref-type="bibr" rid="ref2 ref6">6, 2</xref>
        ], which operators tend to be used together [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], whether queries
originate from humans or bots [
        <xref ref-type="bibr" rid="ref7 ref8">7, 8</xref>
        ], how clients refine or modify queries from one request to
the next [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], etc.
      </p>
      <p>
        Thus, given a large SPARQL query log such as that published for Wikidata [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], or as part of
the Linked SPARQL Queries dataset [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], there is a wide range of analyses that a researcher or
database administrator can run in order to gain insights into trends in those queries. What we
argue is missing is a way to organise and “browse” the queries of such logs hierarchically. We
envisage the ability to make sense of large SPARQL query logs via a taxonomy that begins with
very general (equivalence) classes of queries that become increasingly more specific in lower
layers, providing first a high-level view of categories that open up into more and more specific
categories of queries.
      </p>
      <p>
        The design of such a taxonomy is challenging, and indeed there are potentially many ways
in which such a taxonomy can be defined. But we think the idea is worth exploring in order
to help bring order to large SPARQL query logs. In this work, we take some initial steps
in this direction by focusing on the case of basic graph patterns [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], proposing a taxonomy
to induce a hierarchical structure from them. This structure is based on generalisation and
canonicalisation [11] steps applied iteratively at each layer of the hierarchy, inducing a set of
motifs at each layer that constitute a partition of the queries considered. We currently foresee
ifve use-cases:
Human vs. bot detection [
        <xref ref-type="bibr" rid="ref7 ref8">7, 8</xref>
        ]: The taxonomy can help identify motifs for highly-regular
queries, such as parameterised queries used by bots.
      </p>
      <p>Caching [12, 13]: The taxonomy can identify frequent motifs that, if cached, could increase
cache hit rates and improve query evaluation performance.</p>
      <p>Optimisation [14]: The taxonomy could be used to decide on specialised indexes and
optimisations to reduce the costs for frequent motifs.</p>
      <p>
        Benchmarking [15, 16]: The taxonomy can be used to classify diferent types of graph
patterns for benchmarking, enabling the comparison of diferent engines for diferent motifs.
Log exploration [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]: The taxonomy can help, for example, to identify unusual trafic through
highly-specific motifs with large numbers of instances.
      </p>
      <p>Paper outline In Section 2, we discuss related works that classify or generalise queries from
SPARQL logs. Section 3 presents the taxonomy we propose, while Section 4 presents the results
of applying our taxonomy to a sample of the Wikidata query logs. Section 5 concludes.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Related Work</title>
      <p>The use of SPARQL query logs for understanding user demands has become a rich topic of
interest, leading to a wide body of research. For space reasons, we focus on those works that
specifically look at generalising and/or classifying real-world queries in such logs.</p>
      <p>
        The first category of related works extract high-level query patterns for the purpose of
analysing logs. Bonifati et al. [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] present a detailed analysis of the Wikidata and LSQ query
logs, where they present frequency distributions relating to query size, operator usage, etc., but
also look at the graph structure of basic graph patterns, defining a list of diferent graph shapes
that correspond to a specific subset of the high-level motifs explored here.
      </p>
      <p>The second category of works process log queries for the purposes of benchmarking. Saleem
et al. [15] propose a framework, called FEASIBLE, that extracts diferent features from queries,
such as join vertex degree and shape, number of triple pattern and their selectivity, etc.; these
features are used to select a small number of representative queries for a benchmark. Angles et
al. [16] propose high-level categories of subqueries (BGPs, property paths, etc.) for the Wikidata
query log that are then used to compare the performance of diferent engines.</p>
      <p>In terms of novelty, rather than pre-defining shapes/motifs, we instead pre-define a set of
generalisation steps that can produce arbitrary motifs. We are also not aware of works that
propose a hierarchical way to structure such motifs.</p>
    </sec>
    <sec id="sec-3">
      <title>3. A Taxonomy of Basic Graph Pattern Motifs</title>
      <p>In this section, we present our proposed taxonomy of BGPs based on increasingly high-level
motifs induced by a sequence of generalisation steps. We first present definitions, then an
example, and finally summarise how we implemented software to compute the taxonomy.
Preliminaries. Let I, L and V denote the set of all IRI, literal and variable terms, respectively.
A triple pattern  = (, , ) ∈ (I ∪ L ∪ V) × (I ∪ V) × (I ∪ L ∪ V) is an RDF triple allowing
variables in any position. We use C = I ∪ L to denote constants where the distinction between
IRIs and literals does not matter. A set of triple patterns is called a basic graph pattern (BGP).1
Letting  denote a BGP, we denote by vars() the set of variables appearing in , by cons()
the set of constants appearing in , by nodes() the set of subject/object terms (i.e., nodes) in
, and by labs() the set of predicate terms (i.e., edge labels) in .</p>
      <p>Given a BGP , we will define a sequence of generalisation steps that form increasingly
high-level equivalence classes of BGPs induced by patterns that we call motifs. Specifically, a
generalisation step  is a transformation of a BGP that yields an equivalence relation ∼  on BGPs
such that, given two BGPs  and , we say that  ∼   if and only if () = (). We then
call () (or equivalently ()) an -motif. To define specific generalisation steps, we introduce
a partial term mapping  : C∪V → C∪V whose domain is denoted by dom( ). Given a BGP ,
we denote by  () the image of  under  , i.e.,  () = {( ′(),  ′(),  ′()) | (, , ) ∈ }
where  ′() =  () for all  ∈ dom( ), and  ′() =  for all  ∈/ dom( ); i.e.,  rewrites
some of the terms in , leaving terms for which it is not defined as they are. Letting s, p and o
denote the subject, predicate and object positions, we may also use selective images to rewrite
terms only in selected positions; for example,  s,o() = {( ′(), ,  ′()) | (, , ) ∈ } only
rewrites subject and object terms with  .</p>
      <p>Proposed Taxonomy. There are innumerable distinct generalisation steps that one could
consider, and indeed the “best” choice may depend on external factors such as the particular
use-cases, logs, etc., involved. The order in which the generalisation steps are applied can also
afect the resulting taxonomy. In the following, we propose a concrete set of generalisation
steps inspired by the idea of incrementally generalising the graph structure of BGPs. As a
zeroth step, we abstract away variable names from the input BGPs (modulo isomorphism).
In subsequent steps we abstract away the values of particular constants in order to yield an
increasingly abstract graph structure. We then abstract away edge labels and direction in order
to yield a directed and then undirected graph, respectively. Thereafter we abstract away the
1We assume that blank nodes appearing in a BGP are mapped to fresh variables [11].
distinction between constants and variables, and finally we compute the core of the graph. As
aforementioned, this is one way in which generalisation steps can be applied. Exploring other
possible steps, and the motifs and taxonomies they yield, is an interesting topic for future work.
Definition 3.1.</p>
      <p>We define the following generalisation steps, where  and  are BGPs:
0. The zeroth step generalises variable names, capturing isomorphism modulo variables. We
say that  ∼ 0  if and only if there exists a one-to-one term mapping  : vars() →
vars() such that  () = .
1. The first step further generalises constant nodes in a BGP, capturing isomorphism modulo
variables and constant nodes. We say that  ∼ 1  if and only if there exists a one-to-one
term mapping  : nodes() ∩ cons() → nodes() ∩ cons() such that  s,o() ∼ 0 .
2. The second step further generalises constant edge labels (predicates) in a BGP, capturing
isomorphism modulo variables and constants. We say that  ∼ 2  if and only if there
exists a one-to-one term mapping  : labs() ∩ cons() → labs() ∩ cons() such
that  p() ∼ 1 .
3. The third step generalises edge labels, capturing isomorphism of the directed graph of
the BGP while still distinguishing constants and variables. Let c ∈ C and v ∈ V denote
a reserved constant and variable, respectively. Let  : C ∪ V → {c, v} denote a term
mapping such that  () = c for all  ∈ C and  () = v for all  ∈ V. We say that
 ∼ 3  if and only if  p() ∼ 2  p().
4. The fourth step generalises edge direction, capturing isomorphism of the undirected
graph of the BGP while still distinguishing constants and variables. Let ± = {(, , ) |
(, , ) ∈  or (, , ) ∈ } denote the completion of . We say that  ∼ 4  if and
only if ± ∼ 3 ± .
5. The fifth step generalises constant and variable distinction, capturing isomorphism of the
undirected graph of the BGP without distinguishing constants and variables. Here we
choose to map constants to variables. We say that  ∼ 5  if and only if there exists a
one-to-one term mapping  : cons() ∪ cons() → V ∖ (vars() ∪ vars()) such that
 () ∼ 4  ().
6. The sixth step generalises non-core edges and nodes, capturing homomorphic equivalence
of the undirected graph of the BGPs. We say that there is a homomorphism from 
to , denoted  → , if and only if there exists a term mapping  : vars() →
vars() ∪ cons() such that  () ⊆ . We then say that  and  are homomorphically
equivalent modulo variables, denoted  ≃0 , if and only if  →  and  → . Let us
overload the previous definitions, where we denote by ≃0,...,5 the steps ∼ 0,...,5 replacing
the zeroth step ∼ 0 with ≃0. We say that  ∼ 6  if and only if  ≃5 .</p>
      <p>Each generalisation step  induces a partition of a set of BGPs ℬ via the quotient set ℬ/∼ .
Example. Take the following SPARQL query, which intuitively asks for information about
papers published in AMW that cite other AMW papers:</p>
      <p>SELECT ?x ?p ?o WHERE { ?x :venue :AMW . ?y :venue :AMW . ?x :cites ?y . ?x ?p ?o . }
:venue
:cites
:AMW
:cites
:venue
(a) Zeroth step
(b) First step
(c) Second step
(d) Third step
(e) Fourth step
(f) Fifth step
(g) Sixth step
Implementation. We implemented the extraction of the aforementioned taxonomy using
the QCan package [11], which ofers methods for canonicalising SPARQL queries. Specifically,
QCan represents SPARQL BGPs as RDF graphs in a reified form using r-graphs. The package
can then invoke the blabel package [17], which canonically labels existential values, and can
also perform RDF leaning, which is used to calculate the core of the graph required for step 6.</p>
    </sec>
    <sec id="sec-4">
      <title>4. An Analysis of Wikidata’s BGPs</title>
      <p>
        In this section, we extract the taxonomy from the BGPs of a large sample of queries from the
Wikidata SPARQL logs [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. We work with two samples: a subset of the robotic queries, and a
subset of the organic/human queries. The samples are taken from queries received between
2018-02-26 and 2018-03-25, i.e., the most recent interval available in the Wikidata SPARQL logs.
2An unintended consequence of layering generalisation steps is that, by renaming predicates separately from nodes,
the second step may rename a constant in a predicate position diferently from how the first step renamed the same
constant in a node position; correspondences for constants in predicate and node positions are lost. A solution
would be to merge the first and second steps, losing some granularity, or defining the second step directly over the
zeroth step without using a selective image.
Though performance is not a focus of the current work, we note that computing the taxonomy
for close to four million BGPs took a little over three hours.
      </p>
      <p>Robotic queries We first present the results for robotic queries. We took a random sample
of 1,000,000 queries from the set of robotic queries in the interval. We then extracted all the
BGPs contained in these queries, giving us a total of 1,781,337 BGPs. Table 1a presents some
high-level statistics, showing the number of motifs generated at each step, along with the
motif (equivalence class) with the largest number of BGPs. The results clearly show that each
successive level of the taxonomy finds less unique motifs, while finding larger equivalence
classes for these queries. This is of interest for exploring the logs: a user starting at step 6 (the
highest level) can expand to a reasonable number (55) of child motifs at step 5, ordered by size;
expanding these motifs from step 5, they can expect, on average, 2–3 child motifs, and so forth.</p>
      <p>In Table 2, we present the top 5 motifs at each step for these robotic queries, starting from
step 1. As before, dashed lines indicate variables while solid lines indicate constants. At step
1, the motifs represent parameterised queries, where nodes (subjects/objects), specifically, are
generalised. The Wikidata properties P300 and P214 seen in this step indicate an ISO 3166-2
code for countries, and a VIAF ID used by libraries, respectively. The results show that the most
common BGPs are composed of single triple patterns. The top motif is unusual in that it has
no variable: it stems from a syntactic shortcut used in Wikidata for selecting the languages of
labels returned by a custom service. We also see that the third, fourth and fifth motifs contain
two variables; such BGPs may form part of a larger query, and be contained, for example, in an
OPTIONAL clause. Steps 2 and 3 are quite similar to each other. We see that the most common
motif in both steps refers to a singleton BGP with a constant predicate and variable nodes, but
in the second and fifth positions, we see popular join shapes. Step 4 generalises edge direction,
where we see a similar set of results to the previous two steps; the motif with a single edge
having a constant and variable node is more prominent here as it merges two cases from step 3:
one where the subject is the variable, and the other where the object is the variable. Removing
the constant/variable distinction in step 5, we see many of the simpler motifs merged into the
ifrst two motifs, but thereafter, we see diferent types of joins, including disconnected patterns
Step
1
2
3
4
5
6
1
c
in the fourth and fifth positions; these disconnected patterns are due to geographic queries
that apply a join between two variables based on geographic distance, rather than a natural
equi-join. At step 6, which looks at the cores of the step 5 graphs, we find three motifs: 1,780,647
BGPs collapse to a core with a single edge between two nodes (this includes acyclic queries and
queries with even-length cycles, for example), 649 BGPs collapse to a self-loop on one node
(this includes all and only queries with a self-loop, i.e., a triple pattern with the same subject
and object), while 41 BGPs collapse to a triangle (as per the example shown in Figure 1).
Organic queries Next we extract our taxonomy from the set of all 872,555 organic queries
in the chosen interval, which contain 2,198,557 BGPs. Table 1b presents the overall statistics
regarding the number of motifs and the largest equivalence class size at each step. Of interest is
5
wdt:P214
83,229
(4.67%)
c2</p>
      <p>c1
71,524
(4.02%)
71,664
(4.02%)
76,558
(4.30%)
26,998
(1.52%)
wdt:P300
88,199
(4.95%)</p>
      <p>c
268,915
(15.10%)
270,846
(15.20%)
296,520
(16.65%)
53,511
(3.00%)
—
—
that the number of motifs is generally much higher than in the robotic case, indicating more
diverse query shapes. This is to not surprising as one would expect robotic trafic to account
for more regular (e.g., parameterised) queries when compared with queries created by users.</p>
      <p>
        As before, Table 3 presents the top 5 motifs at each step – starting from step 1 – in the organic
case. The Wikidata properties P31, P625 and P238 seen in step 1 refer to instance of, coordinate
location and IATA airport code, respectively. We see the same top motif as in the case of robotic
queries relating to Wikidata’s label service. However, we also see a number of more complex
motifs, including the fourth and fifth motif, which we suspect may be misclassified bot trafic
(the logs classify organic and robotic trafic using a number of heuristics, such as user-agent,
the volume of similar queries originating from a single source, etc. [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]). The fourth motif is
disconnected; rather than being an equi-join, the motif represents a join based on geographic
distance, where the join condition does not appear in the BGP. The fifth motif notably includes
an edge with a variable, seemingly trying to retrieve all facts about airports. Looking at steps 2, 3
and 4, we see that although organic motifs share a lot in common with their robotic counterparts,
they tend to be more complex, with the fifth motif in these steps having a join on three edges.
At step 5, we again see the return of disconnected patterns resulting from the aforementioned
geographic queries, with a large part of the fourth motif (209,322 of 211,016 instances) being
accounted for by the fourth motif at step 1. At step 6, we again found an edge motif, a self-loop
motif, and a triangle motif, but unlike in the robotic case, we also found a pentagon motif with
a small number of instances (25 BGPs).
      </p>
    </sec>
    <sec id="sec-5">
      <title>5. Conclusions</title>
      <p>We believe that better tools are needed in order to summarise, structure, explore and
understand the contents of large SPARQL logs. In this work, we have proposed a taxonomy for
understanding the structure (specifically) of BGPs found in such a log. We proposed a sequence
of generalisation steps that, when applied to BGPs, yield increasingly high-level motifs by
incrementally abstracting away details from the BGP, generating a hierarchical taxonomy over
those BGPs. Extracting the taxonomy for a sample of Wikidata queries, we gain some
interesting insights into the most common motifs occurring in BGPs relating to frequently accessed
predicates, frequent join types, the rarity of acyclic queries, the presence of disconnected graph
patterns, and some potentially misclassified organic queries.</p>
      <p>
        For future work, we would like to develop a user interface that allows for exploring the
taxonomy of a given SPARQL query log: starting from step 6 (the highest level), the user is
presented the motifs and the number of associated BGPs in descending order; upon clicking a
motif, the sub-motifs at the lower level are presented in the same order. This would allow the
user to start from a high-level view of the BGPs of the log, and “drill-down” on specific motifs
for more details. We are also interested in exploring diferent sequences of generalisation steps
that might yield more interesting insights. Another direction would be to study how diferent
generalisation steps preserve diferent graph metrics; a key metric along these lines would be
(hyper-)treewidth, which captures how “tree-like” a query is and predicts the complexity of
evaluating the query [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].3 Finally, it would be of interest to explore query features beyond
3We note that step 6, which computes the core of the undirected graph, does not preserve treewidth; for example, it
simple BGPs; this seems non-trivial as it introduces many alternatives for generalisation steps,
but could help to glean insights into how operators like paths, union, optionals, etc., are used.
      </p>
    </sec>
    <sec id="sec-6">
      <title>Acknowledgments</title>
      <p>This work was supported by Fondecyt No. 1221926 and by ANID – Millennium Science Initiative
Program – Code ICN17_002.
can collapse cycles of even length to a single edge, cycles of odd length or even cliques to a self-loop, etc.
[11] J. Salas, A. Hogan, Semantics and canonicalisation of SPARQL 1.1, Semantic Web 13 (2022)
829–893. doi:10.3233/SW-212871.
[12] G. T. Williams, J. Weaver, Enabling fine-grained HTTP caching of SPARQL query
results, in: The Semantic Web - ISWC 2011 - 10th International Semantic Web
Conference, Bonn, Germany, October 23-27, 2011, Proceedings, Part I, 2011, pp. 762–777.
doi:10.1007/978-3-642-25073-6\_48.
[13] N. Papailiou, D. Tsoumakos, P. Karras, N. Koziris, Graph-aware, workload-adaptive
SPARQL query caching, in: ACM SIGMOD International Conference on Management of
Data, ACM, 2015, pp. 1777–1792. doi:10.1145/2723372.2723714.
[14] W. Ali, M. Saleem, B. Yao, A. Hogan, A. N. Ngomo, A survey of RDF stores &amp;
SPARQL engines for querying knowledge graphs, VLDB J. 31 (2022) 1–26. doi:10.1007/
s00778-021-00711-3.
[15] M. Saleem, Q. Mehmood, A. N. Ngomo, FEASIBLE: A feature-based SPARQL
benchmark generation framework, in: The Semantic Web - ISWC 2015 - 14th International
Semantic Web Conference, Bethlehem, PA, USA, October 11-15, 2015, Proceedings,
Part I, volume 9366 of Lecture Notes in Computer Science, Springer, 2015, pp. 52–69.
doi:10.1007/978-3-319-25007-6\_4.
[16] R. Angles, C. B. Aranda, A. Hogan, C. Rojas, D. Vrgoc, WDBench: A Wikidata Graph
Query Benchmark, in: The Semantic Web - ISWC 2022 - 21st International Semantic Web
Conference, Virtual Event, October 23-27, 2022, Proceedings, volume 13489 of Lecture Notes
in Computer Science, Springer, 2022, pp. 714–731. doi:10.1007/978-3-031-19433-7\_41.
[17] A. Hogan, Canonical forms for isomorphic and equivalent RDF graphs: Algorithms for
leaning and labelling blank nodes, ACM TOW 11 (2017) 22:1–22:62. doi:10.1145/3068333.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>P.</given-names>
            <surname>Vandenbussche</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Umbrich</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Matteis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hogan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C. B.</given-names>
            <surname>Aranda</surname>
          </string-name>
          ,
          <article-title>SPARQLES: monitoring public SPARQL endpoints</article-title>
          ,
          <source>Semantic Web</source>
          <volume>8</volume>
          (
          <year>2017</year>
          )
          <fpage>1049</fpage>
          -
          <lpage>1065</lpage>
          . doi:
          <volume>10</volume>
          .3233/SW-170254.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <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>
          ,
          <string-name>
            <given-names>A.-C. N.</given-names>
            <surname>Ngomo</surname>
          </string-name>
          , LSQ
          <volume>2</volume>
          .
          <article-title>0: A Linked Dataset of SPARQL Query Logs</article-title>
          ,
          <source>Semantic Web Journal</source>
          (
          <year>2023</year>
          ). (to appear).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>S.</given-names>
            <surname>Malyshev</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Krötzsch</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>González</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Gonsior</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Bielefeldt</surname>
          </string-name>
          ,
          <article-title>Getting the Most Out of Wikidata: Semantic Technology Usage in Wikipedia's Knowledge Graph, in: The Semantic Web - ISWC</article-title>
          <year>2018</year>
          - 17th International Semantic Web Conference, Monterey, CA, USA, October 8-
          <issue>12</issue>
          ,
          <year>2018</year>
          , Proceedings,
          <string-name>
            <surname>Part</surname>
            <given-names>II</given-names>
          </string-name>
          ,
          <year>2018</year>
          , pp.
          <fpage>376</fpage>
          -
          <lpage>394</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>030</fpage>
          -00668-6\ _
          <fpage>23</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>W.</given-names>
            <surname>Martens</surname>
          </string-name>
          ,
          <source>Towards Theory for Real-World Data, in: PODS '22: International Conference on Management of Data</source>
          , Philadelphia, PA, USA, June 12 - 17,
          <year>2022</year>
          , ACM,
          <year>2022</year>
          , pp.
          <fpage>261</fpage>
          -
          <lpage>276</lpage>
          . doi:
          <volume>10</volume>
          .1145/3517804.3526066.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>T.</given-names>
            <surname>Stegemann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Ziegler</surname>
          </string-name>
          ,
          <article-title>Pattern-Based Analysis of SPARQL Queries from the LSQ Dataset, in: Proceedings of the ISWC 2017 Posters &amp; Demonstrations and Industry Tracks co-located with 16th International Semantic Web Conference (ISWC</article-title>
          <year>2017</year>
          ), Vienna, Austria, October 23rd - to - 25th,
          <year>2017</year>
          , volume
          <volume>1963</volume>
          <source>of CEUR Workshop Proceedings, CEUR-WS.org</source>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>A.</given-names>
            <surname>Bonifati</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Martens</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Timm</surname>
          </string-name>
          ,
          <article-title>An analytical study of large SPARQL query logs</article-title>
          ,
          <source>VLDB J</source>
          .
          <volume>29</volume>
          (
          <year>2020</year>
          )
          <fpage>655</fpage>
          -
          <lpage>679</lpage>
          . doi:
          <volume>10</volume>
          .1007/s00778-019-00558-9.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>L.</given-names>
            <surname>Rietveld</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Hoekstra</surname>
          </string-name>
          ,
          <article-title>Man vs. machine: Diferences in SPARQL queries</article-title>
          ,
          <source>in: Proceedings of the 4th USEWOD Workshop on Usage Analysis and the Web of of Data, ESWC</source>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>X.</given-names>
            <surname>Zhang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Zhao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Liu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Zhang</surname>
          </string-name>
          , H. Yang,
          <article-title>Characterizing Robotic and Organic Query in SPARQL Search Sessions</article-title>
          , in: Web and Big Data - 4th
          <source>International Joint Conference, APWeb-WAIM</source>
          <year>2020</year>
          , Tianjin, China,
          <source>September 18-20</source>
          ,
          <year>2020</year>
          , Proceedings,
          <string-name>
            <surname>Part</surname>
            <given-names>I</given-names>
          </string-name>
          , volume
          <volume>12317</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2020</year>
          , pp.
          <fpage>270</fpage>
          -
          <lpage>285</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>030</fpage>
          -60259-8\_
          <fpage>21</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>X.</given-names>
            <surname>Zhang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Saleem</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. N.</given-names>
            <surname>Ngomo</surname>
          </string-name>
          , G. Qi,
          <string-name>
            <given-names>H.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <article-title>Revealing secrets in SPARQL session level</article-title>
          ,
          <source>in: International Semantic Web Conference (ISWC)</source>
          , volume
          <volume>12506</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2020</year>
          , pp.
          <fpage>672</fpage>
          -
          <lpage>690</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>030</fpage>
          -62419-4\_
          <fpage>38</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>S.</given-names>
            <surname>Harris</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Seaborne</surname>
          </string-name>
          ,
          <string-name>
            <surname>E.</surname>
          </string-name>
          <article-title>Prud'hommeaux, SPARQL 1.1 Query Language</article-title>
          ,
          <source>W3C Recommendation</source>
          ,
          <year>2013</year>
          . http://www.w3.org/TR/sparql11-query/.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>