<!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>SPARQL Playground: a Block Programming Tool to Experiment with SPARQL</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Paolo Bottoni</string-name>
          <email>bottoni@di.uniroma1.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Miguel Ceriani</string-name>
          <email>ceriani@di.uniroma1.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Sapienza, University of Rome</institution>
          ,
          <country country="IT">Italy</country>
        </aff>
      </contrib-group>
      <fpage>103</fpage>
      <lpage>108</lpage>
      <abstract>
        <p>SPARQL is a powerful query language for Semantic Web data sources but one which is quite complex to master. As the block programming paradigm has been succesfully used to teach programming skills, we propose a tool that allows users to build and run SPARQL queries on an endpoint without previous knowledge of the syntax of SPARQL and the model of the data in the endpoint (vocabularies and semantics). This user interface attempts to close the gap between tools for the lay user that do not allow to express complex queries and overtly complex technical tools.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1 Introduction</title>
      <p>While the available Linked Data sources are increasing in quantity and diversity, their
usage is still limited. One of the barriers for the adoption of Semantic Web standards,
even by technology-savvy users, is their perceived complexity.</p>
      <p>
        Whether someone wants to explore an RDF dataset or in general the Linked Data
cloud, the options are usually either to use a Linked Data browser for a purely
resourcecentric view or to switch to writing queries using the SPARQL language [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], the
standard query language for RDF. Writing SPARQL requires knowledge of the syntax and
also a basic knowledge of the model underlying the dataset (vocabularies that are used,
semantics that are implemented). As community of developers and consumers of
Semantic Web technologies, we should challenge us to close this gap. There is a need for
tools that may be used in a modular and progressive way to guide the users from the
design of simple queries to complex ones.
      </p>
      <p>
        Block programming languages, in which coding is done by dragging and connecting
fragments shaped like jigsaw puzzle pieces, have been successfully used to introduce
programming to non-experts. Recently, tens of milions of users have been exposed to
the basics of programming using Blockly [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] as part of code.org’s Hour of Code 1. The
same metaphor was used in Scratch [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] to create animations and games and in MIT
App Inventor [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] to build Android Apps.
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] we proposed to use the block programming paradigm to design queries on
Linked Data sources. Apart from the goals stated above, we decided, as in the
philosophy of Block Programming, to design our tool as a way to gradually experiment the
structure of the “real” underlying language and in the end to be able to switch to
directly programming in that language. For these reasons the visual language mimics the
      </p>
      <sec id="sec-1-1">
        <title>1 https://code.org/about</title>
        <p>structure of the syntax of SPARQL, while at the same time trying to avoid excessive
verbosity that would lead to cognitive overload for the user. Compared to previous uses
of block programming languages, this proposal addresses novel challenges due to two
main specific properties: 1) the heterogeneous nature of Linked Data, that requires the
ability to explore graph datasets even without any a priori knowledge; 2) the
structural difference between procedural imperative languages for which this paradigm was
previously used and a functional query language like SPARQL. To deal with these
challenges we proposed a novel paradigm, favouring direct reuse of query results through
the integration of the visual space used for query design and results visualization.</p>
        <p>In the present paper we present a live demo of the tool. Through this online demo
we want to promote discussion on the topic of visual interfaces for SPARQL and
specifically evaluate the usability and reception of our proposal. Moreover, the user interface
has been enhanced to permit the execution of queries on multiple SPARQL endpoints.</p>
        <p>In the rest of the paper, Section 2 reports on related work while Section 3 presents
the tool. Section 4 gives details on the implementation and the presented demo and
Section 5 summarizes the proposal and draws some conclusions.
2</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>Related Work</title>
      <p>
        Several interactive tools have been proposed to support the structured querying of RDF
data sources, at various levels of abstraction and using different paradigms. A basic
distinction can be made between: 1) tools that require writing and reading SPARQL
syntax and 2) tools that provide other metaphors (usually visual) aimed at lowering the
learning curve and providing more intuitive interaction. The first kind of UIs include
advanced editors as YASGUI [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] or integrated environments as Twinkle2, but to design
the query the user has still to know SPARQL and the vocabularies used.
      </p>
      <p>
        UIs of the second kind provide interaction with another representation of the query
–textual or visual– that is then transformed to SPARQL to be executed. The text based
UIs use forms –such as SPARQLViz [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]– or controlled construction of natural language
statements –such as SPARKLIS [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. These systems do not scale well when the query
complexity increases and do not easily permit code reuse. As for the visual tools, most
of them use a graph-based paradigm (NITELIGHT [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], QueryVOWL [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]), others use a
dataflow-based paradigm (SparqlFilterFlow [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]), and at least one uses a combination of
both (VQS [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]). Graph-based interfaces fit the RDF graph pattern matching model very
well, while dataflow-based interfaces are effective in representing SPARQL functional
operators (e.g., UNION). Nevertheless, both types of interfaces are highly inefficient in
terms of space on user screen and often present problems with interaction.
      </p>
      <p>
        A previous important proposal for using block programming for SPARQL queries
is the SPARQL/CQELS Visual Editor designed for the Super Stream Collider
framework [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. In that case the blocks strictly follow the language structure and syntax and
the tool requires at least basic knowledge of SPARQL to be used. Conversely, the user
interface we propose is designed to provide blocks that should be mostly self
describing and usable without knowing the SPARQL syntax in advance. Finally, for most of
      </p>
      <sec id="sec-2-1">
        <title>2 http://www.ldodds.com/projects/twinkle/</title>
        <p>the existing tools the visualization of the result set is passive and often presented in an
indipendent panel/window (e.g., in many Web-based interfaces the result page replaces
the query page). In our proposal, on the contrary, results and query share there same
workspace to allow for an exploratory pattern of interaction.
3</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Proposed User Interface</title>
      <p>The following were the basic requirements around which the user interface was defined:
1. users should not care about the syntax – hence visual clues and constraints should
prevent syntax errors;
2. the need to input text by users should be minimized;
3. there should be direct ways to build commonly used structures;
4. users should be able to use the tool as a step to learn the SPARQL (textual) syntax
– hence the used blocks should follow the structure of the language;
5. users should be able to work even without prior knowledge of the dataset – hence
exploratory queries should be explicitly supported.</p>
      <p>
        The queries are designed composing the set of available blocks. For example,
Figure 1 represents a select query –against LinkedGeoData data set [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]– to get the names
of the first three regions (the first administrative subdivision) of Italy by alphabetical
order. The query is represented by the select all block and its sub-blocks. Among them,
the sub-block connected to the where connection is a graph pattern and corresponds to
the where clause of the query. Inside graph patterns and expressions, different types
of graph terms can be used: IRIs (represented in brown and using the prefixed
notation), variables (using Blockly appearance of variables for consistency), and literals
(represented in different colours according to their type, numeric, string or boolean).
The SPARQL query corresponding to Figure 1 is:
SELECT DISTINCT * WHERE {
lgdt:relation365331 lgdo:members [?p ?member].
?member
lgdo:role ’subarea’;
lgdo:ref [rdfs:label ?subareaName].
      </p>
      <p>FILTER(LANGMATCHES(LANG(?subareaName), ’en’))
}
ORDER BY (?subareaName) LIMIT 5</p>
      <p>However, in order to design such a query some knowledge about the specific dataset
(that there exists a resource lgdt:relation365331 representing Italy) and the used
vocabularies (that the property lgdo:members associates an area with a container of
items, of which the ones with gdo:role equal to “subarea” are administrative
subdivisions of the area) is still required.</p>
      <p>If the dataset is unknown this information is usually gathered through preliminary,
explorative queries. We thus designed the user interface especially to favour the reuse of
query results in the same or new queries. The execution block is used to execute a query
and to show the result set as soon as it is available. The produced result set is shown
again in the form of blocks, which can be dragged to other parts of the workspace and
connected to other blocks. Results from a query can thus easily be used as parts of
another query. For the previous query the tabular results can be seen in Figure 1 as well.
The execution block provides also a field to set the remote SPARQL endpoint to which
the query is sent –in this case the public SPARQL endpoint for LinkedGeoData3. There
is no formal limit to the number of execution blocks that can be used, new queries may
thus be built while keeping aside previously built queries and their results.</p>
      <p>Ideally, the results of execution would arrive within a small time. While this may
be true for not-too-complex queries against SPARQL endpoints that perform well, it
cannot be guaranteed for the general case. For that reason query executions are
nonblocking, i.e. the user interface stays reactive while waiting for a result from the server.
The user is thus able to keep working at the same query or other queries while the query
is being executed. If a query is modified during execution, the execution is aborted and
restarted with the updated query.</p>
      <p>When exploring a new dataset, knowing the used vocabularies and looking for
specific resources are a common need. For this reason the toolbox already contains some
pre-built queries that can be used to look for resources, classes and properties used in
the dataset. These pre-built queries are just sets of pre-connected blocks that can be
freely rearranged and decomposed on the workspace. Figure 2 shows the query
prepared to look for specific resources of a certain type, modified to look for a resource
labelled “Italy” and of type lgdm:Relation (that is the class used in LinkedGeoData
for geographical composite elements). The result of the query, together with the result
of similar explorative queries, can be reused to write a query as the one in Figure 1.</p>
      <sec id="sec-3-1">
        <title>3 http://linkedgeodata.org/vsparql</title>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4 Implementation and Demo</title>
      <p>The tool is based on an extension of the Blockly JavaScript library, working entirely
on the client side. We extended the library to supply the specific blocks needed for
SPARQL queries and execution. We also added the necessary code to generate SPARQL
fragments from the blocks. The SPARQL execution block listens for changes in its
query connection; each time the query changes, the corresponding SPARQL query is
generated and sent to a SPARQL endpoint. The SPARQL endpoint used is set as a field
of the execution block. The results are used to dynamically generate the result block
and its sub-blocks. The standard prefix definitions fromprefix.cc 4 are used to add prefix
declarations in the query sent to the endpoint and to convert the IRIs in the result to the
prefixed notation.</p>
      <p>
        The online demo5 is an instance of the tool provided to everyone willing to
experiment with this new user interface. By default the queries are executed against the
SPARQL endpoint of DBPedia6 [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], but –as shown in the examples in Section 3– any
other public SPARQL endpoint can be accessed7. Using the context menu on the blocks,
queries and fragments of queries may be exported as SPARQL. Query results may also
      </p>
      <sec id="sec-4-1">
        <title>4 http://prefix.cc/</title>
      </sec>
      <sec id="sec-4-2">
        <title>5 http://miguel76.github.io/SparqlBlocks/demo</title>
      </sec>
      <sec id="sec-4-3">
        <title>6 http://live.dbpedia.org/sparql</title>
        <p>
          7 As the tool runs on the browser, the endpoints have to be CORS-enabled; non CORS-enabled
endpoints may be reached through a proxy.
be exported in JSON format[
          <xref ref-type="bibr" rid="ref14">14</xref>
          ]. Apart from using the online demo, the code itself may
be also freely forked or donwloaded from GitHub8.
5
        </p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Conclusions</title>
      <p>We developed a new visual user interface to allow non-experts to build SPARQL queries.
The tool does not require prior knowledge of the used dataset and vocabularies,
favouring an exploratory and constructive way of building queries. An online demo –from
which any public SPARQL endpoint can be queried– has been setup to showcase the
user interface to the communities of Semantic Web developers and reasearchers, in
order to have feedback from a wider audience and foster discussion in this field.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Auer</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bizer</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kobilarov</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lehmann</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cyganiak</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ives</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          :
          <article-title>DBpedia: A Nucleus for a Web of Open Data</article-title>
          .
          <source>In: Proc. of ISWC 2007</source>
          . pp.
          <fpage>722</fpage>
          -
          <lpage>735</lpage>
          . Springer (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Borsje</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Embregts</surname>
          </string-name>
          , H.:
          <article-title>Graphical query composition and natural language processing in an RDF visualization interface</article-title>
          .
          <source>B.S. Thesis</source>
          , Erasmus School of Economics and Business Economics, Erasmus University, Rotterdam (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Bottoni</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ceriani</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Linked Data Queries as Jigsaw Puzzles: a Visual Interface for SPARQL Based on Blockly Library</article-title>
          .
          <source>In: Proc. of CHItaly 2015</source>
          . p. [To Appear].
          <source>ACM</source>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4. Ferre´,
          <string-name>
            <surname>S.</surname>
          </string-name>
          :
          <article-title>Sparklis: a SPARQL Endpoint Explorer for Expressive Question Answering</article-title>
          .
          <source>In: Proc. of ISWC 2014 Posters &amp; Demonstrations Track</source>
          . vol.
          <volume>1272</volume>
          .
          <string-name>
            <surname>CEUR-WS</surname>
          </string-name>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Fraser</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          , et al.:
          <article-title>Blockly: a visual programming editor (</article-title>
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Groppe</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Groppe</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schleifer</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Visual Query System for Analyzing Social Semantic Web</article-title>
          .
          <source>In: Proc. of the WWW '11</source>
          . pp.
          <fpage>217</fpage>
          -
          <lpage>220</lpage>
          . ACM (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Haag</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lohmann</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bold</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ertl</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>Visual SPARQL Querying based on Extended Filter/Flow Graphs</article-title>
          .
          <source>In: Proc. of AVI 2014</source>
          . pp.
          <fpage>305</fpage>
          -
          <lpage>312</lpage>
          . ACM (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Haag</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lohmann</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Siek</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ertl</surname>
          </string-name>
          , T.:
          <article-title>QueryVOWL: Visual Composition of SPARQL Queries</article-title>
          .
          <source>In: Proc. of ESWC 2015 Satellite Events</source>
          . Springer (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Harris</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          , et al.
          <source>: SPARQL 1</source>
          .
          <article-title>1 Query Language</article-title>
          .
          <source>W3C REC 21 March 2013</source>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Quoc</surname>
            ,
            <given-names>H.N.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Serrano</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Le-Phuoc</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hauswirth</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Super Stream Collider-Linked Stream Mashups for Everyone</article-title>
          .
          <source>In: Proc. of the Semantic Web Challenge at ISWC</source>
          <year>2012</year>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Resnick</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Maloney</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          , Monroy-Herna´ndez,
          <string-name>
            <given-names>A.</given-names>
            ,
            <surname>Rusk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            ,
            <surname>Eastmond</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            ,
            <surname>Brennan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            ,
            <surname>Millner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            ,
            <surname>Rosenbaum</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            ,
            <surname>Silver</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Silverman</surname>
          </string-name>
          ,
          <string-name>
            <surname>B.</surname>
          </string-name>
          , et al.:
          <article-title>Scratch: programming for all</article-title>
          .
          <source>Communications of the ACM</source>
          <volume>52</volume>
          (
          <issue>11</issue>
          ),
          <fpage>60</fpage>
          -
          <lpage>67</lpage>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Rietveld</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hoekstra</surname>
          </string-name>
          , R.: YASGUI:
          <article-title>Not Just Another SPARQL Client</article-title>
          .
          <source>In: Proc. of ESWC 2013 Satellite Events</source>
          . pp.
          <fpage>78</fpage>
          -
          <lpage>86</lpage>
          . Springer (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Russell</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Smart</surname>
            ,
            <given-names>P.R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Braines</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shadbolt</surname>
            ,
            <given-names>N.R.:</given-names>
          </string-name>
          <article-title>NITELIGHT: A Graphical Tool for Semantic Query Construction</article-title>
          .
          <source>In: Proc. of SWUI '08</source>
          . vol.
          <volume>543</volume>
          .
          <string-name>
            <surname>CEUR-WS</surname>
          </string-name>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Seaborne</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>SPARQL 1.1 Query Results JSON Format</article-title>
          .
          <source>W3C REC 21 March 2013</source>
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Stadler</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lehmann</surname>
            , J., H o¨ffner,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Auer</surname>
            ,
            <given-names>S.:</given-names>
          </string-name>
          <article-title>LinkedGeoData: A Core for a Web of Spatial Open Data</article-title>
          .
          <source>Semantic Web Journal</source>
          <volume>3</volume>
          (
          <issue>4</issue>
          ),
          <fpage>333</fpage>
          -
          <lpage>354</lpage>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Wolber</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Abelson</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Spertus</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Looney</surname>
            ,
            <given-names>L.: App</given-names>
          </string-name>
          <string-name>
            <surname>Inventor. O'Reilly Media</surname>
          </string-name>
          , Inc. (
          <year>2011</year>
          ) 8 https://github.com/miguel76/SparqlBlocks
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>