Controlled Vocabulary vs Ontology

The question is: "a Controlled Vocabulary like SKOS is an ontology or not?" I wonder if anybody can clarify whether a controlled vocabulary is different to an ontology or not. In different papers/texts this disambiguation can be found. I need a clear explanation to understand the difference between an ontology and controlled vocabulary.

Here are some extracts from Woody Pidcock's article with Michael Uschold's additions:

A controlled vocabulary is a list of terms that have been enumerated explicitly. This list is controlled by and is available from a controlled vocabulary registration authority. All terms in a controlled vocabulary should have an unambiguous, non-redundant definition. A controlled vocabulary may have no meaning specified (it could be just a set of terms that people agree to use, and their meaning is understood), or it may have very detailed definitions for each term.

A formal ontology is a controlled vocabulary expressed in an ontology representation language. This language has a grammar for using vocabulary terms to express something meaningful within a specified domain of interest. The grammar contains formal constraints (e.g., specifies what it means to be a well-formed statement, assertion, query, etc.) on how terms in the ontology’s controlled vocabulary can be used together.

From the SKOS Reference:

The SKOS data model is formally defined in this specification as an OWL Full ontology [emphasis added]

If one agrees with the distinction cited by eye, it really makes sense to see SKOS as an ontology and not just as a (controlled) vocabulary, as there are numerous constraints on the SKOS terms (enumerated by "Sn"), where most of these constraints can be expressed in terms of OWL (2 Full) axioms placed on the SKOS terms. For example:

  • constraint S10 declares skos:prefLabel and skos:altLabel to be instances of owl:AnnotationProperty ("skos:prefLabel rdf:type owl:AnnotationProperty");
  • constraint S11 requires both of them to be sub-properties of rdfs:label ("skos:prefLabel rdfs:subPropertyOf rdfs:label"); and
  • constraint S13 forces them to be mutually disjoint ("skos:prefLabel owl:propertyDisjointWith skos:altLabel").