Home of the ALCOMO system

ALCOMO is a shortcut for Applying Locical Constraints on Matching Ontologies. ALCOMO is a project that has been developed by Christian Meilicke (that's me) in the context of his Phd. It is a debugging system that allows to transform incoherent alignments in coherent alignments by removing some correspondences from the alignment. The removed part of the alignment is called a diagnosis. It is complete in the sense that it detects any kind of incoherence in SHIN(D) ontologies. At the same time a computed diagnosis is always minimal in the sense that the tool never removes too much, i.e., the removed subset of the alignment is always a minimal hitting set over all conflicts. The whole story can be found in my thesis [1].


05.11.2012 - Ngo Duy Hoa and Ernesto Jimenez-Ruiz have detected some bugs in the previous ALCOMO 2012 version. Some were more related to some helper methods for joining and spliting mappings, some were more critical and related to the interval based reasoning. These bugs have been fixed resulting in a new release. Thanks a lot for the feedback on these issues! See a list of modifications below.

05.09.2012 - For the special task of debugging alignments between large biomedical ontologies in OAEI 2012 LargeBiomed track, a new version has been released in September 2012. See a list of modifications below.

04.09.2012 - An additional page has been added to give some hints how to use ALCOMO as component of a matching system. This page is available here. It explains a little bit on the settings and their impact.


Run as eclipse project

If you download and unzip the file alcomo2012-v1.01.zip, you have a complete eclipse project with all required libraries and a working classpath. Moreover, there are also several files (ontologies and alignments from OAEI 2011.5 conference and anatomy track) contained that allow you to directly run the example in the default package.

Run via command line

If you want to use ALCOMO as a jar-file in the classpath via command line, you first have to build the jar. In this case also download the file alcomo2012-v1.01.zip, go to the root of the unzipped folder and type ant (you need to have ant installed). It will generate a jar file in the dist/ folder. Then can work with this jar file and the other libraries (in dist/lib/) in the way you like. For example, copy the file src/ExampleXYZ.java and place it also in the dist/ folder. Then you can compile the file with the following command. First change to the dist/ folder as working directory.

javac -cp alcomo.jar ExampleXYZ.java

Run the main method of this class by copying the following line in your command line interpreter (remove line breaks first and for linux replace ; by :).

java -cp .;lib/hermit-v136-libs/axiom-1.2.8.jar;lib/hermit-v136-libs/dk.brics.automaton-1.11-2.jar;lib/hermit-v136-libs/jautomata-core-2.0-alpha-1.jar;lib/hermit-v136-libs/junit-4.4.jar;lib/hermitv136/HermiT.jar;lib/pelletv230/aterm-java-1.6.jar;lib/pelletv230/pellet-cli.jar;lib/pelletv230/pellet-core.jar;lib/pelletv230/pellet-datatypes.jar;lib/pelletv230/pellet-dig.jar;lib/pelletv230/pellet-el.jar;lib/pelletv230/pellet-explanation.jar;lib/pelletv230/pellet-jena.jar;lib/pelletv230/pellet-modularity.jar;lib/pelletv230/pellet-owlapiv3.jar;lib/pelletv230/pellet-pellint.jar;lib/pelletv230/pellet-query.jar;lib/pelletv230/pellet-rules.jar;lib/pelletv230/servlet.jar;lib/pelletv230-libs/jgrapht-jdk1.5.jar;lib/owlapiv322/owlapi-3.2.2.jar;lib/log4j1216/log4j-1.2.16.jar;alcomo.jar ExampleXYZ.java

Running this code might result in some log4j warning. You can copy the file log4j.properties into the dist/ folder to supress this warning. Instead of that, some log info message is printed to the screen that shows the progress of ALCOMO in its different phases (for historical reasons it is sent to the System.error, do not get confused, everthing is running smoothly).


Currently there is a small useage example available and a partial javadoc documentation. However, this should be sufficient to understand how to use the main functionality. A few words on the terminology; typically you will first start to define a diagnostic problem (called 'ExtractionProblem' in the code). This requires you to load two ontologies, and an alignment between them (called 'Mapping'). Then you have to attach the ontologies and the alignment to the extraction problem.

	// load the two ontologies that have been matched
	// in prevuíous version LocalOntology has to be used instead of IOntology
	IOntology sourceOnt = new IOntology("examples/cmt.owl");
	IOntology targetOnt = new IOntology("examples/ekaw.owl");
	// load the alignment that has been generated by a matcher
	Mapping mapping = new Mapping("examples/cmt-ekaw/AgrMaker.rdf");
	Mapping reference = new Mapping("examples/ref-cmt-ekaw.rdf");
	ExtractionProblem ep = new ExtractionProblem(
		... some arguments ... (details in the usage page)


It is now quite easy to run the algorithms. Moreover, you can retrieve the result again as an alignment and you can compare it easily against the reference alignment (if available). The discarded alignment is the diagnosis, the extracted alignment is the remaining part of the alignment if we remove the diagnosis.

	System.out.println("Debugged alignment:");
	// compute precision and recall
	Characteristic before = new Characteristic(mapping, reference);
	Characteristic after = new Characteristic(ep.getExtractedMapping(), reference);
	System.out.println("Before debugging:\n" + before);
	System.out.println("After debugging: \n" + after);

Note that the classes used in this example are also documented in the javadoc documentation.


ALCOMO uses Pellet v2.3.0 or Hermit v1.3.6 as underlying reasoner, and the OWL API v3.2.2. The ALCOMO system supports as input format (a) the ontology formats that are supported by the OWL API and (b) the format of the Alignment API for loading and storing alignments.


The system is freely available under MIT License.

Version and Modifications

The currently available version was released in November 2012. It is based on the second major release and it is called ALCOMO 2012 v1.01 (download this version here). The 2012 version of ALCOMO has been improved as follows.

The previously available version was released in September 2012. Its the second major release and its called ALCOMO 2012 (download here).

Especially, the third modification had an enormous impact on the efficiency of the overall approach (whenever chosing REASONING_EFFICIENT). While the use of this approach was inspired by LogMap, all subsequent reasoning activities are specific to ALCOMO and follow the approach described in [1]. Aside from the usage of interval trees, LogMap and ALCOMO apply a completely different strategy for detecting and resolving conflicts.

Previous modifications/versions(bugfixes)


The figures to the left are Freges illustration of contraposition and contradiction (taken from the Begriffsschrift) and some wallpaper design.


[1] Christian Meilicke. Alignment Incoherence in Ontology Matching. University Mannheim 2011.

[2] Ernesto Jiménez-Ruiz, Bernardo Cuenca Grau LogMap: Logic-based and Scalable Ontology Matching. ISWC 2011.

[3] Christophides, V., Plexousakis, D., Scholl, M., Tourtounis, S. On labeling schemes for the Semantic Web. WWW 2003.