Adding disjointness checks to the ChEBI ontology
In constrast to object-oriented modelling approaches, the core unit in an OWL file is the axiom, not the class. Composition of an ontology from separate modules via the owl:imports mechanism also operates at the axiom level. This can make it more difficult to work with modules programmatically, as one has to potentially trawl through multiple source files in order to compose all the information about a given class. (Although the fantastic OWL Tools library has some wrappers that relieve the burden of this step if you're working in Java.) However, there are some advantages to axiom-level modularity...
The chemical ontology ChEBI is maintained by a custom curator tool that allows chemists to work with and annotate chemical structure information. As part of our ontology improvement efforts, we have recently finished a project to ensure that all entities contained in the ontology had at least one is-a parent (i.e. that the ontology was is-a complete). Now we are working on extensions to the ontology to support increased automation of classification, consistency checking and error detection.
Handling these extensions via our existing (structure and metadata-centric) curator tool is not a good idea: 1) it would involve re-implementing functionality that is already available in Protégé, and a parallel maintenance stream to keep up-to-date as OWL and Protégé evolve; and 2) it would in a sense be wasting ChEBI developer resources that would be better put to use on problems more specific to chemical ontology. But the ChEBI OWL file is generated from the database content -- subsequent edits to add axioms would be entirely overwritten. So is there an easy way to do this? Yes, thanks to OWL axiom-level modularity, it is really easy just to add a separate file for extensions, import the generated ChEBI ontology OWL version, and 'decorate' some of the terms with additional axioms in that file.
The extension that we're working on at the moment is disjointness checks for high-up entities within the ontology. For example, 'group' (CHEBI:24433) is defined as a (fiat) part of a molecular entity (CHEBI:23367), thus, should be disjoint from (free-standing) molecular entities. Adding the disjointness axiom to the ontology extension file and reasoning over it allowed us to pick up this error, where a molecular entity has been assigned an is-a parent that is a group:
(this will be corrected in the next release!)
Less straightforward to resolve, we also find that atom (CHEBI:33250) and molecular entity are not disjoint (because of the pesky monoatomic molecular entities (CHEBI:33238)), and that molecular entity and chemical substance (CHEBI:59999) are not disjoint, because mineral classes are classified beneath the molecular type of their constituent components (reminiscent of the nucleotide is-a carbohydrate problem that is now resolved). We're working on these!