As I'm reading further along about ontologies one thing is clear to me. The point of this entire thing is to take the real world - something you innately know and understand - and try to extract from your brain categories and relationships between them that a computer can understand. Once you've got that, said computer can answer queries, create a knowledge base and be trained to play around with the data at astonishing speed.
These definitions so far seem the best to me:
An ontology is a formal explicit description of concepts in a domain of discourse.
An ontology together with a set of individual instances of classes constitutes a knowledge base.
Ontologies consist of classes (eventually subclasses) or concepts. Classs have properties (features and attributes of the class, sometimes calles slots as well) and there can be restrictions on those slots or properties (those restrictions can also be called facets).
Like with all new domains you need to be familiar with a few words before you can understand something like the definition above.
Object oriented programming in this case is both something that can help and that can hurt. Ontologies are composed of classes and subclasses, and have instances. Sounds familiar, right?
You can safely use your understanding of what an instance is in OOP to help you understand instance in an ontology. For classes however, it's a bit different. In OOP you tend to use classes along with methods, and creating a class will entail you coding the methods, thinking whether or not they're in the right place or need to be split off, instantiating classes so you have access to their methods etc. In ontologies a class is much more descriptive. When you create the ontology you describe the properties of the class and think much more in terms of structure than in terms of what the class does. An ontology is a mapping, not a program. It can be part of a program however, but that's for a later post.