There are mainly two research areas that investigate Ontology: philosophy and AI. These disciplines intersect in many subjects; while philosophy questions the essence, AI seeks to formalize them and hopefully putting them in practice.
Such is Ontology research. In philosophy, ontology is often described as the systematic account of Existence and is seen as the primary branch of metaphysics . It seeks to find the Categories of Existence, and further establishing the relations between them. For instance, the question "Is There A God?" is an ontological one. Category has been first defined by Aristotle and schemes of Categories have been devised by many other philosophers since then. Likewise the properties of Categories and relations between Categories would be of interest to a scholar of metaphysics.
On the other hand, ontology is conceived a bit differently in AI; it is viewed as a specification of conceptualization. Note however, that ontology in AI is not disparate as it rests on the work of philosophers. Deriving from Husserl's illuminating work on ontology a wealth of research on formal ontology has emerged.In AI, ontology takes on a cognitive perspective. Since an intelligent agent should have world knowledge, it is useful for us to study what knowledge of the world exists. This is achieved by an abstract theory of knowledge which formalizes the knowledge in terms of objects, classes, relations, functions and axioms. A comprehensive overview of ontology use in AI may be found here. Usually a declarative knowledge representation language with an ontological commitment facilitates knowledge sharing between agents.
An ontology is a formalism that makes it easier for humans or machines to share knowledge in a structured way. By this, I refer to ontology as a theory of classification. An analogy might put us in better perspective. In programming, we have class-based languages. In these languages, there are constructs called class, instance and method. These constructs have even been standardized to be language independent such as IDL. As a benefit of these constructs, we often show that it enables code re-use. It does so, because it is a good way to abstract messy implementation details. The language makes it possible to make a useful classification of code. For instance, inheritance relations helps us understand generalization / specialization in the code. Also it has some constraints on how these constructs are to be used. For example, a class must be instantiated to create an object. Though, it does not make the execution of the code better for the computer. It makes it easier for the people to share and re-use the code. An object-oriented design that does not make it easier for the people may be considered unsuccessful. So an object oriented language may be viewed as an ontology of code.
Ontology may also refer to a particular classification. For instance, let us think what the most general concept is, ENTITY might be a good candidate. Now, we might say that there are two kinds of entities: ABSTRACT and CONCRETE. One might prefer a different terminology, for example TANGIBLE and INTANGIBLE. If we can formalize our knowledge about a topic area, then it would be an ontology of that topic. For example, we might have experts state their knowledge about biology. Concepts in a biological ontology might be ORGANISM and GENE. The kinds of concepts, the functions (or we might say properties) of concepts, the relations between concepts, instances of concepts and axioms (statements about domain that are taken to be true) that express our knowledge of biology would constitue an ontology of the biology domain.
We do not have to be experienced in programming to explain what an ontology is like. An ontology states what is essential for the conceptualization of knowledge. It should give us a way to express our knowledge. For instance, to construct the biological ontology, we would need a consistent and formal description of what a concept is, what a relation is and so on. That becomes a specification of conceptualization; in what ways conceptualization can be accomplished.
When we have a coherent and consistent collection of such ontological statements, we have a useful ontology which may be used to let programs reason about biology. If we have a good ontology of biology, we might ask a program to plan an experiment for finding the gene responsible for a specific biological process. It would consult its Knowledge Base and use the facts it knows of biology to come up with a plan. Perhaps the system would consist of many agents, and those agents would use the same ontology to communicate their beliefs, questions, etc. in order to accomplish the task given by user. Note that a specific problems solver's knowledge representation may have to be problem specific and ontology is usually concerned with the common knowledge between agents which is representation neutral. A planner may have to be more efficient / specific in its knowledge. An interfacing agent would then gather the result and communicate via a human-computer interface uttering maybe " If you pour this liquid down the tube, I think it might work out.". That is the use of ontology AI researchers wish to accomplish.
Obviously, more than one ontology would be needed for such a spark of brilliance. It might be necessary to build a formalization of all common sense which is a very difficult task. Research groups like KSL and companies such as Cycorp try to find methods to build big knowledge bases.
An example would be illustrative. The snapshots below are made with KSL Network Services Ontolingua server. They depict the overview of Documents ontology.
These sceenshots depict an overview of Documents ontology. The first one includes general attributes of the ontology (such as source code) and the ontologies it includes. The second presents us a class hierarchy and names of relations and functions in the ontology.
In the first screenshot, we see that the Documents ontology includes several other ontologies. Ontolingua server supports modular ontologies, so that an ontology module can use other ontology modules; similar to the way software libraries in operating systems or packages in OO languages are a construct of modularity. In fact Ontolingua's package system is similar to CLOS packaging system.
As seen in the second screenshot, the Ontolingua server gives us a frame-based view. The subclass-of relations are interpreted as a class hiearchy. In addition, we see that some relationships and functions have been defined. For instance, the has-author is an authorship relation among documents and authors. Functions are defined as well, i.e the number-of-pages-of is a function which gives how many pages a given document instance has. Also, each class has some slots, some defined in its own class and some inherited from a base class. Here is the detailed view of Document class:
There are three kinds of components of the class in this view.
We cannot describe here the whole ontolingua server and applications, however the examples here provide a glimpse of what an ontology looks like. One point to note is that ontology is not equivalent to object-oriented programming. Although the terms in OOP have been derived from research in AI, the OOP environment is suited for programming and is thus built according to programming conventions and practice. For instance, in OOP classes are by default disjoint and exhaustive; however this assumption does not hold in an ontology. OOP may thus be considered to be a domain-specific specification at most. A programming modelling language like UML is just another PDL to torment programmers. :) Likewise for XML; it is only a markup language. A specification of conceptualization which is admissable as an ontology would be useful for any knowledge.