I saw several java job descriptions require knowledge of ontology.
Well that's nice to see at last. I'm tired of years of being an
unemployed ontologist.
Ontology is the branch of philosophy dealing with "being". No so much
"Are things?" in the "I think therefore I am" sense, but more "If things
are, then what are they ?"
For a discipline connected with the definition of what things are, then
it's surprisingly hard to pin down what "an ontology" is. I can't do
this, and I've been trying to come up with a snappy description for a
few years now. The best I've managed is to give up on defining "an
ontology" and instead talk about "ontological features" that a
description might have, leading it in that direction. Ontologies are a
lot like schemas, such as XML schema - but they're much more besides.
There are maybe four "ontological directions" an ontological description
can go in - not all ontologies do everything, but they have to do some
of this.
First of all there are objects and their properties - the same old stuff
schemas and database models have dealt with for years.
Secondly there's a class and subclass structure that is familiar to OO
programmers. These get talked about as "subsumption ontologies", but
beware those obsolete old beardies who think that subsumption is _all_
there is to an ontology.
Thridly (and most usefully, in practical applications right yesterday)
there's taxonomy. Taxonomy is about maintaining vocabularies of
pre-defined endpoints that you can use to label other things. You can
call it a badger, I can call it lunch, but we can both agree to share a
Linnaean taxonomy and recognise that we're both dealing with
_meles_meles_
Taxonomy is _not_ ontology. Many "ontologies" around today are really
just taxonomies and go no further.
Fourthly, and the interesting part if you're following the W3C path from
SHOE to DAML+OIL and now to OWL (web ontology language) is the addition
of restrictions. If we constrain property values to have particular
values, then we can shift from merely primitive classes to defined
classes, and that's where we can start to do interesting machine
reasoning.
With properties, we can state that "pizzas have toppings".
With classes we can have "vegetable toppings" and "meat toppings"
With taxonomy we get "tomato topping" and "mozarella cheese topping" for
an "Armenian Hot pizza".
With restrictions we can state "All pizzas that have a cheese topping
will be known as 'cheesy pizzas'"
Now let a reasoner loose on our ontology and _it_ can tell _us_ which
are the "cheesy pizzas". We don't label our pizzas as "likely to give
Aunt Mabel wind", we just set up discrete rules about what goes on a
particular named pizza, and the dietary effects on onions, then let the
machines work out the rest.
Do this for an ontology with thousands of classes and it starts to get
interesting.
Actually what it mainly does (in the Description Logics world) is to
tell you that black = white and throw you back into working out where
your description was wrong. it is _very_ difficult to accurately
construct a non-trivial ontology without errors.
"All the cool kids use Java" - danbri
You don't need an ontology to use Java, but you pretty much do need Java
to use ontologies. All the good onto tools are built around Java, with
very few exceptions.
Download Protege (from protege.stanford.edu) and have a play with that.
This is just about the leading edge of where the useful, maintained
tools are.
Find the "Ontology 101" paper to explain "what" and the Manchester
Protege pizza tutorial for a tutorial on "how".
For a free reasoner try Pellet ("OWL Pellet" - groan). It's easy to
configure, but poorly documented - start it from the scripts in the
install directory, but note that it runs on port 8081 by default and the
pizza tutorial (which is slightly old) talks about Racer running on 8080
instead.
Protege is nice in that it supports both frame-slot and description
logic based systems. Most people today are probably running OWL-DL as
the back end to it, but it's important not to get blinkered and think
that the tool you use everyday represents the only way to approach a
problem.
The only thing I _really_ know about ontologies is that no-one knows
much about ontologies - particularly in real-world applications of
machine reasoning. There's no reason to believe that any tool we use
today will still be seen as useful in 10 year's time. It's a rapidly
changing field and we're nowhere near there yet.