<!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>On Querying Ontologies with Contextual Logic Programming</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Cl´audio Fernandes</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Nuno Lopes</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Salvador Abreu</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Universidade de E</institution>
        </aff>
      </contrib-group>
      <abstract>
        <p>We describe a system in which Contextual Logic Programming is used as a mediator for knowledge modeled by ontologies. Our system provides the components required to behave as a SPARQL query engine and, as a result of its Logic Programming heritage, it may also recursively interrogate other ontologies or data repositories, providing a semantic integration of multiple sources.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>Altough these are more advanced reasoners, interesting points of comparison
with our system are at the representation and query level. At this time this is
sitll ongoing work.</p>
      <p>
        Web Ontology Languages: Tim Berners-Lee’s view and design of the
Semantic Web proceeds in steps, each one building a layer on top of the other. At
the bottom we find XML, and right above is the RDF and RDF-S [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] layer.
RDF is a basic data model for describing simple statements about objects and
RDF Schema [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], which is based on RDF, provides additional modeling
primitives like classes and properties that enables hierarchical organization of Web
documents. However, The Web Ontology Working Group of W3C identified a
number of characteristics and use-cases for the Semantic Web that would require
more expressiveness than RDF and RDF-S can offer. A richer ontology
modeling language was already defined, DAML-OIL [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], which was then taken as the
starting point for the W3C Web Ontology Working Group in defining OWL [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ],
the language that is aimed to, as stated by Grigoris Antoniou and Frank van
Harmelen [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] be the standardized and broadly accepted ontology language for
the Semantic Web.
      </p>
      <p>
        Query Languages: There are a variety wide of Semantic Web query languages
[
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], ranging from pure selection languages with limited expressivity to general
purpose languages supporting different data representation formats and complex
queries. For our research we chose to follow the W3C working groups proposed
standard: SPARQL [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], an RDF query language and protocol.
      </p>
      <p>The remainder of this article is structured as follows: after a brief
introduction, we introduce contextual logic programming. In section 3 we discuss
the issues dealing with knowledge representation and ontology querying from
a contextual logic programming perspective. We then proceed, in Section 4,
to describe a possible approach to implementing a SPARQL agent, using the
CxLP framework. The issue of querying remote SPARQL agents from within
the CxLP framework is discussed in Section 5. Finally, Section 6 provides a first
experimental evaluation of our system and outline possible directions for future
research.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Contextual Logic Programming</title>
      <p>
        Contextual Logic Programming (CxLP) is a simple yet powerful extension to the
Prolog logic programming language which provides a mechanism for modularity.
In CxLP a finite set of Horn clauses with a given name is designated by unit.
Abreu and Diaz [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] provide a revised specification for CxLP, which emphasizes
the OOP aspects by means of a stateful model, allowed by the introduction
of unit arguments. Informally, a unit is a parametric module, constituting the
program’s static definition block.
      </p>
      <p>
        Unit descriptor terms can be instantiated and collected into a list to form
a context, which can be thought of as a dynamic property of computations. A
context specifies the actual program (or theory) against which the current goal
is to be resolved. In short, it specifies the set of predicates which is applicable.
These predicates have definitions which depend on the specific units which make
up the context. A more extensive description of CxLP may be found in [
        <xref ref-type="bibr" rid="ref1 ref2">1, 2</xref>
        ].
      </p>
      <p>GNU Prolog/CX introduces a set of language operators called the context
operators which modulate the context part of a computation.</p>
      <p>In a nutshell, when executing a goal G in a context C, a CxLP Engine will
traverse C looking for the first unit u that contains a definition for G’s predicate.
G is then executed as if it were regular Prolog, in a new context that is the
suffix of the C which starts with unit u. Some of the most used operations and
operators in GNU Prolog/CX are:3
Context extension: U :&gt; G, this operation extends the current context with
unit U and then reduces goal G;
Context switch: C :&lt; G, attempts to evaluate goal G in context C, ignoring
the current context;
Supercontext: :^ G, evaluates goal G in the context resulting of removing the
top unit from the current context;
Current context: :&lt; C, unifies C with the current context;
Calling context: :&gt; C, unifies C with the calling context
3</p>
    </sec>
    <sec id="sec-3">
      <title>System architecture</title>
      <p>
        The implemented system is divided in three parts: the core, a front-end (FE)
SPARQL agent and a back-end (BE) that maps Prolog/CX to SPARQL queries.
The core system is responsible for representing the ontology, the FE enables the
resolution of queries expressed in SPARQL and the BE allows the core (and the
FE) to query other SPARQL web services. This architecture is represented in
Figure 1. By integrating the core, FE, BE and other Logic Programming
frameworks namely ISCO [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], the system will be able to access several heterogeneous
sources of information: the ontology, other SPARQL agents or web services and
relational data bases.
      </p>
      <p>The main objective of the core system is to represent web ontologies with
CxLP tools. After an ontology is transformed into Prolog/CX units, the
capabilities of that representation are that of pure Prolog with modular program
structuring. For instance, we can build a front end that acts as a SPARQL web
agent which can receive a SPARQL query over a known ontology, process it
against the internal representation and respond with the solution. This
representation can also be used to map Prolog goals to SPARQL queries and collect
the results as logic variable bindings. These approaches are further discussed in
Sections 4 and 5.</p>
      <p>
        The system we designed is capable of parsing OWL Lite and DL ontologies.
Since OWL Full can’t guarantee efficient reasoning support, the, OWL DL
variant naturally emerged as the goal for the mapping requirements in our system.
3 For a more detailed and formal description, the reader is referred to [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
Ontologies are represented using units: there will be one unit that indicates the
elements (classes and properties) of the ontologies, another unit for individuals
and one for each OWL class and property.
      </p>
      <p>The individuals and their property values are represented in the unit individuals.
This unit stores, for each individual, the class it belongs to and, for each of the
individual properties, its value.</p>
      <p>
        Each class and property is defined in a unit named after the class or property.
Further information about each of this objects, such as hierarchy and restrictions,
can be found in its unit. The naming schema of properties and classes does not
pose a problem in OWL DL since, as stated in [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], “OWL DL requires a pairwise
separation between classes, datatypes, datatype properties, object properties,
annotation properties, ontology properties (i.e., the import and versioning stuff),
individuals, data values and the built-in vocabulary”.
      </p>
      <p>The set of known ontologies are represented in a unit named ontologies
which lists the classes and properties of each loaded ontology. Each property
and class listed in this unit can then be accessed in a uniform manner using the
operator /&gt;. This operator is defined as a context extension operation, i.e., based
on the unit name it constructs a new context in which to evaluate the goal.
3.2</p>
      <p>Querying an ontology
The most direct way of retrieving the class individuals is to use the goal item/1.
There is also a goal item/0 that has the exact behaviour of item/1 but has no
direct arguments, this predicate, when used with the predicate units in the query
will allow to access the property values ignoring the name of the individual.</p>
      <p>The item/1 goal binds, by backtrack, its argument to each individual of the
class. There is also the possibility of querying all the individuals in the ontology
by omitting a class in the query.</p>
      <p>The value of the properties can be accessed by including the unit that
represents the property in the context query. This enables selecting only a subset
of the properties. The argument of the property unit will be bound to the value
of the property for the corresponding individual, as shown in Figure 2.
1 | ?- ’IceWine’ /&gt; hasFlavor(F) :&gt; hasBody(B) :&gt; item(I).
2 B = ’Medium’
3 F = ’Moderate’
4 I = ’SelaksIceWine’ ?
In order to query an ontology, that ontology must first be transformed and loaded
into the system, in a way similar to the compilation process. This results in the
ontology being represented as the structure described in Section 3.1.
XML parse: In this step the ontology is handled as a plain XML file and
therefore parsed using a standard XML parser.</p>
      <p>The selected parser was the “The Expat XML Parser”. 4 The parser creates
a Prolog term that is an accurate representation of the XML file, and apart from
the possible comments in the ontology file, there is no loss of information in this
transformation.</p>
      <p>Name analysis: The next process is to match the term created by Expat
and build a dicnionary with all the information we need to generate the units
and predicates that will represent the ontology. The body of the ontology is
mapped focusing mostly on classes, properties, individuals and relations between
these elements. Ontology headers are also stored to be included in the ontology
definition unit.</p>
      <p>Unit generation: At this stage, the system has all the information needed to
generate the units that will represent the ontology, where each class and property
will rise a different unit. Those elements are available in the symbol table, so
the mapping engine must walk through it, and for every item generate a unit
according with the structure discussed in section 3.1.</p>
      <sec id="sec-3-1">
        <title>4 http://expat.sourceforge.net/</title>
        <p>Compiling and loading the units: In Prolog/CX, an unit must first be
compiled and loaded before one can execute its predicates. This means the system,
after parsing an ontology and generating the units, must compile and load the
Prolog file that contains each unit. This is achieved using the dynamic loading
of Prolog/CX. Compiling and loading the units represents the last step of the
whole core system process, which starts by parsing the ontology, then the name
analysis, unit generation, and finally the compilation and loading of the units.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>A SPARQL agent in CxLP</title>
      <p>
        SPARQL is a Candidate Recommendation for a RDF query language [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. It
is under continued development towards becoming the standard query language
for the semantic web [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] and although it is mainly used to query RDF graphs, it
can also be used to query an RDF Schema or OWL ontology on the individual
and properties level.
      </p>
      <p>
        The developed system is using SPARQL to query an ontology, allowing access
to properties and resulting in individuals and property values and follows the
specifications of the language defined in [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] and the results are returned in XML,
the format of which is specified in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. The parser constructs a Prolog/CX context
representing the query; this context is then activated by sending a message to
calculate the output and display the resulting XML form. This specification
allows our system to be easily made available trough a web service.
      </p>
      <p>SPARQL has 4 types of queries: select, ask, construct and describe. The
select query is used to retrieve the values of the properties and individuals. Ask
simply returns a boolean answer depending on the veracity of the query. The
construct and describe are not currently implemented as they would return
data as RDF graphs.</p>
      <p>The following sections briefly describe the SPARQL query language, the
resolution of queries and the XML output of the system.</p>
      <p>SPARQL and mapping examples The mapping process (SPARQL parser)
transforms a SPARQL query into a Prolog/CX context. The execution of this
context will bind the variables present in the query with the results.</p>
      <p>The context has a similar structure to the SPARQL query, consisting of the
following parts, each of which being a parametrized unit:
prefix indicates the default prefix;
from specifies the RDF dataset to query;
select lists the variables that should be present in the output;
where restriction conditions;
Modifiers if present, these modifiers will change the number of results (limit
and offset) and/or their order (order by).</p>
      <p>The parser receives as input a SPARQL query and returns the context to be
executed show in Figure 3.
1 [ all,
2 where([set([triple(A,hasFlavor,B),
3 triple(A,hasBody,C) ])]),
4 select([flavor=B,body=C]),
5 vars([flavor=B,body=C,t=A]),
6 defs ]
Query resolution system: The query resolution is triggered by evaluating
the goal item in the context returned by the mapping process. This is akin to
sending the message item to an object. The core unit in this process is the unit
triple/1 which is responsible for instantiating the variables in the query by
accessing the internal representation of the ontology.</p>
      <p>The Modifiers will alter the query results, their order or number. If no
modifiers are present in the query the unit all will be included in the context meaning
that all the possible bindings will be returned.</p>
      <p>Also, currently, the from clause has no effect since the instantiation is done
with an already loaded ontology.</p>
      <p>XML output: The output of the SPARQL query execution is an XML
document with a sparql element. This element has then two sub-elements: the head
element and the results element (always shown in this order).</p>
      <p>The first element for a select query is a list of all the variable names present
in the SPARQL query. For an ask query (that only returns a boolean) no
elements are present. The second element (results) is a list of result elements.
The result element has two boolean attributes: ordered and distinct, that are
always specified. They indicate, respectively, if the list of results is ordered and
if the elements are all different. Its value is defined by the presence or absence
of the modifiers distinct and order by in the SPARQL query.
5</p>
    </sec>
    <sec id="sec-5">
      <title>Mapping Prolog to SPARQL Queries</title>
      <p>The above described system is a local ontology mapping engine that aims for the
creation of a powerful logic layer over ontologies. Access to this system provides
a way for reason over local and previous loaded ontologies by means of logic
programming. However, that work is meant to be viewed as the foundation of
a center system in where it can be appended and implemented different entry
and exit points for data access. One possibility is the SPARQL back end
presented in this Section. The implemented back end engine aims to transparently
merge the reasoning of the system internal knowledge base with external
ontologies available from third parties by means of the SPARQL query language. To
achieve this, it was developed a back end that provides functions for
communicating with web SPARQL agents for ontology querying purposes. It provides
the system with the ability to pass a SPARQL query to an arbitrary SPARQL
web agent and get the solution, encapsulating the results as bindings for logic
variables.</p>
      <p>
        Although the back-end can be viewed as a single independent component of
our work, we wanted it to be integrated in a manner that it would allow a
programmer to reason over external and internal ontologies using the same query
syntax and declarative context mechanics as the main mapping and internal
reasoning. Nevertheless, there exists additional information that is needed to be
addressed at the external agent such as the url of the agent or the data format of
the response. XML Armyknife agent [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] is used throughout this section to
illustrate the back-end functionality. To ensure communication with external agents,
the SPARQL protocol for web agents communication [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] was implemented and
followed. This W3C Candidate Recommendation describes means of conveying
SPARQL queries from query clients to a SPARQL query processing service and
returning the query results to the requesting entity.
      </p>
      <p>
        Prolog/CX to SPARQL mapping: A SPARQL query in the back-end
environment is a Prolog/CX context execution similar to the ones defined by the
main mapping engine when reasoning over a loaded ontology. However, its
execution and syntax is slightly different as there is no connection between what
is included in the context execution and whatever data is loaded into the main
engine of the system. To illustrate how the back-end works, lets introduce the
wine ontology . 5 This ontology defines classes, properties and individuals and
with SPARQL, it is possible to query for RDF triples sets. Figure 4 illustrates
a query targeting the xmlarmyknife.org [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] SPARQL agent, and consequently
the first returned solution.
1 ?-sparql(’http://xmlarmyknife.org/api/rdf/sparql/’) /&gt; hasColor(COLOR):&gt;
2 hasMaker(MAKER) :&gt; item(I).
3
4 COLOR = ’http://www.w3.org/2001/sw/WebOnt/guide-src/wine#White’
5 I = ’http://www.w3.org/2001/sw/WebOnt/guide-src/wine#SelaksIceWine’
6 MAKER = ’http://www.w3.org/2001/sw/WebOnt/guide-src/wine#Selaks’ ?
      </p>
      <p>Fig. 4. Back-end Prolog to SPARQL query</p>
      <sec id="sec-5-1">
        <title>5 http://www.w3.org/TR/owl-guide/wine.rdf</title>
        <p>At the left side of the main operator "/&gt;" it is specified the external agent
and at the right side the goals and restrictions of the query. The triples are
represented by the union of each property term of the right side and the item
term, which represents the subject of the triple. This means a context goal
like /&gt; proprety(VALUE) :&gt; item(SUBJ) represents the triple (SUBJ, prop,
VALUE). The above query asks for all the individuals that have the properties
hasColor and hasMaker and what are their values. This happens because all
the arguments of the properties and subject are unbound Prolog variables. To
state a value in the query and therefore apply a restriction to the solution, one
would write a Prolog atom value instead. Ather possibility is asking for the
properties of some individuals, which can be done adding where(PROP, VALUE),
where both arguments can be either a Prolog unbound variable or a Prolog atom.
Communication and query solutions: The execution of a back-end query
can be described as a three step process. The first is the process of mapping a
Prolog/CX query to a SPARQL. The query originates the following SPARQL
query: ‘‘SELECT ?id ?hasMaker ?hasColor WHERE ?id :hasMaker ?hasMaker.
?id :hasColor ?hasColor.’’.</p>
        <p>
          After generating the SPARQL query, the back-end will start the
communication process with the external agent. This includes validating the Web service,
sending the query and receiving the response, according to the W3C SPARQL
Protocol for RDF document [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ]. This can be considered the second step of
the back-end query execution. The third and final step consists of parsing the
response and retrieving the solution to the query. What is received from the
external agent is an XML document that follows the specification described in
the SPARQL Query Results XML Format [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ]. This file, which contains all the
existing solutions for the query, is then parsed and converted in a list. Finally,
the back-end will provide each logic solution to the query, one at the time, via
its backtracking mechanism.
        </p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>6 Initial Assessment and Conclusions</title>
      <p>Our implementation provides an representation abstraction layer for web
ontologies that can be accessed by logic programs. As the Semantic Web is a relatively
recent research topic, the technology we used is still undergoing active
development and constant change. As expected, the lack of standards at this early
stage poses a problem for which no easy solution exists. We did have to make a
decision about the adoption of external representation and query languages and
this pair ended up being OWL and SPARQL.</p>
      <p>More importantly, SPARQL and OWL have been shown to be suitable
languages in the scope of our work: to build a working base system which
demonstrates how Contextual Logic Programming can be used to represent and query
ontologies in a simple yet powerful way.</p>
      <p>Future Work As of this writing, the system is still undergoing development,
proper benchmarks still need to be deployed, namely comparisons with other
ontology representation and reasoning systems as well as SPARQL
implementations. Our goal will include the comparison of computations performed on
different representation schemes, for instance Prolog internal knowledge base,
an external relational database or another SPARQL agent. The initial results
are encouraging, as the performance figures appear to be competitive, we shall
report on these in another article.</p>
      <p>
        We illustrated how our representation can be used to develop Semantic Web
agents by introducing what we called the front-end and the CxLP back-end.
However, there are aspects of other systems that may benefit from the ability to
query SPARQL sources: we are presently working on integrating the SPARQL
back-end into the ISCO [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] system.
      </p>
      <p>This work is the first approach to represent an ontology using CxLP.
Currently the formal semantics of OWL DL is not fully represented and should be
a focus of research as the study and implementation of the existing reasoning
algorithms for OWL DL.</p>
      <p>The implemented SPARQL agent currently does not cover the full
specification. Although full SPARQL language support is not the intended objective, we
are working towards extending it.</p>
      <p>Another important goal is to provide the core with capabilities to work with
several ontologies at a time. Although it is not relevant for the purpose of this
work, it is an essential feature for any Semantic Web application software.</p>
      <p>Also, currently, the developed system only allows querying the loaded
ontologies. We aim to allow for some form of reasoning over partially known ontologies.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>Salvador</given-names>
            <surname>Abreu</surname>
          </string-name>
          and
          <string-name>
            <given-names>Daniel</given-names>
            <surname>Diaz</surname>
          </string-name>
          .
          <article-title>Objective: in Minimum Context</article-title>
          . In Catuscia Palamidessi, editor,
          <source>Logic Programming, 19th International Conference, ICLP 2003</source>
          , Mumbai, India, December 9-
          <issue>13</issue>
          ,
          <year>2003</year>
          , Proceedings, volume
          <volume>2916</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>128</fpage>
          -
          <lpage>147</lpage>
          . Springer-Verlag,
          <year>2003</year>
          . ISBN 3-540- 20642-6.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>Salvador</given-names>
            <surname>Abreu</surname>
          </string-name>
          and V´ıtor Nogueira.
          <article-title>Using a Logic Programming Language with Persistence and Contexts</article-title>
          . In Masanobu Umeda and Armin Wolf, editors,
          <source>Declarative Programming for Knowledge Management</source>
          , volume
          <volume>4369</volume>
          <source>of LNCS</source>
          , Fukuoka, Japan,
          <year>2006</year>
          . Springer.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>Grigoris</given-names>
            <surname>Antoniou</surname>
          </string-name>
          and Frank van Harmelen.
          <article-title>A Semantic Web Primer</article-title>
          . The MIT Press,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>D.</given-names>
            <surname>Beckett</surname>
          </string-name>
          and
          <string-name>
            <surname>J. Broekstra. SPARQL</surname>
          </string-name>
          <article-title>Query Results XML Format. W3C recommendation, W3C</article-title>
          ,
          <year>April 2006</year>
          . http://www.w3.org/TR/rdf-sparql-XMLres/.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>T.</given-names>
            <surname>Berners-Lee</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Hendler</surname>
          </string-name>
          , and
          <string-name>
            <surname>O. Lassila.</surname>
          </string-name>
          <article-title>The semantic Web</article-title>
          .
          <source>Scientific American</source>
          ,
          <volume>284</volume>
          (
          <issue>5</issue>
          ),
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6. DARPA. http://www.daml.org/.
          <source>DAML+OIL, 3 February</source>
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>M.</given-names>
            <surname>Dean</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Schreiber</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Bechhofer</surname>
          </string-name>
          , Frank van Harmelen,
          <string-name>
            <given-names>J.</given-names>
            <surname>Hendler</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            <surname>Horrocks</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. L.</given-names>
            <surname>McGuinness</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. F.</given-names>
            <surname>Patel-Schneider</surname>
          </string-name>
          , and
          <string-name>
            <given-names>L. A.</given-names>
            <surname>Stein</surname>
          </string-name>
          .
          <article-title>OWL web ontology language reference</article-title>
          .
          <source>W3C recommendation, W3C</source>
          ,
          <year>Feb 2004</year>
          . http://www.w3.org/TR/owl-ref/.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>Leigh</given-names>
            <surname>Dodds. XML Army</surname>
          </string-name>
          <article-title>Knife</article-title>
          . http://xmlarmyknife.org/api/rdf/sparql/query, 5
          <year>December 2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>Tim</given-names>
            <surname>Furche</surname>
          </string-name>
          , Benedikt Linse, Fran¸cois Bry, Dimitris Plexousakis, and
          <string-name>
            <given-names>Georg</given-names>
            <surname>Gottlob</surname>
          </string-name>
          .
          <article-title>Rdf querying: Language constructs and evaluation methods compared</article-title>
          . In Pedro Barahona, Fran¸cois Bry, Enrico Franconi, Nicola Henze, and Ulrike Sattler, editors,
          <source>Reasoning Web</source>
          , volume
          <volume>4126</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>1</fpage>
          -
          <lpage>52</lpage>
          . Springer,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <given-names>Frank</given-names>
            <surname>Manola</surname>
          </string-name>
          and
          <string-name>
            <given-names>Eric</given-names>
            <surname>Miller</surname>
          </string-name>
          .
          <article-title>Rdf primer</article-title>
          .
          <source>W3C Recommendation</source>
          , World Wide Web Consortium,
          <year>February 2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Deborah L. McGuinness</surname>
          </string-name>
          and Frank van Harmelen.
          <article-title>OWL Web Ontology Language Overview</article-title>
          . W3C Recommendation, World Wide Web Consortium,
          <year>February 2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Eric</surname>
          </string-name>
          <article-title>Prud'hommeaux and Andy Seaborne. SPARQL Query Language for RDF</article-title>
          .
          <source>Technical report, W3C</source>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13. W3C.
          <article-title>SPARQL Protocol For RDF</article-title>
          . http://www.w3.org/TR/rdf-sparql-protocol/, 6
          <string-name>
            <surname>October</surname>
          </string-name>
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>