<!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>Mobile Semantic Query Distribution with Graph-Based Outsourcing of Subqueries</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>NICHE Research Group, Faculty of Computer Science, Dalhousie University</institution>
          ,
          <addr-line>Halifax</addr-line>
          ,
          <country country="CA">Canada</country>
        </aff>
      </contrib-group>
      <fpage>50</fpage>
      <lpage>61</lpage>
      <abstract>
        <p>While mobile computing domains have illustrated the usefulness of mobile semantic data, improvements in mobile hardware are paving the way for local semantic data access. To support this, a number of tools have been developed for storing, querying and reasoning over local semantic data. However, recent benchmarks have shown that mobile hardware still imposes limitations on efficient local data querying. Additionally, mobile scenarios pose unique challenges due to their dynamic nature; making it difficult to replicate semantic data a priori for local querying. In this paper, we propose a graphbased query distribution approach, which efficiently distributes query execution across configured remote datasets. Importantly, our approach aims to identify subqueries that can be outsourced to remote datasets, thus reducing local joining work.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        As shown by the Linked Open Data cloud [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], a staggering number of online,
machinereadable and interconnected Semantic Web datasets are currently available. Multiple tools and
techniques have been developed to access this wealth of data. Local replication [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] involves
replicating relevant parts of semantic datasets locally, allowing for robust and efficient access.
Virtual data integration, or query distribution, distributes queries over the remote datasets
themselves, integrating the results locally [
        <xref ref-type="bibr" rid="ref3 ref4">3, 4</xref>
        ].
      </p>
      <p>
        For some time now, mobile devices have met the hardware requirements for managing and
querying Semantic Web data. Reflecting this evolution, various mobile computing domains
currently leverage semantic data, including augmented reality [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], recommender systems [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ],
location-aware [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] and context-aware systems [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], mobile tourism [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] and m-Health [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
Supporting these approaches, multiple tools have been developed for constructing, managing,
querying and reasoning over local semantic data on mobile devices, including AndroJena [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], a
port of the well-known Apache Jena framework [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], and Rdf On The Go [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], which was
specifically developed for mobile systems. However, as shown by recent benchmarks [
        <xref ref-type="bibr" rid="ref14 ref15">14, 15</xref>
        ],
mobile hardware limitations regarding processing power, memory and battery capacity, limit
the scale of purely local solutions. Many mobile scenarios also pose unique challenges due to
their highly dynamic nature; e.g., cases where semantic data related to the user’s dynamic
context needs to be continuously accessible. Such scenarios makes a priori, local replication
of relevant data on the device problematic. Virtual data integration solutions bypass this issue
by executing queries directly on remote datasets. Moreover, by leveraging the capabilities of
remote datasets, opportunities exist for dealing with mobile hardware limitations.
      </p>
      <p>
        In particular, subqueries may be outsourced to relevant remote datasets, relieving the
mobile client of join processing. We also note that server hardware hosting these datasets are
better equipped, both hardware-wise and regarding data access optimizations (e.g., join
indices), to execute these subqueries to begin with. Moreover, less intermediate results are returned
to the device, reducing bandwidth usage. To allow identifying subqueries that are resolvable
by a particular dataset, we propose indexing graph patterns (i.e., graph structure with only
predicate edges) found in the dataset. For a given query and set of configured datasets, suitable
subqueries are found by determining subgraph isomorphism between the query subgraphs and
dataset graph patterns. Although subgraph checking is an NP-hard problem, it has reasonable
execution times for many real-world scenarios and is often used in graph databases [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ].
      </p>
      <p>In this paper, we present a graph-based, semantic query distribution approach, which
outsources suitable subqueries via graph pattern indexing and matching. We apply a custom,
back-tracking subgraph isomorphism algorithm, which is able to identify subqueries suitable
to be executed on a particular remote dataset. We present an evaluation comparing our system
to a predicate-based approach, using a real-world dataset.</p>
      <p>Section 2 discusses the indexing of dataset graph patterns. Section 3 presents our query
distribution approach. Section 4 shows an initial evaluation of our approach, while Section 5
discusses related work. Section 6 presents conclusions and future work.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Indexing dataset graph patterns</title>
      <p>To identify dataset graph patterns, our system first collects instance RDF graphs. Duplicate
instance graphs and subgraphs are hereby ruled out by applying subgraph checks on the
collected instance graphs, leaving only distinct graph patterns. Below, we show the pseudocode
for this indexing step:
1.  ← SELECT ∗ WHERE { ? s ? p ? o . }</p>
      <p>← execute(q, dataset)
2. 
3. 
4. 
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.</p>
      <p>← [  1]
,  2) 
−  2
+  2
ℎ2  
ℎ(</p>
      <p>ℎ
ℎ1,</p>
      <p>ℎ2) 
← 
  _</p>
      <p>ℎ ← 
ℎ ← 
ℎ + 
ℎ(
ℎ − 
ℎ2, 
ℎ
2
ℎ
1
ℎ1) 
Code 1. Algorithm for extracting dataset graph patterns.</p>
      <p>← 
17. 
18. 
19. 
20.
21.
22.
23.
24.
25. 
26.  ! 
27.</p>
      <p>_</p>
      <p>Lines 1-2 obtain all triples from the dataset. For each distinct result triple (lines 4-5), a new
graph pattern is created (line 6), as well as a list of candidates for expansion, initially
containing the result triple (line 7). Each candidate for expansion is added to the graph pattern (lines
8-9), and other triples linking to the current candidate (lines 10-11) are themselves added as
candidates for expansion (line 13). This process continues until no more new expansion
candidates are found, meaning a disjoint instance RDF graph has been identified.</p>
      <p>Subsequently, the algorithm checks whether the collected graph is a subgraph of another,
previously identified graph, or vice versa (lines 18-27). In case it is found to be a (non-proper)
subgraph, the newly found graph is ignored (lines 20-22). In case a previously indexed graph
is a subgraph of the new graph, the previous is removed &amp; the new graph is added (lines
2425, 26-27). Else, the new graph is added to the index as a new graph pattern (lines 26-27).</p>
      <p>In Section 3, we elaborate on the implementation of the is_subgraph function. We note that
the matches function only considers certain types of links, to maximize the re-use of extracted
graph patterns. Overall, the function may consider 4 links to extend an instance graph, as
illustrated in Figure 1:</p>
      <p>Two triples may be considered part of the same instance graph in case they represent a path
(links (1) and (3), and if they share the same subject (link (2)) or object (link (4)). In practice
however, we found that considering link (4) typically leads to cases where only a single (huge)
graph pattern can be extracted (i.e., about the same size as the dataset). For instance, most
resources will often be typed with owl:Thing, resulting in only one instance graph. Currently,
we follow a pragmatic solution to this problem, by simply ruling out link (4); thus maximizing
re-use of dataset graph patterns, and significantly reducing the size of extracted graph patterns.
On the other hand, we note that this will lead to problems if the shared object itself is involved
in other triples as subject. Tackling this issue more effectively is considered future work.</p>
      <p>After extracting the graph patterns, they are added to an index keeping the graph patterns for
each dataset. Ideally, the resource-intensive indexing process occurs on the dataset server,
ruling out the need to communicate the entire dataset to another location. Subsequently, indexed
graph patterns are communicated to the mobile systems, and updated each time significant
changes occur that alter the previously indexed patterns.
3</p>
    </sec>
    <sec id="sec-3">
      <title>Graph-based Query Distribution</title>
      <p>Based on the dataset graph pattern index (see Section 2), query execution will be distributed
across matching datasets. To cope with mobile device limitations, our main goal is to distribute
coherent subqueries to relevant datasets, thus outsourcing the resource-intensive join work to
42.
43.</p>
      <p>∷ 
true
_
( 1,  2)</p>
      <p>Code 2. Custom, back-tracking subgraph isomorphism algorithm.</p>
      <p>The compare function starts by checking for overlaps between the outgoing edges of n1 and
n2 (neighbor_matches; line 22). In case n1 is not a leaf node and no overlaps are found, false
is returned (lines 23-25). For each overlap, the function checks whether the e1 to-node is
already mapped to a g2 node (line 30; to avoid infinite loops). If so, and if it was already mapped
to the e2 to-node, edge e2 matches e1 (lines 37-38). If not, the e1 to-node is mapped to the e2
tonode (line 32), and the function recursively compares these two to-nodes (line 33). E.g., in
case no overlapping edges are found, this call will return false; if n1 turns out to be a leaf node,
it will return true. In case n1 and n2 recursively match, edge e2 matches e1 (line 33-34). If not,
the previously assigned mapping is removed (line 35) and another edge e2 (if any) is tried2.
Again, at this point, the algorithm could return false if no matches are found for e1 (at line 40),
since all e1 edges need to be matched for a subgraph match. However, to allow identifying
partial matches (i.e., involving a subgraph of g1), all e1 edges need to be tried; even if some
have already failed.</p>
      <p>The neighbor_matches function returns true in case n1 is a leaf node; since this means the
n1 subgraph has been checked completely. Else, it collects the overlaps between the outgoing
edges of e1 and e2: whereby two edges match in case both of them have the same label; either
of them represents a variable; or the e1 label represents a subproperty of e2. If no matches are
found for any edge e1, the function returns false; else, it returns the overlapping edges.</p>
      <p>To track the largest matching subgraph of g1, a listener is notified when two edges are being
compared (line 29), when two nodes are finished comparing (line 42), when a g1 node
comparison failed (lines 11, 15) and when comparison is done (lines 7, 19). Upon finishing the
subgraph comparison, the listener records the match by assigning dataset associated with the
dataset edge to its matching query edge; together with an ID uniquely identifying the subgraph
comparison3.
3.2</p>
      <sec id="sec-3-1">
        <title>Query Distribution</title>
        <p>To achieve virtual data integration, query execution is distributed across the configured
datasets, and the results integrated locally. In its simplest form , this involves splitting
up a query into its smallest units (i.e., triple patterns), executing them on each individual
dataset, and combining the results. In doing so, a query distribution system ensures that all results
are returned, even for queries that are not resolvable by any single dataset. Initially, such a
Query Distribution Plan (QDP) consists of nm query sets, each representing a particular result
integration:</p>
        <p>= [{  1 →   , … ,   →   , … ,   →   }, … ]</p>
        <p>), 0 &lt;  &lt;  , 0 &lt;  ,  ,  &lt;</p>
        <sec id="sec-3-1-1">
          <title>Formula 1. Query Distribution Plan (QDP)</title>
          <p>2 Multiple e2 matches for e1 are possible, and vice-versa (e2 is only matched to one e1 at a time).
3 This unique ID is required by the query distribution algorithm (see Section 3.2).</p>
          <p>Where   →   stands for an atomic subquery, i.e., executing a single triple pattern   on
dataset   ; a set of subqueries between accolades forms a query set, standing for a particular
integration of results; and the set of query sets make up the QDP, standing for all possible
result integrations.</p>
          <p>In our query distribution approach, graph patterns from an incoming query are compared to
the set of dataset graph patterns (see Section 2), using subgraph isomorphism checks. After
these checks, matching datasets are assigned to the query graph edges (see Section 3.1, last
paragraph), indicating which query triples (each corresponding to an edge) are collectively
resolvable by particular datasets. Based on these results, given a query set, multiple ti matched
to the same Dy (during the same subgraph check) can be grouped into the same subquery:
= { 1 →   , …   , , →   , … ,   →   }
),  =  ( ), 0 &lt;  ,  ,  &lt;  , 0 &lt;  ,  ,  &lt;</p>
          <p>Formula 2. Grouping subqueries in query sets based on their shared dataset.</p>
          <p>In the query shown in Figure 3, subqueries  1,  2,  3 →  ,  2,  4 →  ,  1 →  and  5 → 
can be distinguished into their respective query sets.</p>
          <p>In this process, it is important to consider the particular subgraph check in which the
matching dataset was found. For instance, consider the following cases:</p>
          <p>In case (a), part of the query (t1, t3) was matched to a particular graph pattern (1) from A
during one subgraph check, while the remainder (t2) was matched to a different graph (2) from
A during another check. However, these two dataset graph patterns are disjoint; no single
instance graph exists that covers both graph patterns4. As such, this particular query set will
never yield any results, and need to be removed from the QDP. Case (b) illustrates that this
reasoning is only valid when considering connected query triples (i.e., with shared variables).
4 Else, they would have been combined during the graph extraction process (see Section 2).
Here, an intermediate query triple t2 is executed on dataset B, which may yield results that
connect t1 with t3 ; in other words, an instance graph, integrated from both datasets, may exist
that connects all 3 query triples.</p>
          <p>Further, we note that triple patterns executed on the same dataset, but not sharing any
variables, should ideally be kept separate. Putting these into the same subquery will lead to a
Cartesian product, resulting in a huge number of results returned by the remote dataset; whereas
the associated local computational work is comparatively low.</p>
          <p>Below, we show the pseudocode for post-processing the QDP, based on subgraph matches:
1.  1:  
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.</p>
          <p>2:</p>
          <p>Code 5. Processing the QDP based on subgraph matching results.</p>
          <p>For each query set, query triples are grouped into subqueries based on assigned dataset and
shared variables (lines 1-2). If one of these subqueries involves two query triples, assigned to
the same dataset but associated with a different dataset graph pattern (lines 4-6), the query set
is removed from the QDP (lines 7-8).</p>
          <p>After generating a QDP, it is passed to the execution engine. For each subquery, the engine
creates and executes a SPARQL query on the associated remote dataset. To integrate subquery
results from a single query set, we apply a hash join. Results from multiple query sets are
combined via a union operation. Since the same subquery-on-dataset combination will occur
in multiple query sets (see Formula 1), the engine caches previous results for later re-use.
4</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Evaluation</title>
      <p>This section presents a preliminary evaluation of our query distribution approach. In our
evaluation, a client app poses a query that requires data from two datasets to be integrated. To
illustrate the usefulness of graph-based query distribution, we compare our approach to a
straightforward predicate-based approach, which distributes incoming queries solely based on
query predicates and indexed dataset predicates. For each query triple, the approach checks
which datasets contain its concrete predicate; and then executes the query triple (potentially
grouped in a subquery) on the found datasets.</p>
      <p>Below, we elaborate on the evaluation setup, including current implementation
components. Then, we discuss the results of each query distribution approach.
4.1</p>
      <sec id="sec-4-1">
        <title>Setup</title>
      </sec>
      <sec id="sec-4-2">
        <title>Dataset &amp; query</title>
        <p>Dataset</p>
        <sec id="sec-4-2-1">
          <title>Geonames datasets.</title>
          <p>Query
1. SELECT ∗ WHERE {


2.
3.
4.
5.
6.

</p>
          <p>We ran all experiments 10 times, and took the average of the performance times. Below,
we elaborate on other relevant aspects:
datasets are relatively small, we will show that these a) already result in non-trivial execution
times and b) indicate significant differences in performance between the evaluated approaches.
Respectively, 7 and 2 distinct graph patterns were found in the extracted DBPedia and
Our evaluation executes the following query, selecting the label, type, coordinates and website
of geographic entities (namespaces omitted for brevity):
? 
? 
? 
? 
?</p>
          <p>. }</p>
        </sec>
        <sec id="sec-4-2-2">
          <title>Code 6. Evaluation query.</title>
          <p>This query returns 51 results on the integrated dataset.</p>
        </sec>
      </sec>
      <sec id="sec-4-3">
        <title>Hardware</title>
        <p>Dataset</p>
        <p>
          Mobile
Both datasets were made accessible using the Apache Fuseki [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ] SPARQL server, deployed
7 64-bit, with Intel Core i7-3520M 2.90 Ghz and 8Gb RAM.
5 Such interlinks indicate resource equivalence with other major datasets.
6 To mimic real-life conditions, the SPARQL endpoint was not hosted on the same local network.
4.2
        </p>
      </sec>
      <sec id="sec-4-4">
        <title>Results</title>
        <p>For the predicate-based approach, we consider two configurations: a configuration where
joins are not outsourced (no-outsource); and a configuration where, per query set, query triples
assigned to the same dataset are grouped into the same subquery (outsource). In Table 1, we
indicate the number of query sets, remote query executions and total number of individual
query results to be joined.</p>
        <p># query sets
# query exec.
# indiv. results</p>
        <p>The overall number of query executions is relatively low, since an internal cache is kept to
avoid re-sending the same subquery (see discussion after Code 5). We also note that, when
outsourcing queries, additional subqueries will be constructed. Therefore, the potential for
reusing cached results is reduced, and the overall number of query executions is comparatively
increased (see predicate-based &gt; outsource column). However, the local join work is reduced,
as illustrated by the total number of individual query results.</p>
        <p>Table 2 shows the performance results, where ID stands for identifying relevant datasets
and QDP for constructing the dataset (see Code 5):</p>
        <p>Since less queries are sent to the datasets, executing queries takes much less time for
graphbased. Since pred-based &gt; outsource and graph-based both outsource join work to the remote
dataset, locally joining results is much faster as well. Despite its extra overhead when
identifying relevant datasets and constructing the QDP, our graph-based query distribution approach
outperforms either predicate-based approach.</p>
        <p>Creating the graph index and predicate index takes ca. 4431ms and 80ms, respectively. We
note that that the graph creation process only needs to be applied in case the dataset contents
are updated significantly, causing a change in its graph patterns.
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Related work</title>
      <p>
        The Distributed ARQ (DARQ) [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] and Semantic Web Integrator and Query Engine (SemWIQ)
[
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] systems keep an index with summary dataset info. DARQ keeps so-called service
descriptions, including found predicates, constraints on subjects and objects occurring with these
predicates, and statistical data. The SemWIQ system maintains a catalog per data source,
which keeps a list of classes and their number of instances, as well as a list of properties and
their number of occurrences. Given a posed query, these indices are used to determine which
triple patterns should be sent to which datasets. As such, these works do consider join
outsourcing; which has the potential for large performance gains, as shown by our evaluation.
      </p>
      <p>
        The approach in [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] resembles our work, as it focuses on indexing found predicate
sequences or paths. This allows identifying datasets that can handle particular query predicate
paths, with the goal of reducing local join work. In contrast, our approach supports outsourcing
any kind of subquery, and is not just limited to path-based queries.
      </p>
    </sec>
    <sec id="sec-6">
      <title>Conclusions &amp; Future work</title>
      <p>In this paper, we presented a graph-based query distribution approach, focusing on
outsourcing subqueries to relevant remote datasets. We presented a mechanism for indexing graph
patterns in remote datasets; a custom, backtracking subgraph isomorphism algorithm; and our
graph-based query distribution mechanism. Our evaluation shows that our approach has the
potential to significantly reduce the number of queries to be sent to remote datasets, as well as
minimize the resulting local join work.</p>
      <p>
        Many avenues for future work exist. By keeping summary data on graph pattern nodes (cfr.
[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]), the “joinability” between graph patterns of different datasets can also be considered when
ruling out query sets (see Figure 4 (b)). Edges in extracted graph patterns can be annotated
with the number of associated instance graphs, to guide join optimizations. Currently,
extracted graph patterns are kept per dataset. By keeping a single index, equivalent graph patterns
from multiple datasets can be merged, thus reducing the number of isomorphism checks.
      </p>
      <p>
        To allow identifying partial subgraph matches, our subgraph checking algorithm drops a
number of optimizations that may result in serious performance gains. Studying other methods
of efficiently determining partial query matches is future work. Furthermore, although
subgraph isomorphism checking is known to be an NP-hard problem, many algorithms have been
proposed over the years that solve it in a reasonable time [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. In case our straightforward,
custom algorithm leads to problematic performance for larger datasets, future work may
involve studying and re-using other algorithms.
7
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Cyganiak</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jentzsch</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>The Linking Open Data cloud diagram</article-title>
          , http://lod-cloud.net/.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Zander</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schandl</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>A framework for context-driven RDF data replication on mobile devices</article-title>
          .
          <source>Proceedings of the 6th International Conference on Semantic Systems</source>
          . pp.
          <volume>22</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>22</lpage>
          :
          <fpage>5</fpage>
          . ACM, New York, NY, USA (
          <year>2010</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Quilitz</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Leser</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          :
          <article-title>Querying distributed RDF data sources with SPARQL</article-title>
          .
          <source>ESWC'08: Proceedings of the 5th European semantic web conference on The semantic web</source>
          . pp.
          <fpage>524</fpage>
          -
          <lpage>538</lpage>
          . Springer-Verlag, Berlin, Heidelberg (
          <year>2008</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Langegger</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wöß</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Blöchl</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>A semantic web middleware for virtual data integration on the web</article-title>
          .
          <source>Proceedings of the 5th European semantic web conference on The semantic web: research and applications</source>
          . pp.
          <fpage>493</fpage>
          -
          <lpage>507</lpage>
          . Springer-Verlag, Berlin, Heidelberg (
          <year>2008</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Reynolds</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hausenblas</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Polleres</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hauswirth</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hegde</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          :
          <article-title>Exploiting linked open data for mobile augmented reality</article-title>
          .
          <source>W3C Workshop: Augmented Reality on the Web</source>
          (
          <year>2010</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Ziegler</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Semantic web recommender systems</article-title>
          .
          <source>In Proceedings of the Joint ICDE/EDBT Ph.D. Workshop 2004</source>
          (Heraklion. pp.
          <fpage>78</fpage>
          -
          <lpage>89</lpage>
          . Springer-Verlag (
          <year>2004</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Becker</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bizer</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>DBpedia Mobile: A Location-Enabled Linked Data Browser</article-title>
          . In: Bizer,
          <string-name>
            <given-names>C.</given-names>
            ,
            <surname>Heath</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            ,
            <surname>Idehen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            , and
            <surname>Berners-Lee</surname>
          </string-name>
          ,
          <string-name>
            <surname>T</surname>
          </string-name>
          . (eds.) LDOW.
          <article-title>CEUR-WS.org (</article-title>
          <year>2008</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>Van</given-names>
            <surname>Woensel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            ,
            <surname>Casteleyn</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            ,
            <surname>Paret</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            ,
            <surname>De Troyer</surname>
          </string-name>
          ,
          <string-name>
            <surname>O.</surname>
          </string-name>
          :
          <article-title>Mobile Querying of Online Semantic Web Data for Context-Aware Applications</article-title>
          .
          <source>IEEE Internet Comput. Spec. Issue (Semantics Locat. Serv</source>
          .
          <volume>15</volume>
          ,
          <fpage>32</fpage>
          -
          <lpage>39</lpage>
          (
          <year>2011</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9. Keller, C.,
          <string-name>
            <surname>Pöhland</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Brunk</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schlegel</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>An Adaptive Semantic Mobile Application for Individual Touristic Exploration</article-title>
          .
          <source>HCI (3)</source>
          . pp.
          <fpage>434</fpage>
          -
          <lpage>443</lpage>
          (
          <year>2014</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Puertas</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Prieto</surname>
            ,
            <given-names>M.L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>De Buenaga</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Mobile Application for Accessing Biomedical Information Using Linked Open Data</article-title>
          .
          <source>Proceedings of the 1st Conference on Mobile and Information Technologies in Medicine. , Prague</source>
          , Czech Republic (
          <year>2013</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>11. AndroJena, https://code.google.com/p/androjena/.</mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>12. Apache Jena, https://jena.apache.org/.</mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Le-Phuoc</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Parreira</surname>
            ,
            <given-names>J.X.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Reynolds</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hauswirth</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>RDF On the Go: An RDF Storage and Query Processor for Mobile Devices</article-title>
          . 9th
          <source>International Semantic Web Conference (ISWC2010)</source>
          (
          <year>2010</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Patton</surname>
            ,
            <given-names>E.W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>McGuinness</surname>
            ,
            <given-names>D.L.</given-names>
          </string-name>
          :
          <article-title>A Power Consumption Benchmark for Reasoners on Mobile Devices</article-title>
          . In: Mika,
          <string-name>
            <given-names>P.</given-names>
            ,
            <surname>Tudorache</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            ,
            <surname>Bernstein</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            ,
            <surname>Welty</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            ,
            <surname>Knoblock</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.A.</given-names>
            ,
            <surname>Vrandecic</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            ,
            <surname>Groth</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.T.</given-names>
            ,
            <surname>Noy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.F.</given-names>
            ,
            <surname>Janowicz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            , and
            <surname>Goble</surname>
          </string-name>
          , C.A. (eds.) The Semantic Web - {
          <source>ISWC} 2014 - 13th International Semantic Web Conference, Riva del Garda, Italy, October 19-23</source>
          ,
          <year>2014</year>
          . Proceedings,
          <source>Part {I}</source>
          . pp.
          <fpage>409</fpage>
          -
          <lpage>424</lpage>
          . Springer (
          <year>2014</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Woensel</surname>
          </string-name>
          , W. Van, Haider, N. Al,
          <string-name>
            <surname>Ahmad</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Abidi</surname>
            ,
            <given-names>S.S.R.:</given-names>
          </string-name>
          <article-title>A Cross-Platform Benchmark Framework for Mobile Semantic Web Reasoning Engines. The Semantic Web -</article-title>
          {
          <source>ISWC} 2014 - 13th International Semantic Web Conference, Riva del Garda, Italy, October 19-23</source>
          ,
          <year>2014</year>
          . Proceedings,
          <source>Part {I}</source>
          . pp.
          <fpage>389</fpage>
          -
          <lpage>408</lpage>
          (
          <year>2014</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Lee</surname>
          </string-name>
          , J., Han, W.-S.,
          <string-name>
            <surname>Kasperovics</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lee</surname>
            ,
            <given-names>J.-H.:</given-names>
          </string-name>
          <article-title>An in-depth comparison of subgraph isomorphism algorithms in graph databases</article-title>
          .
          <source>Proceedings of the 39th international conference on Very Large Data Bases</source>
          . pp.
          <fpage>133</fpage>
          -
          <lpage>144</lpage>
          . VLDB Endowment (
          <year>2013</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>17. Apache Fuseki, http://jena.apache.org/documentation/fuseki2/.</mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>18. AndroJena, http://code.google.com/p/androjena/.</mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>19. Online Datasets, https://niche.cs.dal.ca/materials/qd/.</mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Stuckenschmidt</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vdovjak</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Broekstra</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Houben</surname>
          </string-name>
          , G.:
          <article-title>Towards distributed processing of RDF path queries</article-title>
          .
          <source>Int. J. Web Eng. Technol</source>
          .
          <volume>2</volume>
          ,
          <fpage>207</fpage>
          -
          <lpage>230</lpage>
          (
          <year>2005</year>
          ).
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>