A proposal for a simplification of the annotations subsystem

Hello,

I know it is quite late in the day, but while I was implementing the resolution from the last F2F, I've noticed several
opportunities for simplification of the current spec. Please understand that

- this would be just a simplification/clean-up of the structural specification and it does not incur any fundamental changes
regarding the actual capabilities of annotations, and

- it would affect only the structural specification, the RDF Mapping, and the XML Syntax documents.


Problem
----------------------

Currently, in the metamodel of OWL 2 we have three classes for various types of annotations:

- AnnotationByURI,
- AnnotationByLiteral, and
- AnnotationByAnonymousIndividual.

This is quite unwieldy.

Furthermore, the metamodel of OWL 2 currently contains two different axioms for associating annotations with things:

- URIAnnotation and
- AnonymousIndividualAnnotation.

Again, quite unwieldy.

Another problem is that, while it would be intuitive to expect the structure of annotations to be similar to assertions, this is not
the case. A property assertion consists of two individuals and a property, and it specifies just one fact. In contrast, a single
annotation axiom specifies a set of annotations for an individual, and essentially specifies more than one fact. Consider the
following examples:

(1) PropertyAssertion( P i1 i2 )
(2) URIAnnotation( i1 Annotation( AP1 v1 ) Annotation( AP2 v2) )

In fact latter syntax is quite unwieldy, because it uses the terminal 'Annotation' quite often.

Because of this, round-tripping of annotations through RDF is not possible. If you wrote (2) as two separate annotations, serialized
the ontology into RDF, and read everything back, your two annotation axioms would be merged into one axiom (2).


Proposal Outline
----------------------

The proposal consists of two changes.

The first problem could be addressed by introducing a class called, say, AnnotationValue, as a superclass of URI, Literal, and
AnonymousIndividual. Then, we could replace three types of annotations with just one type that refers to AnnotationValue.

The second problem could be addressed by breaking up axioms of the form (2) into several axioms, each of which provides just one
annotation value. Thus, instead of (2), we would write something like this:

(3) Annotation( AP1 i1 v1 )
(4) Annotation( AP1 i2 v2 )

This would actually bring the structural specification closer to RDF.


Concrete Proposal for the Grammar
----------------------

Here is what the grammar of the FS might look like:

AnnotationSubject := URI | AnonymousIndividual
AnnotationValue := URI | AnonymousIndividual | Literal
Annotation := 'Annotation' '(' axiomAnnotations AnnotationSubject AnnotationValue ')'

axiomAnnotations := { StatementAnnotation }
StatementAnnotation := 'StatementAnnotation' '('
    { StatementAnnotation } AnnotationProperty AnnotationValue ')'
AnnotationAxiom := Annotation | SubAnnotationPropertyOf |
    AnnotationPropertyDomain | AnnotationPropertyRange

Here is a summary of the grammar changes:

- What is currently the Annotation nonterminal would become StatementAnnotation.
- What is currently URIAnnotation and AnonymousIndividualAnnotation would become Annotation.

I believe that the result would be a much simpler metamodel and a much nicer syntax. I could enact this change really quickly.



Please let me know how you feel about this. Could we perhaps discuss this at the next teleconf?

Regards,

	Boris

Received on Monday, 17 November 2008 19:44:31 UTC