<!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>The Semantic Web takes Wing: Programming Ontologies with Tawny-OWL</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Phillip Lord</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>School of Computing Science</institution>
          ,
          <addr-line>Newcastle University</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>The Tawny-OWL library provides a fully-programmatic environment for ontology building; it enables the use of a rich set of tools for ontology development by recasting development as a form of programming. It is built in Clojure { a modern Lisp dialect, and is backed by the OWL API. Used simply, it has a similar syntax to OWL Manchester syntax, but it provides arbitrary extensibility and abstraction. It builds on existing facilities for Clojure, which provides a rich and modern programming tool chain, for versioning, distributed development, build, testing and continuous integration. In this paper, we describe the library, this environment and the its potential implications for the ontology development process.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        Ontology building remains a di cult and demanding task. Partly this is intrinsic,
but also stems from the tooling. For example, while ontology editors like Protege
[
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] do allow manual ontology development, they are not ideal for automation
or template-driven development; as a result, languages such as OPPL[
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] have
been developed which allow a slightly higher-level of abstraction over the base
OWL axiomatisation. However, they involve a move away from OWL syntax,
which in turn requires integration into which ever environment the developers
are using. There has also been signi cant interest in collaborative development of
ontologies, either using collaborative development tools such as Web-Protege[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ],
or through copy-modify-merge versioning[
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
      </p>
      <p>
        In this work, we1 take an alternative approach. Instead of developing tools
for ontology development, many of which are similar or follow on from software
development tools, we attempt to recast ontology development as a software
engineering problem, and then simply reuse the standard tools that exist for software
engineering. We have achieved this by developing a library, named Tawny OWL,
that at its simplest operates as a domain speci c language for OWL, while still
retaining the full capabilities of a modern programming language with all this
entails. We demonstrate the application of this library to a standard exemplar
- namely the Pizza Ontology[
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], as well as several other scenarios. Finally, we
consider the implications of this approach for enabling collaborative and more
agile forms of ontology development.
1 Plurals are used throughout, and do not indicate multiple authorship.
      </p>
      <p>The Tawny-OWL library is being developed on GitHub (https://github.
com/phillord/tawny-owl); it currently consists of around 3000 lines of code,
and supports OWL2 object and annotation properties.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Requirements</title>
      <p>
        Interaction between OWL and a programming API is not a new idea. For
example, OWL2Perl[
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] allows generation of Perl classes from an OWL Ontology, FuXi
does similar in Python http://code.google.com/p/fuxi/, while the OWL API
allows OWL ontology development in Java[
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. The OWL API, however, is rather
unwieldy for direct ontology development; for example, it has a complex type
hierarchy, indirect instantiation of objects through factories, and a set of change
objects following a command design pattern; while these support one of its
original intended use case { building a GUI { they make direct ontology development
cumbersome. One response to this is Brain[
        <xref ref-type="bibr" rid="ref8 ref9">8,9</xref>
        ], which is a much lighter-weight
facade over the OWL API also implemented in Java. Brain is, e ectively,
typeless as expressions are generated using Strings; the API distinguishes between
OWL class creation (addClass) and retrieval (getClass), throwing exceptions
to indicate an illegal state. While Brain is useful, it is not clear how an
ontology should be structured in Java's object paradigm, and it su ers the major
drawback of Java { an elongated compile-test-debug cycle, something likely to
be problematic for interactive development as the ontology increases in size.
      </p>
      <p>
        For programmatic ontology development, we wanted an interactive and
dynamic environment rather like the R environment for statistics, where the
ontology could be explored, extended and reworked on-the- y. For this reason
we choose to build in Clojure; a modern Lisp derivative with many attractive
features: persistent data structures; specialised mechanisms for state. It su ers
somewhat from being built on the Java Virtual Machine (JVM) { this gives it
a rather slow start-up time. However, in this case, it was a key reason for its
use. Interoperability with the JVM is integrated deeply into Clojure which makes
building on top of the OWL API both possible and convenient; this
interoperability means any feature of the OWL API can be used within tawny, without moving
from the Lisp syntax; so, while tawny does not currently wrap for isntance either
datatype properties, nor ontology explanation code, both are still easily
accessible. Like all lisps, Clojure has three other advantages: rst, it is untyped which,
in common with Brain, in this context, we consider to be an advantage2; second,
it is highly dynamic { almost any aspect of the language can be rede ned at any
time { and it has a full featured read-eval-print-loop (REPL); nally, it has very
little syntax, so libraries can manipulate the look of the language very easily.
Consider, for example, a simple class de nition as shown in Listing1, taken from a
pizza ontology available at https://github.com/phillord/tawny-pizza. The
syntax has been designed after Manchester syntax[
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
2 We do not argue that type systems are bad; just that they are less appropriate in
this environment
      </p>
      <p>
        These de nitions bind a new symbol (Pizza and CheesyPizza) to a OWL-API
Java object. These symbols resolve as a normal Var does in Clojure. Strictly,
this binding is not necessary (and can be avoided if the user wishes), however
this provides the same semantics as Brain's addClass and getClass { classes,
properties, etc must be created before use; a valuable feature protecting against
typing errors[
        <xref ref-type="bibr" rid="ref11">11</xref>
        ].
Here we give a brief introduction to Clojure and its terminology. Like all lisps,
it has a regular syntax consisting of parenthesis delimited (lists), de ning an
expression. The rst element is usually a function, giving lisps a pre x notation.
Elements can be literals, such as strings e.g. "Pizza", symbols e.g. defclass or
keywords e.g. :equivalent. Symbols resolve to their values, keywords resolve to
themselves, and literals are, well, literal. Unlike many languages, these constructs
are directly manipulable in the language itself which combined with macros
enable extension of the language.
3
      </p>
    </sec>
    <sec id="sec-3">
      <title>A Rich Development Environment</title>
      <p>
        There are a dizzying array of ontology development tools available[
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. Probably
the most popular is Protege; while it provides a very rich environment for viewing
and interacting with an ontology, it lacks many features that are present in most
IDEs. For instance, it lacks support for version control or adding to ChangeLogs;
it is not possible to edit documentation along side the ontology; nor to edit
code in other languages when, for instance, driving a build process, or using an
ontology in an application.
      </p>
      <p>
        We have previously attempted to work around this problem by providing
support for Manchester syntax { OMN { within Emacs through omn-mode[
        <xref ref-type="bibr" rid="ref13">13</xref>
        ];
while this provides a richer general-purpose environment, the ontology
environment is comparatively poor. In particular, only syntactic completion is available
and there is no support for documentation look-up beyond le navigation.
Finally, we used Protege (and the OWL API) to check syntax, which required a
complete re-parse of the le, and with relatively poor feedback from Protege
when errors occurred3.
      </p>
      <p>
        With tawny, using a general purpose programming language, a richer
development environment comes nearly for free. In this paper, we describe the use
within Emacs; however, support for Clojure is also available within Eclipse,
IntelliJ, Netbeans and other environments[
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. Compared with direct editing of
OMN les, tawny provides immediate advantages. The use of paren delimiters
makes indentation straight-forward, well-de ned, and well-supported; advanced
tools like paredit ensures that expressions are always balanced. Clojure provides
a REPL, and interaction within this allows more semantic completion of symbols
even when they are not syntactically present in the bu er4, which is common
when using levels of abstraction (Section 4) or external OWL les (Section 8).
Syntax checking is easy, and can be performed on bu er, marked region or
speci c expression. New entities can be added or removed from the ontology
on-they without reloading the entire ontology, enabling progressive development. We
have also provided support for documentation look-up of OWL entities, hooked
into Clojure's native documentation facility so should function within all
development environments. We do not currently provide a rich environment for
browsing ontologies, except at the code level; however, Protege works well here,
reloading OWL les when they are changed underneath it. Similarly, omn-mode
can be used to view individual generated OMN les.
4
      </p>
    </sec>
    <sec id="sec-4">
      <title>Supporting Higher Levels of Abstraction</title>
      <p>
        Most ontologies include a certain amount of \boilerplate" code, where many
classes follow a similar pattern. Tools such as OPPL were built speci cally to
address this issue; with tawny, the use of a full programming language, makes
the use of levels of abstraction above that in OWL straight-forward. We have
used this in many areas of tawny; at its simplest, by providing convenience
macros. For example, it is common-place to de ne many subclasses for a single
superclass; using OMN each subclass must describe its superclass. Within tawny,
a dynamically-scoped block can be used as shown in Listing 3. As shown here,
disjoint axioms can also be added[
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]; and, not used here, covering axioms[
        <xref ref-type="bibr" rid="ref16">16</xref>
        ].
The equivalent OMN generated by these expressions is also shown in Listing 4.
( a s - d i s j o i n t - s u b c l a s s e s
      </p>
      <p>PizzaBase
( defclass T h i n A n d C r i s p y B a s e</p>
      <p>: an no ta ti on ( label " B a s e F i n a E Q u e b r a d i c a " " pt " ))
3 This is not a criticism of the Protege interface; it was not designed to operate on
hand-edited les
4 We follow Emacs terminology here { a bu er is a le being edited
( defclass DeepPanBase
: annotation ( label</p>
      <p>" BaseEspessa " "pt" )))</p>
      <sec id="sec-4-1">
        <title>Listing 3. Subclass Speci cation</title>
        <p>Class : piz : ThinAndCrispyBase</p>
        <p>Annotations :</p>
        <p>rdfs : label " BaseFinaEQuebradica " @pt
SubClassOf :</p>
        <p>piz : PizzaBase
DisjointWith :</p>
        <p>piz : DeepPanBase
Class : piz : DeepPanBase</p>
        <p>Annotations :</p>
        <p>rdfs : label " BaseEspessa "@pt ,
SubClassOf :</p>
        <p>piz : PizzaBase
DisjointWith :
piz : ThinAndCrispyBase</p>
      </sec>
      <sec id="sec-4-2">
        <title>Listing 4. Subclasses in OMN</title>
        <p>It is also possible to add su xes or pre xes to all classes created within a
lexical scope. For example, we can create classes ending in Topping as shown in
Listing 5. While similar functionality could be provided with a GUI, this has the
signi cant advantage that the developers intent remains present in the source;
so subsequent addition of new toppings are more likely to preserve the naming
scheme.
( with-suffix Topping
( defclass GoatsCheese )
( defclass Gorgonzola )
( defclass Mozzarella )
( defclass Parmesan ))</p>
      </sec>
      <sec id="sec-4-3">
        <title>Listing 5. Adding Su xes</title>
        <p>
          Tawny also includes initial support for ontology design patterns; in particular,
we have added explicit support for the value partition[
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]. This generates classes,
disjoints and properties necessary to ful l a pattern, but is represented in tawny
succinctly (Listing 6)
(p/ value-partition
        </p>
        <p>Spiciness
[ Mild</p>
        <p>Medium
Hot ])</p>
      </sec>
      <sec id="sec-4-4">
        <title>Listing 6. A Value Partition</title>
        <p>While some abstractions are generally useful, an important advantage of
a full-programmatic language for OWL is that abstractions can be added to
any ontology including those which are likely to be useful only within a single
ontology. These can de ned as functions or macros in the same le as their
use. For example, within the pizza ontology, Listing 7 generates two pizzas { in
each case the pizza class comes rst, followed by its constituent parts; a closure
axiom is added to each pizza. As well, as being somewhat more concise than
the equivalent OMN, this approach also has the signi cant advantage that it
is possible to change the axiomatisation for all the named pizzas by altering a
single function; this is likely to increase the consistency and maintainability of
ontologies.
( g e n e r a t e - n a m e d - p i z z a
[ M a r g h e r i t a P i z z a M o z z a r e l l a T o p p i n g T o m a t o T o p p i n g ]
[ C a j u n P i z z a M o z z a r e l l a T o p p i n g O n i o n T o p p i n g P e p e r o n a t a T o p p i n g
P r a w n s T o p p i n g T o b a s c o P e p p e r S a u c e T o m a t o T o p p i n g ]</p>
      </sec>
      <sec id="sec-4-5">
        <title>Listing 7. Generating Named Pizzas</title>
        <p>5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Separating Concerns for Di erent Developer Groups</title>
      <p>
        One common requirement in ontology development is a separation of concerns;
di erent contributors to the ontology may need di erent editing environments,
as for instance with RightField or Populous[
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. tawny enables this approach
also; here, we describe how this enables internationalisation. Originally, the pizza
ontology had identi ers in English and Portuguese but, ironically, not Italian.
While it would be possible to have a translator operate directly on a tawny source
le, this is not ideal as they would need to need to embed their translations within
OWL entity de nitions as shown in Listing 3; which is likely to be particularly
troublesome if machine assisted translation is required due to the non-standard
format. We have, therefore added support with the polyglot library. Labels are
stored in a Java properties le (Listing 8) and are loaded using a single Lisp form
(Listing 9). tawny will generate a skeleton resources le, with no translations,
on demand, and reports missing labels to the REPL on loading.
A n c h o v i e s T o p p i n g = Acciughe I n g r e d i e n t i
A r t i c h o k e T o p p i n g = Carciofi I n g r e d i e n t i
A s p a r a g u s T o p p i n g = Asparagi I n g r e d i e n t i
      </p>
      <sec id="sec-5-1">
        <title>Listing 8. Italian Resources</title>
        <p>( tawny . polyglot / p o l y g l o t - l o a d - l a b e l
" pizza / p i z z a l a b e l _ i t . p r o p e r t i e s " " it " )</p>
      </sec>
      <sec id="sec-5-2">
        <title>Listing 9. Loading Multi-Lingual Labels</title>
        <p>Currently, only loading labels is supported in this way, but extending this to
comments or other forms of annotation is possible. While, in this case, we are
loading extra-logical aspects of the ontology from le, it would also be possible
to load logical axioms; for instance, named pizzas (Section 4) could be loaded
from text le, spreadsheet or database.</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Collaborative and Distributed Development</title>
      <p>
        Collaborative development is not a new problem; many software engineering
projects involve many developers, geographically separated, in di erent time
zones, with teams changing over time. Tools for enabling this form of
collaboration are well developed and well supported. Some of these tools are also available
for ontology development; for instance, Web-Protege enables online
collaborative editing. However, use of this tool requires installation of a bespoke Tomcat
based server, nor does it yet support o ine, concurrent modi cation[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
      </p>
      <p>
        Alternatively, the ContentCVS system does support o ine concurrent
modi cation. It uses the notion of structural equivalence for comparison and
resolution of con icts[
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]; the authors argue that an ontology is a set of axioms.
However, as the named suggests, their versioning system mirrors the capabilities
of CVS { a client-server based system, which is now considered archaic.
      </p>
      <p>For tawny, the notion of structural equivalence is not appropriate. With
tawny, the axioms are generated, rather than being source; the source cannot,
therefore, be abstracted to a set of axioms. A single change in the source le,
might result in 1000s of changes in the axiomatisation. Additionally, programmer
intent is often represented through non-axiomitised sections of the code {
whitespace, indentation and even comments which may drive a \literate" development
approach. Moreover, a de nition of a di erence based purely on axiomatisation
cannot account for these di erences; the use of a line-oriented syntactic di will.</p>
      <p>We argue here that by provision of an attractive and well-supported syntax,
we do not need to provide speci c collaborative tooling. Tawny itself has been
built using distributed versioning systems ( rst Mercurial and then git). These
are already advanced systems supporting multiple work ows including tiered
development with authorisation, branching, cherry-picking and so on. While
ontology-speci c tooling may have some advantages, it is unlikely to replicate the
functionality o ered by these systems, aside from issues of developer familiarity.</p>
      <p>Later, we also describe support for automated testing, which can also ease
the di culty of collaborative working (Section 9).
7</p>
    </sec>
    <sec id="sec-7">
      <title>Enabling Modularity</title>
      <p>Tawny provides explicit support for name spacing and does this by building on
Clojure's namespace support. It is possible to build a set of ontologies spread
across a number of di erent les. Normally, each le contains a single namespace;
tawny mirrors this, with each namespace containing a single ontology, with a
de ned IRI.</p>
      <p>OWL itself does not provide a distribution mechanism for ontologies; the IRI
of an ontology does not need to resolve, but in practice, is often a distribution
mechanism. By default Protege will check for resolution if other mechanisms fail;
OBO ontologies, for example, are all delivered from their IRI.</p>
      <p>In contrast, tawny builds on the Clojure environment; most projects are built
using the Leiningen tool which, in turn, uses the repository and dependency
management from Maven. When building the Pizza ontology in tawny, the build tool
will fetch tawny itself, the OWL API and HermiT, as well as their dependencies.
Ontological dependencies can be fetched likewise. Maven builds come with a
dened semantics for versioning, including release and snapshot di erentiation. A
key advantage of this system is that multiple versions of a single ontology can
be supported, with di erent dependency graphs.
8</p>
    </sec>
    <sec id="sec-8">
      <title>Coping With Semantics Free Identi ers</title>
      <p>Importing one ontology from another is straight-forward in tawny. However,
not all ontologies are developed using tawny; we need to be able interact with
external ontologies only accessible through an OWL le. Tawny provides facilities
for this use-case: the library reads the OWL le, creates symbols for all entities5,
then associates the relevant Java object with this symbol. This approach is
reasonably scalable; tawny can import the Gene Ontology within a minute on
a desktop machine. Clojure is a highly-dynamic language and allows this form
of programmatic creation of variables as a rst-class part of the language; so an
ontology read in this way functions in every sense like a tawny native ontology.
Ontology classes can be queried for their documentation, auto-completion works
and so forth.</p>
      <p>
        However, there is a signi cant problem with this import mechanism. Tawny
must create a symbol for each OWL entity in the source ontology. By default,
tawny uses the IRI fragment for this purpose; while Clojure symbols have a
restricted character set which is not the same as that of the IRI fragment, in
practice this works well. However, this is unusable for ontologies built according
to the OBO ontology standard, which uses semantics-free, numeric identi ers
such as OBI_0000107. While these are valid Clojure symbols, it is unreadable
for a developer. This issue also causes signi cant di culties for ontology
development in any syntax; OMN is relatively human-readable but ceases to be so
when all identi ers become numeric. We have previously suggested a number
of solutions to this problem, either through the use of comments or specialised
denormalisations[
        <xref ref-type="bibr" rid="ref19">19</xref>
        ], or through the addition of an Alias directive providing
a mapping between numeric and readable identi er[
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]. However, all of these
require changes to the speci cation and tooling updates, potentially in several
syntaxes.
      </p>
      <p>
        For tawny, we have worked around this problem by enabling an arbitrary
mapping between the OWL entity and symbol name [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]. For OBO ontologies,
a syntactic transformation of the rdfs:label works well. Thus, OBI_0000107 can
be referred to as provides_service_consumer_with, while BFO_0000051 becomes
the rather more prosaic has_part.
      </p>
      <p>
        While this solves the usability problem, it causes another issue for ontology
evolution; the label is open to change, independently of any changes in
semantics; unfortunately, any dependent ontology built with tawny will break, as the
relevant symbol will no longer exist. This problem does not exist for GUI
editors such as Protege because, ironically, they are not WYSIWYG { the ontology
5 It is possible to choose a subset
stores an IRI, while the user sees the label; changes to labels percolate when
reloading the dependent ontology. Tawny provides a solution to this; it is
possible to memorise mappings between symbols and IRIs at one point in time[
        <xref ref-type="bibr" rid="ref22">22</xref>
        ]. If
the dependency changes its label, while keeping the same IRI, tawny will
recognise this situation, and generate a deprecated symbol; dependent ontologies will
still work, but will signal warnings stating that a label has changed and
suggesting appropriate updates. Currently these must be performed manually, although
this could be automated.
9
      </p>
    </sec>
    <sec id="sec-9">
      <title>Enabling Unit Testing and Continuous Integration</title>
      <p>
        Unit testing is a key addition to the software development process which has
enabled more agile development. Adapting this process for ontology development
has previously been suggested[
        <xref ref-type="bibr" rid="ref23">23</xref>
        ], and implemented as a plugin to Protege [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ].
To add this capability to tawny, we have integrated reasoning; at the time of
writing, only ELK[
        <xref ref-type="bibr" rid="ref25">25</xref>
        ] is available as a Maven resource in the Maven Central
repository, therefore we have developed a secondary maven build for HermiT
which allows use of this reasoner also[
        <xref ref-type="bibr" rid="ref26">26</xref>
        ]6, so both these reasoners are available
for use; others can be added trivially as they are mavenised. A number of test
frameworks exist in Clojure; here we use clojure.test. As shown in Listing 10,
we check that various inferences have occurred (or not as appropriate), using
the isuperclass? predicate. We have also added support for \probe" classes. In
our second test, we use the with-probe-entities macro; this adds a subclass
of VegetarianPizza and CajunPizza { as the latter contains meat, this should
result in an incoherent ontology if both de nitions are correct; probe entities
are automatically removed by the macro, returning the ontology to its previous
state, ensuring independence of tests.
( deftest CheesyShort
( is (r/ isuperclass ? p/ FourCheesePizza p/ CheesyPizza ))
( is (r/ isuperclass ? p/ MargheritaPizza p/ CheesyPizza ))
( is
      </p>
      <p>( not (r/ isuperclass ? p/ MargheritaPizza p/ FourCheesePizza ))))
( deftest VegetarianPizza
( is</p>
      <p>(r/ isuperclass ? p/ MargheritaPizza p/ VegetarianPizza ))
( is
( not
(o/ with-probe-entities
[c (o/ owlclass " probe "</p>
      <p>: subclass p/ VegetarianPizza p/ CajunPizza )]
(r/ coherent ?)))))</p>
      <sec id="sec-9-1">
        <title>Listing 10. Unit Testing a Pizza Ontology</title>
        <p>6 Available at http://homepages.cs.ncl.ac.uk/phillip.lord/maven/, or on Github</p>
        <p>In addition to coherence/consistency checking, unit tests are also useful to
check the OWL pro le in use; particularly useful when using higher levels of
abstraction (see Section 4) which hides the exact axiom in use.</p>
        <p>
          The use of Unit testing in this way has implications beyond simple
ontology development; it also allows a richer form of continuous integration where
dependent ontologies can be developed by independent developers, but
continuously checked for breaking changes. The tawny pizza ontology, for example, is
currently being tested using Travis7. Unlike, other ontology CI systems[
          <xref ref-type="bibr" rid="ref27">27</xref>
          ], this
requires no installation and integrates directly with the DVCS in use. It is also
useful for integration with software that operates on the ontology; for example,
both our version of Hermit, the OWL API and tawny-owl are built and tested
using this tool.
10
        </p>
      </sec>
    </sec>
    <sec id="sec-10">
      <title>Discussion</title>
      <p>In this paper, we have described tawny, a library which enables the user to
develop ontologies, using the tooling and environments that have long been
available to programmers. Although they both involve producing artifacts with strong
computational properties ontology development and software engineering have
long been disjoint. This has signi cant negative impacts; there are far more
programmers than knowledge engineers, and as a result the tooling that they use is
far better developed. Tawny seeks to address this imbalance, not by providing
richer tools for ontology development, but by recasting ontology development as
a form of programming.</p>
      <p>
        By allowing knowledge engineers to use any level of abstraction that they
choose, tawny can also improve current knowledge engineering process
significantly. It can help to remove duplication, for example, in class names. It can
clearly delineate disjoint classes protecting against future additions; this helps to
address a common ontological error[
        <xref ref-type="bibr" rid="ref28">28</xref>
        ]. It is also possible to model directly using
common ontology design patterns generating many axioms in a succinct syntax.
Bespoke templates can be built for a speci c ontology; this mirrors functionality
of tools like OPPL[
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], but uses the power of a full programming language and
environment. Trivially, for example, tawny can log its activity and comes with
debugger support.
      </p>
      <p>Of course, direct use of a programmatic library like tawny is not suitable for
all users; however, even for these users a library like tawny could be useful. It is
straight-forward to integrate ontologies developed directly with tawny as a DSL
with knowledge stored in other formalisms or locations. In this paper, we
described loading multi-lingual labels from properties les, isolating the translator
from the ontology, and interacting with OWL les generated by another tool.
It would also be possible to load axioms from a database or spreadsheet, using
existing JVM libraries.</p>
      <p>
        While with tawny, we have provided a programmatic alternative to many
facilities that exist in other tools, we also seek to provide tooling for a more
ag7 http://travis-ci.org
ile and reactive form of ontology development. Current waterfall methodologies,
exempli ed by BFO-style realism, lack agility, failing to meet the requirement
for regular releases to address short-comings, as has been seen with both BFO
1.1[
        <xref ref-type="bibr" rid="ref29">29</xref>
        ] and BFO 2.0[
        <xref ref-type="bibr" rid="ref30">30</xref>
        ]. Likewise, the OBO foundry places great emphasis on a
review process which is, unfortunately, backlogged[
        <xref ref-type="bibr" rid="ref31">31</xref>
        ] { in short, as with
waterfall software methodologies, the centralised aspects of this development model
appear to scale poorly.
      </p>
      <p>
        Tawny uses many ready-made and well tested software engineering
facilities: amenability to modern DVCS, a versioning and release semantics, a test
framework and continuous integration. The provision of a test environment is
particularly important; while ontology developers may bene t from testing their
own ontologies, the ability to contribute tests to their ontological dependencies
is even more valuable. They can provide upstream developers precise and
executable descriptions of the facilities which they depend on; giving upstream
developers more con dence that their changes will not have unexpected
consequences. When this does happen, downstream developers can track against older
versions of their dependencies, obviating the need for co-ordination of updates;
when they do decide to update, the re-factoring necessary to cope with external
changes will be supported by their own test sets; nally, continuous integration
will provide early warning if a developer's own changes impact others. In short,
tawny provides the tools for a more pragmatic and agile form of ontology
development which is more suited to ful lling the changing and varied requirements
found in the real world[
        <xref ref-type="bibr" rid="ref32">32</xref>
        ].
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1. Various:
          <article-title>The protege; ontology editor and knowledge acquisition system</article-title>
          . http: //protege.stanford.edu/
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>Egana</given-names>
            <surname>Aranguren</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Stevens</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            ,
            <surname>Antezana</surname>
          </string-name>
          , E.:
          <article-title>Transforming the axiomisation of ontologies: The ontology pre-processor language</article-title>
          .
          <source>Nature Precedings (Dec</source>
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Tudorache</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nyulas</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Noy</surname>
            ,
            <given-names>N.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Musen</surname>
            ,
            <given-names>M.A.</given-names>
          </string-name>
          :
          <article-title>WebProtg: a collaborative ontology editor and knowledge acquisition tool for the web</article-title>
          .
          <source>Semantic Web</source>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>Jiminez</given-names>
            <surname>Ruiz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            ,
            <surname>Grau</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.C.</given-names>
            ,
            <surname>Horrocks</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            ,
            <surname>Berlanga</surname>
          </string-name>
          , R.:
          <article-title>Supporting concurrent ontology development: Framework, algorithms and tool</article-title>
          .
          <source>Data &amp; Knowledge Engineering</source>
          <volume>70</volume>
          (
          <issue>1</issue>
          ) (
          <year>Jan 2011</year>
          )
          <volume>146</volume>
          {
          <fpage>164</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Stevens</surname>
          </string-name>
          , R.:
          <article-title>Why the pizza ontology tutorial</article-title>
          ? http://robertdavidstevens. wordpress.com/
          <year>2010</year>
          /01/22/
          <article-title>why-the-pizza-ontology-tutorial/ (</article-title>
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Kawas</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wilkinson</surname>
          </string-name>
          , M.D.:
          <article-title>Owl2perl: creating perl modules from owl class de - nitions</article-title>
          .
          <source>Bioinformatics</source>
          <volume>26</volume>
          (
          <issue>18</issue>
          ) (
          <year>Sep 2010</year>
          )
          <volume>2357</volume>
          {
          <fpage>2358</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Bechhofer</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Volz</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lord</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Cooking the semantic web with the OWL API</article-title>
          . In: Internaional Semantic Web Conference. (
          <year>2003</year>
          )
          <volume>659</volume>
          {
          <fpage>675</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Croset</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Overington</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rebholz-Schuhman</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          : Brain:
          <article-title>Biomedical knowledge manipulation</article-title>
          .
          <source>Bioinformatics</source>
          (
          <year>2013</year>
          ) Submitted.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>9. loopasam: Brain. https://github.com/loopasam/Brain</mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Horridge</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Patel-Schneider</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Owl 2 web ontology language manchester syntax</article-title>
          . http://www.w3.org/TR/owl2-manchester-syntax/ (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Lord</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Owl concepts as lisp atoms</article-title>
          . http://www.russet.org.uk/blog/2254 (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Bergman</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>The sweet compendium of ontology building tools</article-title>
          . http://www. mkbergman.com/862/the-sweet
          <article-title>-compendium-of-ontology-building-tools/ (</article-title>
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Lord</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Ontology building with emacs</article-title>
          . http://www.russet.org.uk/blog/2161 (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14. Various:
          <article-title>Getting started - clojure documentation - clojure development</article-title>
          . http: //dev.clojure.org/display/doc/Getting+Started
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Lord</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Disjoints in clojure-owl</article-title>
          . http://www.russet.org.uk/blog/2275 (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Stevens</surname>
          </string-name>
          , R.:
          <article-title>Closing down the open world: Covering axioms and closure axioms</article-title>
          . http://ontogenesis.knowledgeblog.
          <source>org/1001</source>
          (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Rector</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Representing speci ed values in owl: \value partitions" and \value sets"</article-title>
          .
          <source>W3C</source>
          Working Group Note (
          <year>2005</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Jupp</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Horridge</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Iannone</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Klein</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Owen</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schanstra</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wolstencroft</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stevens</surname>
          </string-name>
          , R.:
          <article-title>Populous: a tool for building owl ontologies from templates</article-title>
          .
          <source>BMC Bioinformatics 13(Suppl 1)</source>
          (
          <year>2011</year>
          ) S5
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Lord</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Obo format and manchester syntax</article-title>
          . http://www.russet.org.uk/blog/ 1470 (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Lord</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Semantics-free ontologies</article-title>
          . http://www.russet.org.uk/blog/2040 (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Lord</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <source>Clojure owl 0</source>
          .2. http://www.russet.org.uk/blog/2303 (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>Lord</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Remembering the world as it used to be</article-title>
          . http://www.russet.org.uk/ blog/2316 (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <surname>Vrandecic</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gangemi</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Unit tests for ontologies</article-title>
          .
          <source>In: In OTM Workshops (2</source>
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <surname>Drummond</surname>
            ,
            <given-names>N.:</given-names>
          </string-name>
          <article-title>Co-ode &amp; downloads &amp; the owl unit test framework</article-title>
          . http://www. co-ode.org/downloads/owlunittest/ [Online. last-accessed
          <source>: 2013-01-28</source>
          <volume>15</volume>
          :22:03]
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          25.
          <string-name>
            <surname>Kazakov</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Krtzsch</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Simancik</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Elk reasoner: Architecture and evaluation</article-title>
          .
          <source>In: Proceedings of the 1st International Workshop on OWL Reasoner Evaluation (ORE-2012)</source>
          .
          <article-title>(</article-title>
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>26. Various: Hermit reasoner: Home. http://hermit-reasoner.com/</mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          27.
          <string-name>
            <surname>Mungall</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dietze</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Carbon</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ireland</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bauer</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lewis</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <article-title>Continuous integration of open biological ontology libraries</article-title>
          . http://bio-ontologies.
          <source>knowledgeblog.org/405</source>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          28.
          <string-name>
            <surname>Rector</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Drummond</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Horridge</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rogers</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Knublauch</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stevens</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wang</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wroe</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>OWL pizzas: Practical experience of teaching OWL-DL: common errors &amp; common patterns. Engineering Knowledge in the Age of the Semantic Web (</article-title>
          <year>2004</year>
          )
          <fpage>6381</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          29.
          <string-name>
            <surname>Various</surname>
          </string-name>
          :
          <article-title>New version of bfo 1.1 available</article-title>
          . https://groups.google.com/d/topic/bfodiscuss/HQSnudUUM4E/discussion
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          30. Various:
          <article-title>Proposal for an o cial bfo 1.2 release</article-title>
          . https://groups.google.com/d/ topic/bfo-discuss/iKBlfDPv5GM/discussion
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          31. OBO Foundry Outreach Working Group:
          <article-title>New obo foundry tracker for feedback, requests, and other issues</article-title>
          . http://sourceforge.net/mailarchive/message.php? msg_id=
          <fpage>30391720</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          32.
          <string-name>
            <surname>Lord</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stevens</surname>
          </string-name>
          , R.:
          <article-title>Adding a little reality to building ontologies for biology</article-title>
          .
          <source>PLoS One</source>
          (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>