proposal to close ISSUE-16 by adding annotations on annotations

               Middle-class Annotations

This is a proposal to close ISSUE-16 by incorporating syntax for
annotations on annotations into OWL 2.  It fleshes out version 2a of the
proposal that I made in January, which is archived at
http://lists.w3.org/Archives/Public/public-owl-wg/2008Jan/0106.html

This is *only* a proposal to change the syntax of OWL 2.  There is no
need for any change to the semantics.  This proposal does not cover any
pragmatic issues related to processing annotations, as might be desired
to find out provenance information on axioms that generate an inference
or to generate a complete ontology of the annotation information in an
ontology.  These pragmatic issues could be handled by a WG note or even
left to tool builders.

This proposal does not cover the required changes to the structural
specification or the XML serialization, but the required changes are
straightforward and I believe that they can be left to the discretion of
the editors of Syntax and XML Serialization.


FUNCTIONAL SYNTAX:

Augment the productions for annotations as follows:

labelAnnotation := 'Label' '(' { annotations } literal ')' 
commentAnnotation := 'Comment' '(' { annotations } literal ')' 
deprecationAnnotation := 'Deprecated'
COMMENT:  the three productions above are just shorthands and not
          considered further here
explicitAnnotationByLiteral := 'Annotation' '(' { annotations }
                                                 AnnotationProperty literal ')' 
annotationByLiteral := explicitAnnotationByLiteral
                      | labelAnnotation | commentAnnotation | deprecationAnnotation
annotationByEntity := 'Annotation' '(' { annotations } 
                                       AnnotationProperty entity ')' 
annotationByAnonymousIndividual := 'Annotation' '(' { annotations } 
                                       AnnotationProperty anonymousIndividual ')' 
annotation := annotationByLiteral | annotationByEntity |
              annotationByAnonymousIndividual 
COMMENT:  all annotations can have annotations on them

RDF SERIALIZATION:

Change the foward mapping as follows:

2.2.4 Annotations on annotations:

An annotation always generates a single triple (2.1, 2.2.1, and 2.2.3)
or a group of similar triples (2.2.2).  An annotation on this annotation
"reifies" the annotation triple or triples as below and attaches the
annotation's annotation to that reification (each of the reifications),
so that if the annotation triple is
        x T(AP) T(ect)
then the annotated version of this annotation
        y rdf:type owl:Annotation
        y owl:subject x
        y owl:predicate T(AP)
        y owl:object T(ect)
and annotations of the form
        y T(AP1) T(ect1)
        ...
        y T(APn) T(ectn)
are produced instead.

Example

The following subclass axiom:

SubClassOf( Comment( Label("Profound") "Children are people." ) a:Child a:Person )

generates

_:x rdf:type owl:Axiom
_:x owl:subject a:Child
_:x owl:predicate rdfs:subClassOf
_:x owl:object a:Person
_:y rdf:type owl:Annotation
_:y owl:subject _:x
_:y owl:predicate rdfs:comment
_:y owl:object "Children are people."
_:y rdfs:label "Profound"

Deeper nesting is handled in the same way.


Augment the reverse mapping as follows:

Throughout the reverse mapping section, any triple match for s p o that
produces an annotation (in Table 9, Table 15, Table 16, Table 17, *and*
here) also allows a match of
        _:x rdf:type owl:Annotation
        _:x owl:subject s
        _:x owl:predicate p
        _:x owl:object o
and adds annotations to the annotation for each triple in G with _:x as
the subject as follows
        _:x *:y ct      { ... }         Annotation(*:y ct)
        _:x *:y *:z     { ... }         ExpandAnnotations(_:x *:y *:z)
        _:x *:y _:z     { ... }         Annotation( *:y _:z)
Any triples used here are removed.

Received on Monday, 11 August 2008 19:03:56 UTC