<!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>Owl2vcs: Tools for Distributed Ontology Development</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Ivan Zaikin</string-name>
          <email>i@tpu.ru</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Anatoly Tuzovsky</string-name>
          <email>tuzovskyaf@tpu.ru</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Tomsk Polytechnic University</institution>
          ,
          <addr-line>Tomsk</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>The collaborative development of web ontologies is an important topic being actively researched. In this paper, we present a set of tools that facilitate collaborative development of web ontologies using distributed version control systems. The main purpose of these tools is to replace inefficient built-in diff and three-way merge tools, which rely on text representation rather than on ontology structure. Being based on popular distributed version control systems, owl2vcs can be easily integrated into popular issue trackers.</p>
      </abstract>
      <kwd-group>
        <kwd>OWL 2</kwd>
        <kwd>ontology</kwd>
        <kwd>structural difference</kwd>
        <kwd>three-way merge</kwd>
        <kwd>change</kwd>
        <kwd>change set</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>Ontology is a formal description of a specific domain in a standardized language
readable by both humans and computers. Like software, ontologies need to be
maintained after development. Managing changes between ontologies is an essential part
of ontology engineering. There are many reasons for ontologies to be changed.
Firstly, the domain may change. Secondly, the understanding of the domain by ontology
engineers may change. Thirdly, there may be errors to fix and new ways of
representing the domain in an ontology language. Development and maintenance of large
ontologies are performed by groups of specialists. Nowadays collaborative development
of software is inconceivable without using revision control and issue tracking
systems. Using the same approach for ontology development is very promising but has
some pitfalls. All tools designed for software code development are text-oriented. For
example, diff and three-way merge tools are useless for ontologies stored in one of
XML formats.</p>
      <p>
        The OWL 2 language has two semantics: 1) RDF-based semantics where resources
and relations between them are the main concepts, and complex constructs are
represented using so called “blank nodes”, and 2) direct semantics where entities and
axioms are the main concepts. There are works related to comparison of RDF graphs but
they either do not mention the blank nodes problem, or the algorithms are too
complex and non-deterministic [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. It is shown in [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] that in the general case it is
impossible to compare unambiguously two RDF triples containing blank nodes, though there
are computationally complex algorithms of checking whether two RDF graphs are
isomorphic. In this paper, we present algorithms and structural1 diff and three-way
merge tools for OWL 2 ontologies, which use OWL 2 direct semantics. Applying
direct semantics eliminates problems with blank nodes and allows comparing
ontologies axiom by axiom. They also take into account some attributes, which are not
included into the logical constituent but still important for ontology development.
2
      </p>
    </sec>
    <sec id="sec-2">
      <title>Related Work</title>
      <p>
        The development of owl2vcs was inspired by SVoNt [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] – an SVN-based ontology
versioning system. However, it is not available for download and looks like to be
abandoned.
      </p>
      <p>
        There are also some tools for comparing ontologies using OWL direct semantics:
1. OWLPatch [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] is a simple command line tool, which compares two ontologies and
saves the result for future patching of the first ontology.
2. Ecco [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] is a system, which compares two ontologies and analyzes the changes
detecting whether removals and additions were logically effectual.
3. OWLDiff [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] is a tool, which compares ontologies axiom by axiom, finds the
effectual changes and analyzes them to find the affected entities.
4. OWL Diff Tool [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] is plug-in for Protégé 4.2, which calculates the structural
differences between ontologies and focuses on alignment of renamed entities.
The tools mentioned above only compare the logical constituent of ontologies (i.e.
axioms) and do not take into account import changes, prefix changes, and ontology
format changes. However, such changes are important for ontology developers and it
is useful to keep record of them. During the research, we found no tool capable of
three-way merge of OWL ontologies. That is why we have developed our own one.
3
      </p>
    </sec>
    <sec id="sec-3">
      <title>Algorithms</title>
      <p>
        Let us denote a set of all OWL 2 ontologies as OU, and introduce the notation for
ontology components:
 EU – set of all possible OWL 2 entities (classes, data types, individuals and
properties);
 AU – set of all possible OWL 2 axioms (logical statements about entities);
 NU – set of all possible ontology annotations – pairs of the form (np, nv), where np is
an annotation property and nv is its value;
 IU – set of all possible imports (links to other ontologies);
 PU ⊂ S × S – functional binary relation defined on the set of strings S representing
the set of all possible prefixes – pairs (pn, pi), where pi – prefix value – is a part of
1 The notion of structural difference is borrowed from [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] where it is defined through the
notion of structural equivalence used in [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
      </p>
      <p>IRI, and pn – prefix name – is a short string used to shorten names of entities and
can be used instead of pn;
 D – set of all possible pairs (ro, rv) called ontology identifiers, where ro is an
ontology IRI, and rv is a version IRI;
 F = { «RDF/XML», «Turtle», «OWL/XML», «OWL Functional Syntax», «OWL</p>
      <p>Manchester Syntax» } – set of possible ontology formats.</p>
      <p>An ontology is a tuple E, A, N, I, P, d, f, where
 E ⊂ EU – finite unordered set of entities;
 A ⊂ AU – finite unordered set of axioms;
 N ⊂ NU – finite unordered set of ontology annotations;
 I ⊂ IU – finite unordered set of imports;
 P ⊂ PU – finite unordered set of prefixes;
 d ∈ D – ontology identifies;
 f ∈ F – ontology format.</p>
      <p>An ontology can only contain those entities, which are referred by at least one axiom.
Consequently, removing an entity from an ontology implies removing all axioms
referred to that entity; adding an entity implies adding at least one axiom referring to
that entity; changing an entity implies adding an axiom which refers to that entity and
is not the first one, or removing an axiom which refers to that entity and is not the last
one.</p>
      <p>Let us denote changes in each component:
 CU = CAU ∪ CNU ∪ CIU ∪ CPU ∪ CdU ∪ CfU – set of all possible changes;
 CAU = СAU+ ∪ СAU– – set of all possible axiom changes;
 СAU+ = { AddAxiom(a) | a ∈ AU } – set of all possible axiom additions;
 СAU– = { RemoveAxiom(a) | a ∈ AU } – set of all possible axiom removals;
 CNU = СNU+ ∪ СNU– – set of all possible ontology annotation changes;
 СNU+ = { AddOntologyAnnotation(n) | n ∈ NU } – set of all possible ontology
annotation additions;
 СNU– = { RemoveOntologyAnnotation(n) | n ∈ NU } – set of all possible ontology
annotation removals;
 CIU = СIU+ ∪ СIU– – set of all possible import changes;
 СIU+ = { AddImport(i) | i ∈ IU } – set of all possible import additions;
 СIU– = { RemoveImport(i) | i ∈ IU } – set of all possible import removals;
 CPU = CPU+ ∪ CPU– ∪ CPU* ∪ CPU# – set of all possible prefix changes;
 CPU+ = { AddPrefix(pn, pi) | (pn, pi) ∈ PU } – set of all possible prefix additions;
 CPU– = { RemovePrefix(pn, pi) | (pn, pi) ∈ PU } – set of all possible prefix removals;
 CPU* = { ModifyPrefix(pn, pi, pi′) | (pn, pi) , (pn, pi′) ∈ PU ∧ pi ≠ pi′} – set of all
possible prefix modifications;
 CPU# = { RenamePrefix(pn, pi, pn′) | (pn, pi), (pn′, pi) ∈ PU ∧ pn ≠ pn′} – set of all
possible prefix renames;
 CdU = { SetOntologyID(d, d′) | d, d′ ∈ D ∧ d ≠ d′ } – set of all possible ontology
identifier changes;
 CfU = { SetOntologyFormat(f, f′) | f, f′ ∈ F ∧ f ≠ f′ }– set of all possible ontology
format changes.
3.1</p>
      <sec id="sec-3-1">
        <title>Ontology Diff</title>
        <p>Let v1 = E1, A1, N1, I1, P1, d1, f1 ∈ OU be the first version of an ontology and
v2 = E2, A2, N2, I2, P2, d2, f2 ∈ OU – the second one; δ : OU × OU   (CU) is a
function that returns the change set С between two versions; ε : OU × (CU)  OU is a
function which applies the change set С to the ontology. The problem of comparing
two versions v1 and v2 is to find such a change set C = δ(v1, v2) that ε(v1, C) = v2.
Let’s denote the functions which compare constituents of ontologies:
 δA :  (AU) ×  (AU)   (CAU) – the axiom comparison function;
 δN :  (NU) ×  (NU)   (CNU) – the ontology annotation comparison function;
 δI :  (IU) ×  (IU)   (CIU) – the import comparison function;
 δP :  (PU) ×  (PU)   (CPU) – the prefix comparison function;
 δd : D × D   ≤1(CdU) – the ontology identifier comparison function;
 δf : F × F   ≤1(CfU) – the ontology format comparison function.</p>
        <p>The change set between v1 and v2 is a union of changes in separate constituents:</p>
        <p>C = δ(v1, v2) =
= δA(A1, A2) ∪ δN(N1, N2) ∪ δI(I1, I2) ∪ δP(P1, P2) ∪ δd(d1, d2) ∪ δf(f1, f2) =
= CA ∪ CN ∪ CI ∪ CP ∪ Cd ∪ Cf
Axiom changes can be found by comparing two sets A1 and A2:</p>
        <p>CA = δA(A1, A2) =
= { AddAxiom(a) | a ∈ A2 \ A1 } ∪ { RemoveAxiom(a) | a ∈ A1 \ A2 }.</p>
        <p>That is, added axioms are axioms which present in A2 but absent in A1, and
removed axioms are those which present in A1 but absent in A2.</p>
        <p>Ontology annotation changes can be found in a similar way:</p>
        <p>CN = δN(N1, N2) =
= { AddOntologyAnnotation(n) | n ∈ N2 \ N1 } ∪
∪ { RemoveOntologyAnnotation(n) | n ∈ N1 \ N2 }.</p>
        <p>Import changes are obtained similarly:</p>
        <p>CI = δI(I1, I2) = { AddImport(i) | i ∈ I2 \ I1 } ∪ { RemoveImport(i) | i ∈ I1 \ I2 }.</p>
        <p>Prefix changes CP fall into four categories: additions, removals, modifications and
renames:</p>
        <p>CP = δP(P1, P2) =
= { AddPrefix(pn2, pi2) | (pn2,pi2) ∈ P2 ∧ ∄(pn1, pi1) ∈ P1: (pn1=pn2 ∨ pi1=pi2) } ∪
∪ { RemovePrefix(pn1, pi1) | (pn1,pi1) ∈ P1 ∧ ∄(pn2, pi2) ∈ P2: (pn1=pn2 ∨ pi1=pi2) } ∪
∪ { ModifyPrefix(pn1,pi1,pi2) | (pn1,pi1) ∈ P1 ∧ ∃(pn2, pi2) ∈ P2: (pn1=pn2 ∧ pi1≠pi2) } ∪
∪ { RenamePrefix(pn1,pi1,pn2) |
(pn1, pi1) ∈ P1 ∧ ∃(pn2, pi2) ∈ P2: ((pn2, pi2) ∉ P1) ∧ pn1≠pn2 ∧ pi1=pi2 }.</p>
        <p>Thus prefixes in P2 but not in P1 are considered added; prefixes in P1 but not in P2
are considered removed; prefixes with different values but the same name are
considered modified; and prefixes with different names but the same values are considered
renamed.</p>
        <p>The δd function returns the set of at most one element which describes the change
of the ontology identifier:</p>
        <p>Cd = δd(d1, d2) = { SetOntologyID(d1, d2) | d1 ≠ d2 }.</p>
        <p>The δf function returns the set of at most one element which describes the change
of the ontology format:</p>
        <p>Cf = δf(f1, f2) = { SetOntologyFormat(f1, f2) | f1 ≠ f2 }.
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>Analysis of Changes</title>
        <p>Let the first version of an ontology v1 contain a set of entities E1, and the second
version v2 contain another set of entities E2. The problem of change analysis is to do the
following:
5. Find the set of entities E′ ⊂ E1 ∪ E2 affected by changes;
6. Split the set E′ into three subsets: E+ – new entities; E– – removed entities; E* –
modified entities (which present in both versions);
7. For each new, removed, or modified entity, find a set of corresponding changes.
Let’s define the signature σ(a) of axiom a as a finite unordered set of entities which
are referred by axiom a. The signature of a set of axioms can be found as a union of
separate axiom signatures:</p>
        <p>σ({a1, a2, …, an}) = σ(a1) ∪ σ (a2) ∪ … ∪ σ(an).</p>
        <p>The signature of a change is equal to the signature of the corresponding axiom:
σ(AddAxiom(a)) = σ(a), σ(RemoveAxiom(a)) = σ(a).</p>
        <p>The signature of a change set can be found as a union of single change signatures:
σ({с1, с2, …, сn}) = σ(с1) ∪ σ (c2) ∪ … ∪ σ(сn).</p>
        <p>The set of entities affected by changes CA can be found as a signature of CA:
E′ = σ(CA). It is shown in Figure 1 as a dashed rectangle. It follows from the figure
that removed entities E– = E′ \ E2 = E1 \ E2, added entities E+ = E′ \ E1 = E2 \ E1, and
modified entities E* = E′ ∩ E1 ∩ E2. The figure also shows unaffected entities
E|| = E1 ∩ E2 \ E′.</p>
        <p>E||
E–</p>
        <p>E2</p>
        <p>E+</p>
        <p>E′</p>
        <p>Fig. 1. Relationship between E1, E2, E+, E–, E*, E|| and E′
For each modified, removed or added entity e we can find all related changes as
follows:</p>
        <p>σ–1(e) = { c | c ∈ CA ∧ e ∈ σ(с) }.
3.3
Let</p>
        <p>Three-way Merge of Ontologies
 v0 = E0, A0, N0, I0, P0, d0, f0 ∈ OU be the initial version of an ontology;
 v1 = E1, A1, N1, I1, P1, d1, f1 ∈ OU – the version changed by the first user;
 v2 = E2, A2, N2, I2, P2, d2, f2 ∈ OU – the version changed by the second user;
 C1 = δ(v0, v1) = C1A ∪ C1N ∪ C1I ∪ C1P ∪ C1d ∪ C1f – finite unordered set of
changes made to v0 by the first user;
 C2 = δ(v0, v2) = C2A ∪ C2N ∪ C2I ∪ C2P ∪ C2d ∪ C2f – finite unordered set of
changes made to v0 by the second user.</p>
        <p>The changes made by both users C1 ∪ C2 can be split into following subsets:
 Matching changes Cm = C1∩C2;
 Conflicting changes by the first user: C′1;
 Non-conflicting changes by the first user: C||1 = (C1 \ Cm) \ C′1;
 Conflicting changes by the second user: C′2;
 Non-conflicting changes by the second user: C||2 = (C1 \ Cm) \ C′2.</p>
        <p>The problem of three-way merging of ontologies v0, v1 and v2 is to get the v3 ontology
based on v0 and containing changes Cm, C||1, C||2 and some changes from C′1 ∪ C′2
which don’t lead to a conflict.</p>
        <p>In this paper, we assume that import changes and ontology annotation changes
cannot lead to a conflict. The conflicting changes therefore include conflicting
changes of axioms, prefixes, ontology identifiers and ontology formats:</p>
        <p>C′1 = C′1A ∪ C′1P ∪ C′1d ∪ C′1f;
The architecture of the collaborative distributed ontology development system is
shown in Figure 2.</p>
        <p>Browser
e
d
i</p>
        <sec id="sec-3-2-1">
          <title>S Ontology Editors</title>
          <p>t
n
e
i
l
C</p>
        </sec>
        <sec id="sec-3-2-2">
          <title>Local Tools</title>
        </sec>
        <sec id="sec-3-2-3">
          <title>Local Repository</title>
        </sec>
        <sec id="sec-3-2-4">
          <title>Remote Repository</title>
        </sec>
        <sec id="sec-3-2-5">
          <title>Version Control System</title>
          <p>Fig. 2. Implementation architecture</p>
        </sec>
        <sec id="sec-3-2-6">
          <title>Issue Tracker</title>
        </sec>
        <sec id="sec-3-2-7">
          <title>Remote Services</title>
          <p>e
d
i
S
r
e
v
r
e
S
When an ontology developer creates the initial version of an ontology using an
ontology editor, he puts it to the local repository of the version control system, and then he
publishes (pushes) it to the remote repository. After publishing any developer can get
(pull) this version to his local repository and work on it using any ontology editor.
During this work, he can compare his version to the initial one using the local diff
tool. After changing an ontology, the developer commits his changes to his local
repository and then pushed them back to the remote repository in order to make them
available for other developers. It is worth noting that it is possible to commit changes
(that is create new versions of ontologies) even without network access, for example
during a trip or network troubles. Information about each new version is also
available through the issue tracker, which can be accessed with a web browser. Remote
services perform comparing of adjacent versions and create an index of all entities,
which occur in ontologies using the algorithms described above. This index is used to
display change log of a specific entity on a special page in the issue tracker where it is
easy to see when, by whom and in what ontology the entity was introduced, modified
or abolished.</p>
          <p>In case when two developers try to push their changes to the remote repository
after working on the same ontology, the second developer has to perform the three-way
merge operation using the local merge tool in order to ensure the integrity of the
ontology. If changes of both developers do not affect the same entities, or if their
changes on the same entity are the same, the merge operation is done automatically. From
the other hand, if there are conflicting changes, the second developer has to resolve
conflicts using the graphical user interface of the local merge tool and an ontology
editor (in complex cases).
5</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Implementation</title>
      <p>The diff and merge tools are implemented in Java using OWL API2 and are available
for download at GitHub3. Git or Mercurial can be used as a version control system.
Any ontology editor with capability of editing RDF/XML, OWL/XML, OWL
Functional Syntax, Manchester OWL Syntax or Turtle can be used with the tools.
5.1</p>
      <sec id="sec-4-1">
        <title>The Diff Tool: owl2diff</title>
        <p>
          The main purpose of the tool is finding changes δ(v1,v2) between two versions v1 and
v2. It can also perform a shallow analysis of changes in order to find which entities
were added, modified, or removed. It takes into account ontology format changes and
import changes. It takes two OWL 2 files as an input and produces a change set in
form of text, which is close to OWL Functional Syntax. Here is the EBNF grammar
of the change set:
2 http://owlapi.sourceforge.net/
3 https://github.com/utapyngo/owl2vcs
changeset
iri ::= fullIRI | abbreviatedIRI
literal ::= quotedString ( '^^' iri | languageTag )?
The prefixName, fullIRI, abbreviatedIRI, quotedString, languageTag, annotation and
axiom elements are described in OWL 2 Structural Specification [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ]. It can be seen
from the grammar that change set consists of prefixes used to abbreviate entities,
ontology format change, ontology identifier change, prefix changes, import changes,
ontology annotation changes, and axiom changes. Each addition of a new axiom, an
ontology annotation, an import or a prefix is denoted by the “+” sign, whereas
removal is denoted by the “–” sign. Modification of a prefix, an ontology identifier, or an
ontology format is denoted by the “*” sign. Renaming of a prefix is denoted by the
“#” sign. Here is an example of a change set produced by the owl2diff tool:
owl:=&lt;http://www.w3.org/2002/07/owl#&gt;
:=&lt;http://www.co-ode.org/ontologies/pizza/pizza.owl#&gt;
pizza:=&lt;http://www.coode.org/ontologies/pizza/pizza.owl#&gt;
* OntologyFormat("OWL Functional Syntax")
- Prefix(dc:=&lt;http://purl.org/dc/elements/1.1/&gt;)
- DifferentIndividuals(pizza:America pizza:England
pizza:France pizza:Germany pizza:Italy )
+ Declaration(NamedIndividual(pizza:Russia))
+ DifferentIndividuals(pizza:America pizza:England
pizza:France pizza:Germany pizza:Italy pizza:Russia )
+ ClassAssertion(owl:Thing pizza:Russia)
+ ClassAssertion(pizza:Country pizza:Russia)
The first three lines declare the prefixes used in subsequent changes. The first change
is the change of ontology format to “OWL Functional Syntax”. The following
changes are removal of the “dc” prefix, removal of the “DifferentIndividuals” axiom, and
addition of four axioms related to adding the “Russia” country to the ontology.
        </p>
        <p>Sometimes it may be useful to see the short representation of the changes (when
there are many of them) – just entities affected by the changes. Here is the short
representation of the changes shown above produced by owl2diff with the “-e” option:
+++ NamedIndividual: pizza:Russia
*** Class: owl:Thing
*** NamedIndividual: pizza:France
*** NamedIndividual: pizza:England
*** NamedIndividual: pizza:Italy
*** NamedIndividual: pizza:Germany
*** Class: pizza:Country
*** NamedIndividual: pizza:America
In order to create change logs for each entity, a detailed representation of changes is
required. Invoked with the “-c -e” options, the tool outputs all related changes for
each entity:
+++ NamedIndividual: pizza:Russia
+ Declaration(NamedIndividual(pizza:Russia))
+ DifferentIndividuals(pizza:America pizza:England
pizza:France pizza:Germany pizza:Italy pizza:Russia )
+ ClassAssertion(owl:Thing pizza:Russia)
+ ClassAssertion(pizza:Country pizza:Russia)
*** Class: owl:Thing
+ ClassAssertion(owl:Thing pizza:Russia)
*** NamedIndividual: pizza:France
- DifferentIndividuals(pizza:America pizza:England
pizza:France pizza:Germany pizza:Italy )
+ DifferentIndividuals(pizza:America pizza:England
pizza:France pizza:Germany pizza:Italy pizza:Russia )
…
*** Class: pizza:Country
+ ClassAssertion(pizza:Country pizza:Russia)
*** NamedIndividual: pizza:America
- DifferentIndividuals(pizza:America pizza:England
pizza:France pizza:Germany pizza:Italy )
+ DifferentIndividuals(pizza:America pizza:England
pizza:France pizza:Germany pizza:Italy pizza:Russia )
5.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>The Three-Way Merge Tool: owl2merge</title>
        <p>The main purpose of this tool is helping the user to resolve conflicts and perform the
three-way merge of ontologies. The tool takes three ontology versions as an input (v0,
v1, v2) and outputs the resulting ontology v3, which contains changes made by both
users. It uses the same grammar as the diff tool to represent the changes. The
graphical user interface of the three-way merge tool is shown in Figure 3. The user
interface contains four tabs, which display common (matching) changes, conflicting
changes, other changes and resulting changes. By default, all common and
nonconflicting changes are selected, and conflicts are to be resolved by the user. If there
are no conflicts, changes can be applied automatically without interfering with the
user.
With owl2vcs, we have local diff and merge tools for web ontologies. It allows us to
use any software for editing ontologies (including text editors). If developers are used
to a specific ontology editor, they do not have to learn another one. This approach
does not restrict ontology language expressiveness. Being based on OWL API, the
tools support all OWL constructs including SWRL rules. The solution takes into
account peculiarities of ontology storing and allows tracking changes of ontology
format. The proposed algorithms are simple and easy to maintain.</p>
        <p>However, it would be nice to see the difference between ontologies in the issue
tracker using just a web browser. One of the most extensible issue trackers is
Redmine4. Our next goal is to develop a plugin for Redmine to allow comparing
ontologies and analyzing changes at the server side using the algorithms described in
this paper.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Carroll</surname>
            ,
            <given-names>J. Matching RDF Graphs.</given-names>
          </string-name>
          (
          <year>2001</year>
          ), http://www.hpl.hp.com/techreports/2001/HPL-2001-293.pdf
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>2. DiffAndPatch, http://www.w3.org/wiki/DiffAndPatch</mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Luczak-Rösch</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Coskun</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Paschke</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rothe</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tolksdorf</surname>
          </string-name>
          , R.:
          <article-title>Svont - version control of OWL ontologies on the concept level</article-title>
          . In: Fähnrich,
          <string-name>
            <given-names>K.P.</given-names>
            ,
            <surname>Franczyk</surname>
          </string-name>
          <string-name>
            <surname>B</surname>
          </string-name>
          . (eds.)
          <article-title>Informatik 2010</article-title>
          . Service Science - Neue
          <source>Perspektiven für die Informatik. Band 2. LNI 176</source>
          ,
          <year>Gl 2010</year>
          , pp.
          <fpage>79</fpage>
          -
          <lpage>84</lpage>
          . Gesellschaft für Informatik,
          <source>Bonn</source>
          (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Drummond</surname>
            ,
            <given-names>N.: OWL</given-names>
          </string-name>
          <string-name>
            <surname>Patch</surname>
          </string-name>
          (
          <year>2011</year>
          ), http://owl.cs.manchester.ac.uk/patch/
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Gonçalves</surname>
            ,
            <given-names>R.S.</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>
          :
          <article-title>Ecco: A Hybrid Diff Tool for OWL 2 ontologies</article-title>
          . In: Klinov,
          <string-name>
            <given-names>P.</given-names>
            ,
            <surname>Horridge</surname>
          </string-name>
          , M. (eds.)
          <source>OWLED</source>
          <year>2012</year>
          :
          <article-title>OWL Experienced</article-title>
          and Directions Workshop, Heraklion, Crete, Greece (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Kremen</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Smid</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kouba</surname>
            ,
            <given-names>Z:</given-names>
          </string-name>
          <article-title>OWLDiff: A Practical Tool for Comparison and Merge of OWL Ontologies</article-title>
          .
          <source>In: DEXA</source>
          <year>2011</year>
          , pp.
          <fpage>229</fpage>
          -
          <lpage>233</lpage>
          . IEEE Press (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Redmond</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Noy</surname>
          </string-name>
          , N.:
          <article-title>Computing the Changes Between Ontologies</article-title>
          . In: Novacek,
          <string-name>
            <given-names>V.</given-names>
            ,
            <surname>Huang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            ,
            <surname>Groza</surname>
          </string-name>
          , T. (eds.)
          <source>EvoDyn</source>
          <year>2011</year>
          : Joint Workshop on Knowledge Evolution and
          <string-name>
            <given-names>Ontology</given-names>
            <surname>Dynamics</surname>
          </string-name>
          , Bonn, Germany (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Motik</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Patel</surname>
            ,
            <given-names>P.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Parsia</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>OWL 2 Web Ontology Language Structural Specification</article-title>
          and
          <string-name>
            <surname>Functional-Style</surname>
            <given-names>Syntax</given-names>
          </string-name>
          : World Wide Web Consortium (
          <year>2009</year>
          ), http://www.w3.org/TR/owl2-syntax/
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>