<!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>Divide et Impera: Metareasoning for Large Ontologies</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Dmitry Tsarkov</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ignazio Palmisano</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>University of Manchester, School of Computer Science</institution>
          ,
          <addr-line>Manchester</addr-line>
          ,
          <country country="UK">UK</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Ontologies have the nasty habit of growing in size and expressivity until all reasoners are at a loss to treat them in reasonable time. While it is widely known that the worst case complexity for OWL 2 DL reasoning is double exponential in time, but in fact most ontologies tend to be well behaved in practice, it is less well known that any ontology, left to itself, will grow until the worst OWL constructs gang up together and stop any reasoner from providing answers fast. We present a brand new idea to tackle this issue, by using a metareasoner which leverages best of breed reasoners and modularisation techniques to prevent the worst side e ects of growing ontologies and keep query answering performance to its best. In our approach, each query will be answered by using only part of the ontology, and the best reasoner for the query will be selected on the basis of the features of this ontology portion, which is built using modularisation and/or atomic decomposition. We show the performances of an implementation of this approach. Our Chainsaw metareasoner is not designed to deal with small and inexpressive ontologies, for which a regular reasoner is more than adequate. It, instead, deals with large, complex and unwieldy ontologies, for which better solutions are not (yet) available.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>As it is well known to ontology engineers, ontologies become harder to manage,
in terms of understanding them and reasoning with them, in a way which is,
unfortunately, not proportional to the increase of their size. It is often the case
that a small number of changes makes an ontology much harder for a reasoner
to process. However, keeping ontologies small and simple is not always possible,
because they might fail to satisfy the application requirements. On the other
hand, it is possible for a small ontology to be hard to reason about.</p>
      <p>How to best divide an ontology into smaller portions according to the needs
of the task at hand is still an open problem; the rule of thumb that many
approaches follow is that, when in doubt, one should try to keep the ontology
as small as possible.</p>
      <p>This is the main intuitive reason for modularization, i.e., a set of techniques
for splitting ontologies into fragments without loss of entailments for a given set
of terms. To date, however, not many tools provide either user support for these
techniques, nor leverage them for reasoning tasks.</p>
      <p>Chainsaw, our metareasoner implementation prototype, exploits the idea in
the following way. For every inference query it creates a module of the ontology
that is then used to answer the query. The module is created in a way that
guarantees the result of the query should be the same as for the whole ontology,
i.e., there is no loss of entailments.</p>
      <p>
        Chainsaw is designed as a wrapper for other reasoners. It uses reasoner
factories to build reasoners on modules of its root ontology, and will integrate
the ability to choose the reasoner best suited to each reasoning task on the basis
of the module characteristics, such as size and/or expressivity. The most obvious
characteristic is an OWL 2 pro le of the module. E.g., if the pro le is OWL 2
EL then some e cient EL reasoner, like ELK [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], could be used to achieve the
best performance.
      </p>
      <p>The advantages of using modules instead of whole ontologies inside a reasoner
reside in the simpli cation of reasoning. The complexity of reasoning in OWL 2
DL is N2EXPTIME-hard on the size of the input, therefore being able to divide
the ontology is likely to produce performance improvements orders of magnitude
larger than the relative reduction in size.</p>
      <p>Moreover, using modules inside the reasoner can help the knowledge engineer
to concentrate on modelling the knowledge instead of worrying about the
language pitfalls, since the extra complexity can be tackled in a transparent way.
This, however, does not mean that complexity is no longer an issue.
Modularisation is not a silver bullet for reasoning, as in some cases the module needed to
answer a query might still include most of the ontology.</p>
      <p>Another advantage of Chainsaw architecture is that it is able to use di erent
OWL reasoners for each query and module; this allows for choosing the reasoner
best suited for the OWL 2 pro le of a speci c module. In those cases where it
is not clear which reasoner is best, it is possible to start more than one reasoner
and simply wait for the rst one to nish the task - this might require more
resources, but statistical records can be kept to improve future choices. This
functionality, however, is not yet implemented.</p>
      <p>The reverse of the medal is that, for simple ontologies, Chainsaw is likely
to be slower than most of the reasoners it uses; this derives from the overhead
needed to manage multiple reasoners and modularization of the ontology itself.
Our objective, in this paper, is to illustrate an approach that can squeeze some
answers out of ontologies that are too troublesome for a single traditional
reasoner to handle.</p>
      <p>In Section 2, we describe brie y the theory behind Atomic Decomposition
and Modularization, which are the building blocks of this approach; in Section 3
we describe the implementation details, trade-o s and strategies adopted, and in
Section 4 we present some preliminary results on the e ectiveness of Chainsaw.</p>
      <p>Atomic Decomposition and Modularization
We assume that the reader is familiar with the notion of OWL 2 axiom, ontology
and entailments. An entity is a named element of the signature of an ontology.
For an axiom we denote e a signature of that axiom, i.e. a set of all entities
in . The same notation is also used for the set of axioms.</p>
      <p>De nition 1 (Query). Let O be an ontology. An axiom is called an
entailment in O if O j= . A check whether an axiom is an entailment in O is an
entailment query. A subclass (superclass, sameclass) query for a class C in an
ontology O is to determine a set of classes D 2 Oe such that O j= C v D (resp.
O j= D v C; O j= C = D). A hierarchical query is either subclass, superclass,
or sameclass query.
e
De nition 2 (Module). Let O be an ontology and be a signature. A subset
M of the ontology is called module of O w.r.t. if for every axiom such that
, M j= () O j= .</p>
      <p>
        One way to build modules is through the use of axiom locality. An axiom
is called (?-) local w.r.t. a signature if replacing all entities not in with
? makes the axiom a tautology. This syntactic approximation of locality was
proposed in [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] and provides a basis for most of the modern modularity
algorithms [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
      </p>
      <p>
        This modularisation algorithm is used to create an atomic decomposition of
an ontology, which can then be viewed as a compact representation of all the
modules in it [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
      </p>
      <p>De nition 3 (Atomic Decomposition). A set of axioms A is an atom of the
ontology O, if for every module M of O, either A M or A \ M = ;. An atom
A is dependent on B (written B 4 A) if for every module M if A M then
B M . An Atomic Decomposition of an ontology O is a graph G = hS; 4i,
where S is the set of all atoms of O.</p>
      <p>The dependency closure of an atom, computed by following its dependencies,
constitutes a module; this module can then be used to answer queries about the
terms contained in this closure.</p>
      <p>However, for a hierarchical query the signature would contain a single entity,
but the answer set would contain entities that might not be in the module built
for that signature.</p>
      <p>
        In order to address this problem, we use Labelled Atomic Decomposition
(LAD), as described in [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
      </p>
      <p>De nition 4 (Labelled Atomic Decomposition). A Labelled Atomic
Decomposition is a tuple LAD = hS; 4; Li, where G = hS; 4i is an atomic
decomposition and L is a labelling function that maps S into a set of labels. A
top-level labelling maps an atom A to a (possibly empty) subset of its signature
L(A) = Ae n (SB4A L(B)).</p>
      <p>Proposition 1. Let LAD = hS; 4; Li be a top-level labelled atomic
decomposition of an ontology O. Then for all named classes x; y from Oe the following
holds:
1. If O j= x v y, then 9A; B 2 S : x 2 L(A); y 2 L(B) and B 4 A;
:
2. If O j= x = y, then 9A 2 S : x 2 L(A) and y 2 L(A).</p>
      <p>
        Proof. 1) From [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], Proposition 11, O j= x v y i for the module M of O w.r.t.
signature fxg holds M j= x v y. Assume O j= x v y. Then M is non-empty
and x 2 Mf. Thus there is an atom A 2 S such that x 2 L(A). Due to the
atomic decomposition properties, the union of an atom together with all the
dependent atoms forms a module. So let MA = SB4A B be such a module. This
module also has x in its signature, so M MA. But by the de nition of the
top-level labelling MA is the smallest module that contains x in the signature;
so M = MA. This also means that there is only one atom which label contains x.
Now, using the results from [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], we can conclude that y 2 MfA; that means, that
one of the atoms B 2 MA is labelled with y. But all such atoms are dependencies
of A, i.e. B 4 A.
      </p>
      <p>:
2) Assume O j= x = y, which is equivalent to O j= x v y and O j= x v
y. From Case 1) this means that there are atoms A; A0; B; B0 such that x 2
L(A); x 2 L(A0); y 2 L(B); y 2 L(B0) and B0 4 A; A0 4 B. As shown in Case 1),
there is only one atom that contains x (resp. y) in its label, so A = A0; B = B0
and B 4 A; A 4 B. The latter is possible only in case A = B.
tu</p>
      <p>This proposition provides a way to separate parts of the ontologies necessary
to answer hierarchical queries about named classes. Indeed, it is enough to label
the atomic decomposition with a top-level labelling and the modules for nding
a subsumption relation could easily be found. This approach is orthogonal to
a modularity-based one: while the latter deals easily with the entailment-like
queries, the former provides a way to describe an ontology subset suitable to
answer hierarchical queries.
3</p>
    </sec>
    <sec id="sec-2">
      <title>Implementation of Chainsaw</title>
      <p>The essence of Chainsaw is mirrored in the paper's title. Unlike other reasoners,
which usually do the classi cation of the ontology before any query is asked,
Chainsaw deals with requests in a lazy way, leaving classi cation to the delegate
reasoners, which are usually at work on a small subset of the ontology.</p>
      <p>For each query received, Chainsaw tries to keep the subset of the ontology
needed to answer as small as possible without sacri cing completeness. This is
achieved using di erent strategies according to the query; i.e., it is not possible
to reduce the size of the ontology when checking for its consistency; however,
other queries, as detailed in Section 2, can be answered by using modules built
via LAD or locality based modules. More in detail, querying about superclasses
of a term will only need the dependency closures of the top-level atoms for that
term for the answers to be computed; the opposite is true for subclass requests.</p>
      <p>
        During preprocessing of the ontology, a LAD of that ontology is built,
using the Atomic Decomposition algorithm available in FaCT++ [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], and both
dependency closure and its reverse are cached for every class name. For every
query the module is constructed: via modularisation algorithm for entailment
queries and via LAD for hierarchical queries. Then a suitable reasoner is created
for that module, and the query is delegated to it. The answer then is returned
to a user.
      </p>
      <p>A naive strategy for answering any query would consist of:
{ Build a module M for the query
{ Start a new reasoner R on M
{ Answer the original query using R</p>
      <p>However, it is easy to nd possible optimizations to this strategy.</p>
      <p>First, this approach creates a new reasoner for each query; if two queries with
the same signature are asked, two (identical) modules would be built and two
reasoners would be initialized, while just keeping the same reasoner would be
enough.</p>
      <p>
        Moreover, while the number of possible signatures for a query is exponential
in the size of the ontology signature (not counting possible fresh entities used
in the query), the number of distinct modules that can be computed against a
given ontology with these signatures is much smaller [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. This means that, given
a module, there is a good chance that it can be reused for answering queries
with a slightly di erent signature; therefore, the same reasoner can be used to
answer more than one speci c query.
      </p>
      <p>Therefore, a trade-o exists between reducing the size of the module to be
reasoned upon, the complexity of determining such a module and the cost of
starting a new reasoner for each query; to this, one must add the memory
requirements of keeping a large module and reasoner cache.</p>
      <p>Our approach in Chainsaw is to use a cache for modules and a cache for
reasoners, both limited in the number of cached elements, and ordered as LRU
caches; this has shown to perform rather well in some of our tests, reported in
Section 4.1, where around one hundred thousand entailment checks against a
large ontology have been satis ed using approximately 100 simultaneous
reasoners, some of which were reused up to 20 times before being discarded. Similar
results have been obtained when caching the modules to avoid rebuilding the
same module for the same signature.
3.1</p>
      <sec id="sec-2-1">
        <title>Future Improvements</title>
        <p>There is one more optimization that was not implemented: if a module is included
in another module, the larger module can be used in place of the smaller one.
However, this presents a slippery slope problem: at what level do we stop using
the next containing module, since we do not have an easy way to predict where
this series of modules will become really hard to reason with?</p>
        <p>Determining the containment is also an expensive operation; for simple
modules, this operation might cost more than the actual reasoning required. The
sweet spot for this optimization is a situation in which many fairly complex
modules share a large number of axioms and are used often, and their union
does not produce a module which pushes the reasoner's envelope. Using the
union would provide for a good boost in performance and save memory as well,
but at the time of writing we do not have an e ective way of nding such spots.</p>
        <p>It seems that atomic decomposition could provide relevant information for
this task; an educated guess would be that such sweet spots reside near the parts
of the dependency graph where a number of edges converge, but, to the best of
our knowledge, there is no strong evidence in favor of this correlation. Future
work might well explore this area.</p>
        <p>Another improvement is to add a strategy to choose the best suited reasoner
for a given module; such a strategy would have to take into account the known
weak spots and strong points of each reasoner, as well as the characteristics of
the module and of the query, such as size and OWL pro le, or whether the
query requires classi cation of the module or not. Where this is not su cient,
statistical records could be kept in order to create evidence based preferences
and improve the strategy over time.
3.2</p>
      </sec>
      <sec id="sec-2-2">
        <title>Integration in Existing Toolchains</title>
        <p>Chainsaw implements the OWLReasoner interface de ned in the OWL API1;
it is therefore easy to add it to existing applications, such as ontology editors,
which already use some of the existing implementations of OWLReasoner.
4</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Empirical Evaluation</title>
      <p>To check the performance of Chainsaw we ran several tests with it. For the
tests we used a MacBooc Pro laptop with 2.66 GHz i7 processor and 8Gb of
memory.</p>
      <p>We use Chainsaw with FaCT++ v 1.5.3 as a delegate reasoner, and
compare the results with the same version of FaCT++.</p>
      <p>As a test suite we took 57 of the BioPortal ontologies2. For every ontology we
perform a set of classes, properties and individuals tests, i.e., for every class we
checked its satis ability, ask for its instances and for sub-, super- and equivalent
classes. Moreover, for every class we took its subclass C and superclass D, and
ask whether C is a subclass of D. For every individual we ask the sets of its types,
and for same and di erent individuals. For every property, its sub-, super, and
equivalent properties were queried, together with property range and domain.</p>
      <p>The test results are presented in a few tables below. All the tables have the
same format: the name of the method called, total number of calls for all tests,
and the total time spend in that method for Chainsaw and FaCT++, given
in milliseconds.</p>
      <sec id="sec-3-1">
        <title>1 http://owlapi.sourceforge.net 2 http://bioportal.bioontology.org</title>
        <p>Table 1 contains operations that are done only once for every ontology. First
every reasoner is initialised, then it is asked to precompute inferences (in our
tests reasoners were asked to precompute a class hierarchy). In the next step the
consistency of an ontology is checked. After that, we asked reasoners whether
there were any unsatis able classes.</p>
        <p>It is easy to see that the initialisation of Chainsaw reasoner took much
more time than the one for FaCT++. That overhead comes from the necessity
of creating LAD for each ontology. Interesting to see, however, how the time
is distributed between the precomputeInferences and isConsistent steps. In the
case of Chainsaw nothing is done during the precomputing step, and there is
a need to do work for checking the ontology consistency. On the other hand,
FaCT++ tests consistency during classi cation, so answering that query costs
nothing.</p>
        <p>The data on individuals is presented in the Table 2. There were only 3
ontologies with individuals in our test suite, and the time needed for individual-related
operations is similar for both reasoners, with the exception of getInstances case,
in which FaCT++ behaves much better than Chainsaw.</p>
        <p>However, the discerning reader will have noticed that there is a number of
ontologies not containing any individual; yet, the reasoners are taking some time,
in the case of Chainsaw quite some time, to answer the query with an empty
set. This points to possible optimisations for both Chainsaw and FaCT++
itself.</p>
        <p>Class-related queries are presented in the Table 3. Note that the hierarchical
questions are faster for Chainsaw; this is mainly because there is a simple way
to check them, based on LAD. Satis ability and entailment queries, however,
took more time in Chainsaw than in FaCT++; here the overhead to produce
modules and to create a reasoner starts play a negative role.</p>
        <p>Method
getEquivalentClasses
getSubClasses
getSuperClasses
isSatis able
isEntailed
Method
getDisjointDataProperties
getEquivalentDataProperties
getDataPropertyDomains
getSubDataProperties
getSuperDataProperties
getDisjointObjectProperties
getEquivalentObjectProperties
getInverseObjectProperties
getObjectPropertyDomains
getObjectPropertyRanges
getSubObjectProperties
getSuperObjectProperties
getObjectPropertyValues
getDataPropertyValues</p>
        <p>Chainsaw
2,012
7,433
5,059
309,067
661,707
Number of calls
287
287
574
574
574
662
662
662
1324
1324
1324
1324
3907
3960</p>
        <p>Queries about properties are presented in the Table 4. Besides a few queries
(like getSubObjectProperties), the two reasoners appear to behave similarly on
that data, i.e. the di erence, comparing with Tables 2 and 3, is much smaller.
4.1</p>
        <p>Genesis of Chainsaw and OBI Prototype Results
The idea for Chainsaw was born of a concrete need: experiments needed to be
run to prove a theory, and one of the ontologies chosen for the task was the latest
version of the OBI ontology3.</p>
        <p>The task of Knowledge Exploration is to explore the structure of a model for
a given class expression. In particular, the tableau algorithm proves the satis
ability of a class by providing a tree-shaped model of that class. The knowledge
exploration allows one to access that model, i.e. to know the form of the model
as well as the labels of the nodes and edges of the model's tree.</p>
        <p>These experiments are based on an extension to OWLReasoner that was
designed to allow a developer to gain information about the completion graph that
a tableaux reasoner builds for classes and properties; this interface, available in</p>
      </sec>
      <sec id="sec-3-2">
        <title>3 obi-ontology.org/</title>
        <p>the OWL API as OWLKnowledgeExplorerReasoner, is, at the time of writing,
only implemented by FaCT++, so said experiments had to rely on it to be
executed.</p>
        <p>Unfortunately, the latest version of OBI is not easily managed by FaCT++;
classifying the ontology takes, in fact, four hours and approximatively six
gigabytes of memory to reach 97%. Our tests needed to query for the subsumption
hierarchy of almost all classes declared and used in OBI, and to check whether a
given class expression would subsume said classes; this amounted to little more
than a hundred thousand subsumption tests.</p>
        <p>Using the same idea we illustrated as the basis for Chainsaw, we were able
to write code that would extract a module for the query, classify it and answer
the query, using FaCT++; the maximum amount of time needed to classify one
of these modules was ve seconds, and the memory used for each classi cation
was proportionally small; we were able to use caching of modules and reasoners
e ectively, and the whole experiment could be run in under four hours, using
approximatively three gigabytes of RAM.</p>
        <p>These (highly experimental) results are reported in Table 4.1. As is it easy
to see, for this ontology Chainsaw is much better than FaCT++, as the
latter could not provide any results in a given time frame. As we mentioned in
Section 1, this is the kind of task for which Chainsaw was designed.</p>
        <p>Reasoner
FaCT++
Chainsaw</p>
        <p>Classi cation</p>
        <p>time
&gt; 4 hrs</p>
        <p>Total
memory
6 GB
3 GB</p>
        <p>Subsumption
tests</p>
        <p>100,000</p>
        <p>Time</p>
        <p>4 hrs</p>
        <p>Tests per
second
7</p>
        <p>Reasoner
instances
1
300
In this paper, we presented an approach to the use of modularization and atomic
decomposition to improve scalability for reasoners, and Chainsaw, a prototype
reasoner implementation for this approach. We showed the potential advantages
of this approach in the face of increasingly complex and large ontologies, at the
expense of pure performance on simple ontologies.</p>
        <p>We provided an overview of what trade-o s in terms of memory and speed are
involved in our approach, and how our prototype copes with them, presenting a
few test results on BioPortal and OBI ontologies, and hinted at future
developments and optimizations that have emerged during the prototype creation.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>Cuenca</given-names>
            <surname>Grau</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            ,
            <surname>Horrocks</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            ,
            <surname>Kazakov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            ,
            <surname>Sattler</surname>
          </string-name>
          ,
          <string-name>
            <surname>U.</surname>
          </string-name>
          :
          <article-title>Modular reuse of ontologies: Theory and practice</article-title>
          .
          <source>JAIR 31</source>
          ,
          <issue>273</issue>
          {
          <fpage>318</fpage>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>Del</given-names>
            <surname>Vescovo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            ,
            <surname>Parsia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            ,
            <surname>Sattler</surname>
          </string-name>
          ,
          <string-name>
            <given-names>U.</given-names>
            ,
            <surname>Schneider</surname>
          </string-name>
          ,
          <string-name>
            <surname>T.</surname>
          </string-name>
          :
          <article-title>The modular structure of an ontology: Atomic decomposition</article-title>
          .
          <source>In: Proc. of IJCAI-11</source>
          . pp.
          <volume>2232</volume>
          {
          <issue>2237</issue>
          (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Grau</surname>
            ,
            <given-names>B.C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Horrocks</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kazakov</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sattler</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          :
          <article-title>Extracting modules from ontologies: A logic-based approach</article-title>
          . In: Stuckenschmidt,
          <string-name>
            <given-names>H.</given-names>
            ,
            <surname>Parent</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            ,
            <surname>Spaccapietra</surname>
          </string-name>
          , S. (eds.)
          <source>Modular Ontologies, Lecture Notes in Computer Science</source>
          , vol.
          <volume>5445</volume>
          , pp.
          <volume>159</volume>
          {
          <fpage>186</fpage>
          . Springer (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Kazakov</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          , Krotzsch,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Simancik</surname>
          </string-name>
          ,
          <string-name>
            <surname>F.</surname>
          </string-name>
          :
          <article-title>Concurrent classi cation of el ontologies</article-title>
          . In: Aroyo,
          <string-name>
            <given-names>L.</given-names>
            ,
            <surname>Welty</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            ,
            <surname>Alani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            ,
            <surname>Taylor</surname>
          </string-name>
          , J.,
          <string-name>
            <surname>Bernstein</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kagal</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Noy</surname>
            ,
            <given-names>N.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Blomqvist</surname>
          </string-name>
          , E. (eds.)
          <source>International Semantic Web Conference (1). Lecture Notes in Computer Science</source>
          , vol.
          <volume>7031</volume>
          , pp.
          <volume>305</volume>
          {
          <fpage>320</fpage>
          . Springer (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Tsarkov</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Horrocks</surname>
          </string-name>
          , I.:
          <article-title>FaCT++ description logic reasoner: System description</article-title>
          .
          <source>Automated Reasoning</source>
          pp.
          <volume>292</volume>
          {
          <issue>297</issue>
          (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Vescovo</surname>
            ,
            <given-names>C.D.:</given-names>
          </string-name>
          <article-title>The modular structure of an ontology: Atomic decomposition towards applications</article-title>
          . In: Rosati,
          <string-name>
            <given-names>R.</given-names>
            ,
            <surname>Rudolph</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            ,
            <surname>Zakharyaschev</surname>
          </string-name>
          , M. (eds.)
          <article-title>Description Logics</article-title>
          .
          <source>CEUR Workshop Proceedings</source>
          , vol.
          <volume>745</volume>
          .
          <string-name>
            <surname>CEUR-WS.org</surname>
          </string-name>
          (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Vescovo</surname>
            ,
            <given-names>C.D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Parsia</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sattler</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schneider</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>The modular structure of an ontology: Atomic decomposition and module count</article-title>
          . In: Kutz,
          <string-name>
            <given-names>O.</given-names>
            ,
            <surname>Schneider</surname>
          </string-name>
          ,
          <string-name>
            <surname>T</surname>
          </string-name>
          . (eds.)
          <source>WoMO. Frontiers in Arti cial Intelligence and Applications</source>
          ,
          <source>Frontiers in Arti cial Intelligence and Applications</source>
          , vol.
          <volume>230</volume>
          , pp.
          <volume>25</volume>
          {
          <fpage>39</fpage>
          . IOS Press (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>