Web Ontology Language (OWL)
OWL, short for the Web Ontology Language, is an extension of RDF Schema (RDFS) and is based upon DAML-OIL (The markup language made from the DARPA Agent Markup Language and the Ontology Inference Layer). It was created to be an improvement to RDFS in terms of expressiveness, as RDFS was intended to be a simple, easy to understand language without much expressiveness. OWL is based on RDF syntax, which is in turn based on XML syntax, and is currently gaining popularity to be the markup language used for the semantic web.
Because of the better expressibility of OWL, it is more machine-friendly in that its inference capability is superior. Its semantics are well-defined, and since it produces unambiguous results, it is very useful for automated reasoning.
However, one might ask why there is only one language OWL; why is there a one-size-fits-all approach to the task of defining ontologies? Surely for applications where a lot of reasoning is required, it would be better to have a less expressive language? We could use RDFS, but in fact OWL is split into three different languages: OWL-Full, OWL-Lite and OWL-DL, in which DL stands for Description Logic (a very good subset of OWL for reasoning) and Full being the only one of the three that is downwards compatible with RDFS.
On the other hand, the work of Walton (2007) states that "...there is a trade-off between expressibility and efficient reasoning. In general, the more features we have in the language, the more difficult it becomes to reason with the language." As such, although OWL produces good results, it is not so computationally efficient; in particular, the OWL-Full species is so expressively powerful that it has 'undecidable' reasoning: i.e. it has almost no reasoning support at all, as the language is too complex for the machine to reason with it in any practical manner. On the other hand, OWL-DL, the description logic branch of the language, is geared towards efficient reasoning; however, it is therefore limited in its expressiveness, as the efficient reasoning capabilities of the language comes at a price.
Here is some example OWL-Lite code (adapted from Agency and the Semantic Web by Walton (2007), p41):
<owl:Class rdf:ID="PCType" /> <owl:Class rdf:ID="Manufacturer" > <rdfs:subClassOf rdf:resource="#PCType" /> </owl:Class> <rdf:Description rdf:ID="HewlettPackard"> <rdf:type rdf:resource="#Manufacturer" /> </rdf:Description>
OWL's extension to RDFS vocabulary essentially allows the following things:
- We can define classes to be the union or intersection of other classes; We can also define transivity, i.e. if A has B and B has C the machine can infer that A has C as well.
- OWL allows us to define a disjoint class; this defines a class to be either of one type, or another type, but not both (or only one of a set of classes). We could use this, for example, to define a class Food as the union of Edible and Unedible, which we could say are disjoint classes, such that an object of type Food is either edible or not edible.
- Cardinality restrictions on an object are allowed: for example, we could say that an object of type Paper can have only two sides, and only one size.