Ontology Import vs. owl:sameAs in Ontology Design

I am under the impression that there are two approaches when designing an ontology:

  1. search for other ontologies and embed some of their classes into my own ontology
  2. create unique identifier for each term and set a data link with owl:sameAs or owl:equivalentClass

Is that correct? Is there something to be considered best practice or why should I choose one alternative over the other?

In my case I design an ontology for investigations of coral reefs, which includes surveys, different results, different metrics, kind of complex and something like this cannot already be found in search engines.

However, things like Organism, Substrate can be and for geolocations like Country, Settlement and Region I already use the places ontology.

There are several approaches that you can take, depending on the use case:

  1. Import the ontologies that contain the terms that you need.
  2. Reuse the terms that you need from external ontologies, but do not explicitly import them.
  3. Redefine your own terms.

Approach 1. is the most powerful: it makes all the terms and all the axioms from the imported ontology part of your ontology. You can then reuse the terms, extend them with more axioms, link them to your own terms etc. The knowledge of the imported ontologies is integrated with the knowledge of your ontology and you can do rich inferences. However, if the imported ontology is very big and expressive and you just need a few terms, it's not always the best option.

With approach 2., you don't benefit from the axioms of the external ontology unless you copy the relevant axioms too. But you benefit from the fact that you are reusing existing terms that are possible well known. Take the example of FOAF. If you are using foaf:Person as a class for persons, even if you don't import the FOAF ontology, people will be able to use tools that are specifically made for FOAF. They will be able to query your dataset with the same SPARQL query as for other datasets using FOAF. Moreover, in case a more accurate definition of the term is needed, one can also use the "follow your nose" method which consists in looking up the URI of the term with an appropriate protocol, and getting back the ontology document. By doing so, you don't even need owl:imports very much. If you insist on having a valid OWL DL ontology, you can declare the terms by explicitly saying whether they are object properties, datatype properties, annotation properties, classes or individuals.

With approach 3., you have full control of the terms. This may be a good choice if there is only poorly designed ontologies for the terms you need. Or, you may disagree with the definitions of the other ontologies. Or you are concerned by the fact that external ontologies may change at any time, possibly disappearing completely. In any case, if you have your own terms that mirror existing terms from other ontologies, you can also provide the correspondences between your terms and the others. In that case, I recommend that you provide those outside your ontology.

You can combine all the approaches, importing some ontologies (e.g., FOAF), reusing terms from others (e.g., Dublin Core) and making your own terms in some cases. The approach you choose in each case can be based on reasoning issues (expressiveness, size, conformance to DL, modularity), querying issues, robustness, linkage, reusability, taste, belief, mood, magnetic field, humour, weather, topology, spirituality, life :)

By the way, if you are working in the domain of coral reef, you should take a look at the very good ontologies of the FAO.

First, two things to be considered (and I am assume that you are talking about OWL here):

  • When you import an ontology O+ into your ontology O (using owl:imports), then all the axioms of O+ become part of O. Therefore, you cannot just "reference some" entities from O+ in your own ontology, but you get everything that is in O+ -- including everything in all the ontologies imported into O+ itself. That might not be what you want.

  • When you add owl:sameAs, owl:equivalentClass or owl:equivalentProperty statements to your ontology O linking to terms that are defined in a different ontology O+, but without importing O+, then you have made essentially no progress at all. Without an explicit import of O+ (or, technically likewise, a physical merge of O with O+), all those equivalence statements are like "dangling links", just saying that one unknown term T1 is equivalent to some other unknown term T2. It's like saying that "foo is equivalent to bar", but what's "foo" and what's "bar", afterall? So that's most probably not what you want.

If you want "just the right amount", that is, only the definitions of (or subsets of axioms concerning) those terms of the other ontology O+ that you are actually interested in, then it would be good to have O+ first splitted up into a collection of module ontologies O1+ ,..., On+, nicely separated such that there is one term or a meaningful group of related terms per module ontology, and you would then import just those module ontologies that you are interested in.

In general, I'm afraid you cannot assume that such a splitting into modules already exists, so you have to do it yourself, provided that you have control over the imported ontology (well, you could always do it for a local copy of O+, but if you want to publish your own ontology, then you would need to publish the imported modules as well). In the future, it may become a habit of ontology authors to build ontologies as sets of meaningful modules (and build the full ontology as simply a "facade" ontology consisting of a set of owl:imports directives to the module ontologies), just as it has become a habit of software authors for a long time now to create software in a modularized way to allow for better reuse of the different components. But I don't know if ontology authors have already started to think this way.