Ontology Engineering

[still in progress; updated 05-09-2007]

Coming from philosophy, I was pretty miffed at the appropriation of the term "ontology", as I hear people are miffed by the further appropriation of "ontology" to mean roughly "concrete logical theory expressed in a computational formalism". Some might be reasonably miffed by the further specialization to "in a logic-based computational formalism".

Oh well. I got over it; they should get over it. Language evolves in unpretty ways.

For current purposes, an ontology is usually a knowledge ("knowledge" indeed! sniff sniff) representation expressed in a computational formalism. The sort that are of primary interest to me are those expressed in logic based formalisms, such as propositional logic or description logics or full first order predicate logic or in various non-monotonic formalisms. Paradigmatically, programming languages are not such formalisms, though logic and functional programming languages blur the line (and often more than blur the line).

There is a W3C standard logic-based family of ontology languages, with the almost eponymous OWL being the one I work most with. Having a (more or less) nice language is not sufficient for effective ontology creation, development, and use, especially as the ontologies get large (there are complex ontologies with thousands of classes) and are developed by groups of people. Hence the need for services, education, and tools to support ontology engineering. Ontology engineering draws a lot of inspiration from software engineering, which should be no surprise: both processes result in computational artifacts. Ontology engineering is closer to conceptual modeling, database engineering, or data format design than to program development per se.

Language/Logic Design

I distinguish language from logic in part because languages may have extra logical features (to use a common parlance). OWL DL is a language whose underlying logic is (roughly) SHOIN(D). Notational variation may or may not affect the language/logic distinction (e.g., there are plenty of logics with a concrete syntax; and OWL has more than one!) --- the distinction is not hard and fast!

Reasoning Services

It would be a bit weird to have designed your ontology language around a logic and for the logic to support no practical and useful reasoning services. Conjunctive query answering is probably the most common sort of reasoning service (best seen when defined by an entailment relation), even putting aside relational (and other) databases. Traditionally, in description logics, query answering (in the sense of conjunctive queries over ABoxes) has not been a primary focus. Rather consisitency checking, class satisfiability, classification, and realization have dominated. These correspond roughly to "does the KB as a whole make sense", "does each class definition make sense", "what's the class graph implied by my axioms" (or "what are all the subsumption relations between named classes"), and "what are all the types of each individual".



Not-reasoning Services



See the Mindswap debugging page for now. Matthew Horridge and I are picking up this work.

Profiling (performance debugging)