If you managed to complete the last section you probably noticed that ontologies are relatively complex. You might be wondering what advantages do people and programs gain by expressing information in this form over other forms? For example, given your simple sommelier application, you could probably construct a relational database to represent the same type of information. There are several reasons to use ontologies.
First, formal ontology specifications such as OWL define a standard way of capturing and sharing the understanding of things in our world. The standardization of the form of this understanding allows ontologies to be reused, extended, and translated. In fact, there are hundreds of free ontologies available through the web that you could reuse in your own application as we are doing for your sommelier. Additionally, you could create your own ontology that extends someone else's ontology. The wine ontology, for instance, extends a food ontology. As another example, a company specializing in investments could create an ontology built on top of more general financial ontology.
Second, and perhaps more importantly, ontological representations such as OWL facilitate inferencing and consistency checking. In the semantic space, reasoners are a type of tool that can deduce new relationships from ontologies. The ability to make such deductions is referred to as inferencing and can greatly simplify the creation of a complex model because many of the relationships can be inferred. Reasoners also can help detect logical errors in an ontology.
For example, in the wine domain an individual wine can exist in multiple classes. A red bordeaux wine is a type of red wine, a type of French wine, and also possibly a type of strong wine. To attempt to model this multiple inheritance graph of classes would be both difficult and error prone. Inferencing makes a simpler approach possible.
Instead of declaring BordeauxWine to be a subclass of multiple parents, I can simply declare it to be a type of wine and restrict this class to include only individual wines from the BordeauxRegion of France. Then, I can create a separate class called FrenchWine and declare that it is the set of wines produced in the FrenchRegion. A reasoner will be able to infer that BordeauxWine must also be a type of FrenchWine because the BordeauxRegion is a type of FrenchRegion.
The asserted (explicitly defined) hierarchy of classes in the wine ontology is relatively flat (see Figure 4). This is the ontology as it was explicitly defined in its OWL document.
After running this ontology through a reasoner, you get the much more complex ontology represented in Figure 5.
It is hugely convenient to model the ontology shown in Figure 4, yet be able to ask questions of it as if it were as robust as the model demonstrated in Figure 5. You won't get into inferencing much more in this article, except to show how to leverage a reasoner in Java applications.