<!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>OntoMongo - Ontology-Based Data Access for NoSQL</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Thiago H. D. Araujo</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Barbara T. Agena</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Kelly R. Braghetto</string-name>
          <email>kellyrbg@ime.usp.br</email>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Renata Wassermann</string-name>
        </contrib>
      </contrib-group>
      <abstract>
        <p>Ontology-based data access (OBDA) has gained attention in recent years for providing access to large volumes of data by using ontologies as a conceptual layer and exploring their ability to describe domains and deal with data incompleteness. This is done through mappings that connect the data in the database to the vocabulary of the ontology. The first OBDA studies were about data stored in relational databases. Recent studies have begun to extend the use of OBDA to NoSQL databases. In this paper, we present a novel approach for OBDA with document-oriented NoSQL databases. Differently from related works, our approach uses an access interface with an intermediate conceptual layer that is extensible and flexible, capable of providing access to different types of database management systems. To validate the approach, we have implemented a prototype for MongoDB, using a real-world application domain as a case study.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        There are scenarios where the amount of available data grows exponentially,
the variety of data formats is large, and there’s a need to store and analyze
semistructured or even unstructured data, and relational databases are not the best
solution for storage and querying in these scenarios
        <xref ref-type="bibr" rid="ref8">(Nayak et al. 2013)</xref>
        . NoSQL
(Not Only SQL) databases were developed in order to provide better performance,
availability, and flexibility.
      </p>
      <p>
        There are four main groups of NoSQL Database Management System
(DBMS): document-oriented, column-oriented, graph-oriented and key-value stores.
As better explained in
        <xref ref-type="bibr" rid="ref8">(Nayak et al. 2013)</xref>
        , document-oriented databases are
schemaless and they store data as documents like XML and JSON, offering very
good performance and scalability. MongoDB1is a very popular document-oriented
DBMS. Column-oriented databases are similar to relational databases but are
optimized for reading and writing columns of data instead of rows, and they are very
good for analytic queries. Graph-oriented databases represent information as nodes
and edges on a graph, and they are good for representing associations between things
or concepts as a network. Key-value stores are pretty much like a large hash table,
and they are good for fast data retrieval (reads) and caching.
      </p>
      <p>With the increasing popularity of NoSQL DBMSs, there is growing interest
in applying OBDA to these types of systems. But unlike relational DBMSs, there
are neither standard query languages nor data models for NoSQL DBMSs. In this
work, we present an approach for the use of OBDA with NoSQL Systems, so that
it is possible to apply ODBA in domains with large volumes of data. We also
aim to simplify the mapping and the process of converting SPARQL queries into
queries for different types of NoSQL systems. To do this, we propose an intermediate
conceptual layer that represents the models saved in the database and an extensible
method of translating the queries to the target DBMSs. To evaluate its viability, we
apply this approach in an ODBA that uses a document-oriented NoSQL database
in MongoDB.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Background</title>
      <p>
        Botoeva et al.
        <xref ref-type="bibr" rid="ref2 ref3 ref7">(Botoeva et al. 2016b)</xref>
        proposed the use of NoSQL in OBDA
applications. Their work is an extension of Ontop
        <xref ref-type="bibr" rid="ref1">(Bagosi et al. 2014)</xref>
        , which is
an OBDA system for relational databases. The new proposed architecture was
tested using a document-oriented MongoDB database. In a related work,
Botoeva et al.
        <xref ref-type="bibr" rid="ref2 ref3 ref7">(Botoeva et al. 2016a)</xref>
        presented a formal evaluation of a subset of data
access queries available on MongoDB. This evaluation has shown that it is very
hard to build a completely generic framework that is able to query any kind of
NoSQL DBMS. Unlike relational databases that use a common query language
(SQL), NoSQL DMBS share few query patterns, so every NoSQL DBMS needs
a specific query translator.
      </p>
      <p>
        In another interesting work, Michel et al.
        <xref ref-type="bibr" rid="ref2 ref3 ref7">(Michel et al. 2016)</xref>
        have built a
SPARQL to MongoDB query mapping tool in order to turn a legacy database into
a publicly available data source. The database should be exposed as a virtual RDF
database: stored documents would be published as RDF triples. The tool does the
translation in two steps: first, the SPARQL query is transformed into an abstract
query using mappings from MongoDB documents to RDF written in an intermediate
language called xR2RML. Afterward, the query is rewritten to a concrete MongoDB
      </p>
      <sec id="sec-2-1">
        <title>1MongoDB https://www.mongodb.com/</title>
        <p>query. As a result, they’ve shown that it is always possible to rewrite a query that
produces correct results.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. ODBA with NoSQL Databases</title>
      <p>In this section, we talk about our approach to the problem of using ODBA to access
NoSQL databases.</p>
    </sec>
    <sec id="sec-4">
      <title>3.1. Query Translation Method</title>
      <p>We propose the utilization of an OBDA model with an Access Interface comprised
of an ontology, a mapping and an intermediate conceptual layer capable of providing
data access to a NoSQL DBMS. Our approach aims to simplify the construction of
a mapping to make it more flexible and generic, allowing its reuse independently
of the DBMS selected for the persistence layer. In order to do that, we define
an intermediate conceptual layer using classes in an object-oriented programming
(OOP) language to represent the structure (schema) of the data persisted on the
database.</p>
      <p>On the one hand, this approach simplifies the construction of a mapping
between ontology and OOP classes, since an object-oriented representation can be
very close to the ontological domain representation. Knowledge representation in
an ontology can be defined via classes, relations, hierarchy and inheritance, ideas
very similar to the concepts behind an object-oriented language implementation. On
the other hand, the task of accessing the data persisted in databases and mapping
in objects can be delegated to ORM (Object-relational Mapping) or ODM (Object
Document Mapper) libraries, very frequently used in industry. These libraries can
access several types of data stored in different DBMS, such as relational databases
or document-oriented databases, and turn them into object collections.</p>
      <p>In the mapping proposed here, each class (or attribute) of the ontology must
be associated with its respective class (or attribute) in the OOP model. In turn, the
OOP model is associated with the database schema by means of an ORM or ODM.
Once this mapping is defined, the Access Interface is able to receive a SPARQL
query and perform the data recovery. From the SPARQL query, a graph describing
the data which will be accessed by the query in the database is generated. The nodes
in the graph represent the classes, while the edges denote the relations between the
classes. Each node contains the list of attributes of the correspondent class required
to answer the SPARQL query.</p>
      <p>The description of all data that must be recovered from the database in order
to answer a SPARQL query is codified in the mapping and in the graph. In this
way, the data can be recovered by means of data access operations available in
the ORM/ODM library or by internal mechanisms which generate queries for the
employed DBMS.</p>
      <p>A first implementation of this method – a project called onto-mongo –
targeted document-oriented NoSQL DBMS; it is described in Section 3.2.</p>
    </sec>
    <sec id="sec-5">
      <title>3.2. The onto-mongo Project</title>
      <p>The onto-mongo2 project is a working prototype that applies the query translation
method detailed in Section 3.1, generating a set of RDF triples as a result that is
then used to populate an OWL ontology. As illustrated in Figure 1, the onto-mongo
project has the following main components: an OWL Ontology, a NoSQL database,
an Access Interface, an Ontology to Database collections mapping, a SPARQL to
NoSQL query translator, and a RDF export.</p>
    </sec>
    <sec id="sec-6">
      <title>3.2.1. OWL Ontology</title>
      <p>As an example, an ontology called basic-lattes (Figure 2), about researchers and their
publications, was created with the ontological classes Researcher and Publication.
The ontology is a client to our application, and it is used to answer some competency
questions related to the domain, which can be expressed as SPARQL queries.</p>
    </sec>
    <sec id="sec-7">
      <title>3.2.2. NoSQL database</title>
      <p>
        The onto-mongo project uses a document-oriented NoSQL database as data
storage. As an example of application, we have used data about researchers’ scientific
production, extracted from the Lattes Platform3 using a tool called scriptLattes
        <xref ref-type="bibr" rid="ref6">(Mena-Chalco and Cesar Junior 2009)</xref>
        . This tool is able to crawl and export
researchers’ Academic CVs as XML files which contain very detailed information about
scientific publications. After that, we have converted the XML files into JSON
documents and selected some useful fields like name, article name, and coauthors. We
      </p>
      <sec id="sec-7-1">
        <title>2The project is open-source: http://github.com/thdaraujo/onto-mongo</title>
        <p>have stored about a hundred of these documents into a document-oriented NoSQL
database maintained in the MongoDB DBMS.</p>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>3.2.3. Access Interface</title>
      <p>The Access Interface is a module capable of transforming a message containing a
SPARQL query and answering the message with a set of RDF triples extracted from
the database. This interface was developed using ruby4, an object-oriented language,
while the ruby on rails5 web framework was used to create a service application to
receive the messages.</p>
      <p>The Access Interface has classes written in ruby which represent the structure
of the database-stored collections. We call them model classes. Our example has
two main model classes: Researcher and Publication. The former models data from
researchers, and the latter models data from scientific publications.</p>
      <p>It is possible to define all of the instance attributes which are persisted in
the database by adding annotations to the model classes (i.e.: name or country).
It’s also possible to define the relations between classes, indicating for example that
an instance of the model Researcher might have a list of his or her publications
that is also saved in the database. And, on the other side, we can indicate that a
Publication must be related to an instance of Researcher.</p>
      <p>Model classes are used to manipulate persistent objects. They interact with
the database by means of CRUD (create, read, update, delete) methods. When a
NoSQL database is used to persist the objects, the model classes can be seen as a
conceptual schema for the database. For this reason, the model classes facilitate the
ontology mapping phase.</p>
      <p>3The Lattes Platform is a system maintained by the Brazilian Government to manage
information on science, technology, and innovation related to researchers working in Brazil.</p>
      <sec id="sec-8-1">
        <title>5The Ruby Language https://www.ruby-lang.org/</title>
      </sec>
      <sec id="sec-8-2">
        <title>5Ruby on Rails http://rubyonrails.org/</title>
        <p>3.2.4. Mapping
The mapping links the ontology classes to the Access Interface classes so that it
is possible to query information related to these entities in the database. Using
this approach, an ontology class is mapped to a ruby class that represents similar
concepts. The relationships between classes of the ontology are also mapped to
relations between classes of the object-oriented language.</p>
        <p>The mapping is done through the creation of methods that indicates the
equivalences that exist between the ontology and the model classes. Thus, it
became possible to map the structure present in the ontology to the structure of the
data collections present in the database, passing through the classes of the Access
Interface. The mapping can be defined in a script placed in the initialize folder of
the rails project, which will be executed when the program start up. In this script,
the user can define the mapping for each class of the Ontology, telling which class
model represents the class, which attributes of this model are equivalent to the
attributes of the ontology class, and which relations between the collections in the
document-oriented database are equivalent to the relations between the ontology
classes. In the mapping, the user can also indicate the path of the OWL file which
contains the definition of the ontology.</p>
        <p>As an example, consider the following mapping for the ontology class
Researcher:</p>
        <p>Listing 1. Mapping of Researcher class to Researcher model
1 OntoMap . mapping ’ P e s q u i s a d o r ’ do
2 model R e s e a r c h e r
3 maps from : ’ nome ’ , to : : name
4 maps from : ’ p a i s ’ , to : : country
5 maps from : ’ n o m e e m c i t a c o e s ’ , to : : n a m e i n c i t a t i o n s
6 maps r e l a t i o n : ’ p u b l i c o u ’ , to : : p u b l i c a t i o n s
7 end</p>
        <p>In line 1, we call the method mapping of the OntoMap module, passing as
parameter the class Researcher present in the ontology, and a block with some
definitions. In line 2, we say that the model Researcher present in the interface
is equivalent to the Researcher class. In lines 3 to 5, we map some attributes of
the model to attributes of the class in the ontology. The maps method receives two
parameters: from, which refers to some relation or property belonging to an ontology
class and to, that indicates which attribute of the class Researcher or relation with
another class is equivalent. In line 3, we define a mapping between the property
name and the attribute name. In line 6, the relation published that exists between
the classes Researcher and Publication is mapped to the relation publications of the
model, which represents the set of publications of a given researcher. It is important
to note that an instance of the class Researcher may have one or more publications.
Similarly, the mapping between the class Publication and the model Publication can
be made as follows:</p>
        <p>Listing 2. Mapping publication class to Publication model
1 OntoMap . mapping ’ P u b l i c a c a o ’ do</p>
        <p>The presented mapping allowed the translation of SPARQL queries into
MongoDB queries without the need for a direct mapping between the ontology
structure and the database document collections. In other related works that addressed
OBDA for relational DBMS, this type of mapping is done directly between SQL
queries and ontology classes. Our approach thus has a conceptual layer serving as
a link between ontology and data collections, and this conceptual layer (model) is
described in an object-oriented language, following a software architectural pattern
widely used. One of the main advantages of this approach is the possibility of reusing
the conceptual layer for other types of DBMS. With no efforts, we can use this layer
to persist and access data in relational databases.</p>
      </sec>
    </sec>
    <sec id="sec-9">
      <title>3.2.5. Translator</title>
      <p>The translator uses the mapping to transform SPARQL queries into queries to the
DBMS. The SPARQL query is first transformed into a SPARQL Syntax Expression
(S-Expression) through the sxp library 6, as this facilitates translation. The query
is then transformed into a graph representing the RDF triples, filters, groupings,
and variables that must be returned for this query. The translator has two
different strategies: the first one translates the query using the data recovery methods
from the model classes, and the other generates a MongoDB query in JSON, with
aggregations and filters, which is executed by the DBMS itself. The first strategy
is simpler because it only transforms the query into calls to methods of the model
classes along with Mongoid filtering methods, such as the WHERE method, which
receives a set of filters that must be applied to a list of objects. The retrieved data
objects can also be processed with the filtering and map/reduce functions of the
ruby collection libraries. The second strategy is the most appropriate for complex
queries on large databases, which have several types of aggregations, or filtering for
internal or related collections. With this strategy, these operations are executed by
the database management system, which provides a better performance.</p>
      <p>Currently, the translator only supports SPARQL queries in which the
predicate of the RDF triples in the WHERE clauses are relations or attributes defined
in the ontology and equality filters. The query in Listing 3 is an example of query
supported by the translator.</p>
      <sec id="sec-9-1">
        <title>6Available at: https://github.com/dryruby/sxp.rb</title>
      </sec>
    </sec>
    <sec id="sec-10">
      <title>3.2.6. RDF export</title>
      <p>The sets of objects extracted from the database are transformed into RDF triples
and sent back to the initial caller as the answer. We are also able to insert these
triples into the ontology as a way to populate it. Afterward, this information can
be queried or analyzed directly without any prior knowledge about the structure of
the database collections or the type of NoSQL system that is being used.</p>
    </sec>
    <sec id="sec-11">
      <title>4. Case study</title>
      <p>
        A case study was created to evaluate the feasibility of our approach, and we will
discuss it as an example to the reader. By starting with a query very similar to
the one described by Botoeva et al.
        <xref ref-type="bibr" rid="ref2 ref3 ref7">(Botoeva et al. 2016a)</xref>
        , we want to know which
researchers have published two different publications in the same year. To answer
that, we needed to implement only the subset of the NoSQL query language that
deals with aggregation. We also used a document-oriented database.
      </p>
      <p>The NoSQL database contains about a hundred CVs extracted from the
Lattes Platform. We also added some information about the researcher Kristen
Nygaard and two of his publications that have the same year so that our example
would be easier to illustrate. This was added to the researchers collection:
• ”COOL (comprehensive object-oriented learning)”, 2002.
• ”Class and Subclass Declarations”, 2002.
• ”Classification of actions and inheritance also for methods”, 1987.</p>
      <p>Using the same ontology discussed at section 3.2.1, we need to answer the
following question: which researchers published two different publications in the same
year? We can ask onto-mongo this question expressed in the following SPARQL
query:</p>
      <p>Listing 3. Example SPARQL query
PREFIX : &lt;http : / / onto−mongo/ b a s i c −l a t t e s /#&gt;
SELECT</p>
      <p>? nomePesquisador ? t i t u l o P u b l i c a c a o 1 ? t i t u l o P u b l i c a c a o 2 ? ano
WHERE
{
}
? p e s q u i s a d o r : nome ? nomePesquisador .
? p e s q u i s a d o r : p u b l i c o u ? p u b l i c a t i o n 1 .
? p e s q u i s a d o r : p u b l i c o u ? p u b l i c a t i o n 2 .
? p u b l i c a c a o 1 : a n o p u b l i c a c a o ? ano .
? p u b l i c a c a o 2 : a n o p u b l i c a c a o ? ano .
? p u b l i c a c a o 1 : t i t u l o ? t i t u l o P u b l i c a c a o 1 .
? p u b l i c a c a o 2 : t i t u l o ? t i t u l o P u b l i c a c a o 2 .</p>
      <p>FILTER</p>
      <p>(? p u b l i c a c a o 1 != ? p u b l i c a c a o 2 )</p>
      <p>First, we transform this query into an equivalent SPARQL Syntax
Expression, using the sxp library:</p>
      <p>Listing 4. SPARQL query transformed into a S-Expression
1 ( p r o j e c t</p>
      <p>The expression is divided into its components so that they can be translated
to a database query. The algorithm divides the query into the following components:
output variables (outputs), filters that must be applied (f ilters), the query body
(body) and its attribute triples (attributes) and relations (relations). We will discuss
these components in the next section by their order of evaluation.</p>
    </sec>
    <sec id="sec-12">
      <title>4.1. Query Body</title>
      <p>From the SPARQL query, we construct the graph of Figure 4. In line 6 of this
query example, the first triple is read and the first node of the graph of Figure 4 is
generated containing the attribute :nome of class Pesquisador stating that the name
of the researcher must be retrieved in the search that will be executed in MongoDB.
From the mapping, we know that the field : nome is related to the field name present
in Researcher, that is, it is just an attribute. In MongoDB, we say that this field
should be projected (projection). Project is a command that returns JSON fields
in the resulting document. It is similar to columns returned in a SELECT clause
in SQL. Then, in lines 7 and 8 we create two nodes that are adjacent to the first
node, referring to class Publica¸c˜ao, because there is a relation publicou. We know
from the mapping that publicou is a relation between researcher and publication
and publication is a list. For this reason, we generate an unwind command of
publicacao1 and another of publicacao2. The unwind command output a document
for each element of a list field. Because MongoDB does not have the JOIN operation,
it is necessary to transform a list or array present within the document into a set of
other objects for each element of that list using unwind. In the case of our example,
the combined effect of the two unwind is equivalent to a SQL cross join between
publicacao1 and publicacao2.</p>
      <p>Since publication is a document that is inside the document researcher, we
add the prefix so its attributes year and title can be found. Therefore, we make
the projection of these attributes with its prefix(e.g.: ?publicacao1.year). Once the
projections and unwinds are made, we then analyze the filters.</p>
    </sec>
    <sec id="sec-13">
      <title>4.2. Filters</title>
      <p>In lines 3 and 4 of the query in Listing 4, we can see the filters that should be applied
to the query result. In this case, ?publicacao1 must be different from ?publicacao2.
But we also take into account the information in lines 9 and 10: the query
requires that the year of the publications be the same, since variable ?ano appears in
?publicacao1 and ?publicacao2. Hence, the filter should ensure that each of the
publication pairs has different values for all their fields except by the year, which should
be the same. In this case, the query should bring in all the distinct publications
that were published in the same year.</p>
    </sec>
    <sec id="sec-14">
      <title>4.3. Output</title>
      <p>The output variables can be seen on line 2. When the output projection is generated,
it’s important to add the prefixes that are needed and then we are able to link
the variables and the attributes present in the document by using the mapping.
As an example, we can see that ?tituloP ublicacao1 gets its value from the field
$publicacao1.title that has been projected.</p>
    </sec>
    <sec id="sec-15">
      <title>4.4. Final Query and Results</title>
      <p>The resulting query that is executed is the following:</p>
      <p>Listing 5. Resulting query
{ : $ p r o j e c t =&gt;
{ : name =&gt; true ,
’ pu bl ic ac ao 1 ’ =&gt; ’ $ p u b l i c a t i o n s ’ ,
’ pu bl ic ac ao 2 ’ =&gt; ’ $ p u b l i c a t i o n s ’ } } ,
{ : $unwind =&gt; ’ $publicacao1 ’ } ,
{ : $unwind =&gt; ’ $publicacao2 ’ } ,
{ : $ p r o j e c t =&gt;
{ : name =&gt; true ,
: p u b l i c a c a o 1 =&gt; true ,
: p u b l i c a c a o 2 =&gt; true ,
’ f i l t e r 1 ’ =&gt;
{ ’ $and ’ =&gt;
[ { : $eq =&gt; [ ’ $ p u b l i c a c a o 1 . year ’ , ’ $ p u b l i c a c a o 2 . year ’ ] } ,
{ : $ne =&gt; [ ’ $ p u b l i c a c a o 1 . t i t l e ’ , ’ $ p u b l i c a c a o 2 . t i t l e ’ ]</p>
      <p>,→ } ] } } } ,
{ : $match =&gt; { ’ f i l t e r 1 ’ =&gt; t r u e } } ,
{ : $ p r o j e c t =&gt;
{ ’ nomePesquisador ’ =&gt; ’ $name ’ ,
’ t i t u l o P u b l i c a c a o 1 ’ =&gt; ’ $ p u b l i c a c a o 1 . t i t l e ’ ,
’ t i t u l o P u b l i c a c a o 2 ’ =&gt; ’ $ p u b l i c a c a o 2 . t i t l e ’ ,
’ ano ’ =&gt; ’ $ p u b l i c a c a o 1 . year ’ } }</p>
      <p>By querying the sample data, we get as a result a JSON document containing
unique publications that were published in the same year and that have the same
author, which answers the initial question:</p>
      <p>Listing 6. JSON documents that answer the query
[ { ’ i d ’ =&gt; BSON : : O b j e c t I d ( ’ 5 8 3 5 e f f c c 0 4 8 b d 0 0 0 1 c d c 2 3 9 ’ ) ,
’ researcherName ’ =&gt; ’ K r i s t e n Nygaard ’ ,
’ p u b l i c a t i o n T i t l e 1 ’ =&gt; ’COOL ( Comprehensive Object−o r i e n t e d
,→ Learning ) ’ ,
’ p u b l i c a t i o n T i t l e 2 ’ =&gt; ’ C l a s s and S u b c l a s s D e c l a r a t i o n s ’ ,
’ year ’ =&gt; 2002 } ]</p>
      <p>These documents are transformed into triples and then inserted on a RDF
graph, which is returned as an answer to the initial query. It’s also possible to insert
this new knowledge into the ontology and run some other queries or apply any form
of logical inference.</p>
    </sec>
    <sec id="sec-16">
      <title>5. Related and future work</title>
      <p>The approach presented in this research offers advantages for the scientific
community, mainly because it provides a different way of constructing mappings, making
this process easier to OBDA Systems.</p>
      <p>
        By avoiding a direct mapping to the database query language, as done by
        <xref ref-type="bibr" rid="ref4">(Calvanese et al. 2017)</xref>
        , the effort to construct and maintain the mapping is reduced.
Unlike the approach to relational DBMSs whose queries are written in standard SQL
language, each NoSQL DBMSs have different and diverse query languages.
      </p>
      <p>Placing next to the mapping a conceptual layer that operates on classes in an
OOP language makes our approach a more generic and flexible form of data access.</p>
      <p>In the future, we intend to analyze the differences between our approach and
existing approaches, evaluating advantages and disadvantages and investigating the
amount of effort required to apply this solution to other types of NoSQL DBMS.</p>
      <p>A future extension may allow onto-mongo to access other types of NoSQL
DBMSs, such as Cassandra. We also need to make the translator more generic and
flexible, as well as provide support to other types of queries like joins, filters, and
groupings. A possible solution is to develop an abstract interface describing the
methods that need to be implemented for a specific query translator, and then an
intermediate user (the user who configured the mapping) will be able to implement
these methods for a different kind of DBMS the user needs.</p>
      <p>Also, we intend to simplify the mapping method so that the user can create
it with as little knowledge of the Ruby language as possible.</p>
      <p>One application of our approach currently being developed is a project to
handle data extraction from the Lattes Platform in order to find co-authorship networks
via Link Prediction and Machine Learning algorithms. For that, onto-mongo is
being used to extract semantic information from a NoSQL database through SPARQL
queries.</p>
      <p>Another application in development by our research group will use this
approach to access data from a MongoDB database on legal decisions.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [Bagosi et al. 2014] Bagosi,
          <string-name>
            <given-names>T.</given-names>
            ,
            <surname>Calvanese</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            ,
            <surname>Hardi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Komla-Ebri</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            ,
            <surname>Lanti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            ,
            <surname>Rezk</surname>
          </string-name>
          ,
          <string-name>
            <surname>M.</surname>
          </string-name>
          ,
          <article-title>Rodr´ıguez-</article-title>
          <string-name>
            <surname>Muro</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Slusnys</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Xiao</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          (
          <year>2014</year>
          ).
          <article-title>The Ontop Framework for Ontology Based Data Access</article-title>
          .
          <source>In 8th Chinese Semantic Web and Web Science Conference</source>
          , pages
          <fpage>67</fpage>
          -
          <lpage>77</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [Botoeva et al. 2016a]
          <string-name>
            <surname>Botoeva</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Calvanese</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cogrel</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rezk</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Xiao</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          (
          <year>2016a</year>
          ).
          <article-title>A Formal Presentation of MongoDB (Extended Version)</article-title>
          .
          <source>CoRR Technical Report abs/1603</source>
          .09291, arXiv.org e-Print archive,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [Botoeva et al. 2016b]
          <string-name>
            <surname>Botoeva</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Calvanese</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cogrel</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rezk</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Xiao</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          (
          <year>2016b</year>
          ).
          <article-title>OBDA Beyond Relational DBs : A Study for MongoDB</article-title>
          .
          <source>Proc. of the 29th Int. Workshop on Description Logics (DL</source>
          <year>2016</year>
          ),
          <fpage>1</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [Calvanese et al. 2017]
          <string-name>
            <surname>Calvanese</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cogrel</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          , Komla-ebri, S.,
          <string-name>
            <surname>Kontchakov</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lanti</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rezk</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rodriguez-Muro</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Xiao</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          (
          <year>2017</year>
          ).
          <article-title>Ontop : Answering SPARQL Queries over Relational Databases</article-title>
          .
          <source>Semantic Web Journal</source>
          ,
          <volume>8</volume>
          (
          <issue>3</issue>
          ):
          <fpage>471</fpage>
          -
          <lpage>487</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [Calvanese et al. 2007]
          <string-name>
            <surname>Calvanese</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Giacomo</surname>
            ,
            <given-names>G. D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lembo</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lenzerini</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Poggi</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Rosati</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          (
          <year>2007</year>
          ).
          <article-title>Ontology-based database access</article-title>
          .
          <source>In Proc. of the 15th Italian Symposium on Advanced Database Systems(SEBD'07)</source>
          , pages
          <fpage>324</fpage>
          -
          <lpage>331</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          <source>[Mena-Chalco and Cesar Junior</source>
          <year>2009</year>
          ]
          <article-title>Mena-</article-title>
          <string-name>
            <surname>Chalco</surname>
            ,
            <given-names>J. A. P.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Cesar Junior</surname>
            ,
            <given-names>R. M.</given-names>
          </string-name>
          (
          <year>2009</year>
          ).
          <article-title>ScriptLattes: an open-source knowledge extraction system from the Lattes platform</article-title>
          .
          <source>Journal of the Brazilian Computer Society</source>
          ,
          <volume>15</volume>
          :
          <fpage>31</fpage>
          -
          <lpage>39</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [Michel et al. 2016]
          <string-name>
            <surname>Michel</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Faron-Zucker</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Montagnat</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          (
          <year>2016</year>
          ).
          <article-title>A mapping-based method to query MongoDB documents with SPARQL</article-title>
          .
          <source>In International Conference on Database and Expert Systems Applications</source>
          , pages
          <fpage>52</fpage>
          -
          <lpage>67</lpage>
          . Springer.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [Nayak et al. 2013]
          <string-name>
            <surname>Nayak</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Poriya</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Poojary</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          (
          <year>2013</year>
          ).
          <article-title>Types of NOSQL Databases and its Comparison with Relational Databases</article-title>
          .
          <source>International Journal of Applied Information Systems</source>
          ,
          <volume>5</volume>
          (
          <issue>4</issue>
          ):
          <fpage>16</fpage>
          -
          <lpage>19</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>