Annotation System Proposal
by Bijan Parsia
In spite of incredibly sore hands and a tendancy to go into shock every hour or so (let’s just say that the corticosteriod injection into the wrist did not go well; sufficiently so that we didn’t even try the knuckle joints), I managed to flesh out a proposal for a new Annotation System for OWL.
Currently, in OWL DL, annotations only occur on “entities” (i.e., classes, properites) via a specially declared set of AnnotationPropertys [sic!]. OWL 1.1 also allows annotations on axioms, so not only can you say that “The class Person was created by Bijan”, but you can also say, “person subClass Cheetah was created by notBijan yesterday”. Obviously, axiom annotations are critically important for any serious ontology engineering project, esp. if it is developed by a team.
In both cases, however, the annotations are “semantics free”. Now, obviously they have semantics in the sense that editors can react to them and so can applications and definitely so can people. However, from the reasoner point of view, they are nothing more than comments and can be thrown away without harm. But, as a result, the reasoner can’t help either! So if you use Dublin Core qualified elements (e.g., date-modified) in your annotations, you cannot use a statement like (date-modifed subPropertyOf date) in the way you might hope and expect. In fact, if you have a date-modified annotation statement and add that TBox statement, you end up in OWL Full.
OWL Full’s solution, roughly, is to be pretty smushy so that AnnotationPropertys [sic] can be ObjectPropertys [sic] and thus the reasoner is sensitive to them. In OWL 1.1, you can get much the same effect via punning: Instead of making your statements about entities using annotations, just use regular properties and let punning make that class an instance.
There are several problems with this approach. The most significant to my mind is that it seriously mixes annotations with domain statements. Most of the time, this is just wrong: As an ontology author, I don’t want to have to consider whether owl:Class is an instance of Person, esp. if all I did was put an annotation on Person.
Also, you might want the logic of your annotations to be fairly different than the logic of your domain. For example, you might want the logic of your annotations to be very simple. Or you might want your annotations to have closed world assumption semantics (e.g., so you can validate the annotations, rather than inferring stuff about them). Currently, the only way to get this in OWL is with a non-standard extension or by separating out your annotations into a separate document.
My proposal builds this separability into OWL, so you can annotate more or less as normal, but get the effect of isolating your annotations from your domain. I also introduce the notion of “mustUnderstand” annotations, that is, annotations which can affect the domain. One might use this for language extensions like Pronto or constraints, but also for more specific interventions. For example, you might want to have some production rules — or some Javascript! — that hack your domain axioms in a variety of ways. The new annotation system would allow for such hacks but, perhaps, in a more controlled way.
Anyway, it’s still in flux, so feedback is welcome. I imagine that you’ll be able to access the various annotation spaces via SPARQL easily enough (similar to what Boris proposed in his metaviews paper). Such annotations can also be used for metamodelling extensions, though that is a tricky area, for sure.
The new annotation system involves some extra complexity, alas. I tried to make it “dumb down” in a useful way, so that just a simple extra statement in your OWL 1.0 or OWL 1.1 documents will get you some nice new behavior. It’s still early days, of course.
Feedback welcome.
Waterboarding is torture; really really bad torture. People who refuse to acknowledge this should be barred from any government position wherein they have oversight over interrogation. At the very least!