Peter:
>> > This is a significant change to the abstract syntax, affecting just about
>> > every construction.
Jeremy:
>> That is because there are bugs or problems with just about every
>> construction changed.
>> See list below.
>>
>>
[...]
>> The changes are of three sorts:
>> - adding things agreed by the group but inexplicable left out of the WGs
>> document.
>> - adding things to enhance compatible with RDF and RDFS (explicitly listed)
>> - two specific changes called out as feature enhancements in the diffs list
>> * Named DataRanges (rather than having to use copy/paste)
>> * Individual Comparisons with Unnamed Individuals
>> which are permitted in the english description in section 4.2 of AS&S.
>>
>> There are no other feature changes.
>
>What about allowing descriptions as axioms? I do not believe that this
>significant change fits into any one of the three categories given above.
Minor syntactic variant on
EquivalentClasses(description)
already permitted in AS&S.
>
>> > It will require major changes to the semantics document,
>> > over and above any changes to the abstract syntax.
>>
>> Bluff. Give an example (other than the annotations stuff).
>
>There has to be an addition to the direct semantics to accommodate
>descriptions as top-level constructs.
Treat as
EquivalentClasses(description)
> There has to be an addition to the
>proof of the correspondence theorem to handle this construct. This is just
>for one of the many changes to the syntax.
The other *new* constructs are things like the classComparisons which
correspond directly to EquivalentClasses or DisjointClasses axioms
with two members.
Semantically all that is necessary is a minor transformation
from the revised syntax to the old form.
In terms of wordsmithing that might be an unsatisfactory
approach - but there is no new *semantics* here.
>> A far reaching bug is the transtive property side condition being
>> misarticulated. You have not proposed a fix. My proposed fix of treating
this
>> syntactic constraint in the syntax does involve changes to all rules
>> involving individual-valued properties.
>
>What is the misarticulation here?
In AS&S I read:
"Individual-valued properties that are transitive, or that
have transitive sub-properties, may not have cardinality
conditions expressed on them,"
as I have previously pointed out, all properties have the empty
property as a sub-property, and thus this condition prohibits
cardinality constraints in any ontology which includes the
empty property.
Moreover, I believe that the intended meaning of this
phrase includes consideration of owl:inverseOf, which
is not at all apparant, i.e. the following breaks the
intended side condition, but not the written words:
ObjectProperty( ivp1 inverseOf( ivp2 ) )
ObjectProperty( ivp3 super( ivp2 ) Transitive )
EquivalentClasses(
restriction( ivp1 cardinality(3) )
)
This construct is syntactically prohibited in my revision.
>> To list the bugs with the other productions:
>>
>> directive ::= 'Annotation(' URIreference URIreference ')'
>> | 'Annotation(' URIreference dataLiteral ')'
>> | 'Imports(' URI ')'
>>
>> do not allow annotations on or imports within imported ontologies, since
the
>> subject URI is fixed for all. Fixed using a repeating header constuction.
>
>Huh? Why cannot an imported ontology have annotations?
FileA:
<owl:Ontology rdf:about="">
<dc:creator>Smith</dc:creator>
</owl:Ontology>
FileB:
<owl:Ontology rdf:about="">
<owl:imports rdf:resource="FileA"/>
</owl:Ontology>
To tell whether FileB is in OWL Lite, OWL DL or OWL Full,
we take its import closure and get the following set
of triples
<FileA> rdf:type owl:Ontology .
<FileA> dc:creator "Smith" .
<FileB> rdf:type owl:Ontology .
<FileB> owl:imports <FileA> .
In the mapping rules in AS&S all four triples only match
productions that use the U symbol as the subject of a
triple
e.g.
Imports(URI)
=>
U owl:imports URI .
This symbol is defined by:
"the URI of this document is given as U. "
Hence, U must be <FileA> by considering the first
triple and be <FileB> by the third triple.
This gives a contradicition and the example is in OWL
Full.
One of the many minor bugs in the syntax in AS&S.
>
>> datatypeID ::= URIreference
>> classID ::= URIreference
>> individualID ::= URIreference
>> datavaluedPropertyID ::= URIreference
>> individualvaluedPropertyID ::= URIreference
>>
>> result in ambiguous constructs since the typing gets lost in the transition
>> from the lhs to the rhs. Fixed by replacing the RHS with terms.
>
>There is a source of ambiguity in the abstract syntax that was introduced
>in one of the changes to the abstract syntax. In my opinion a better way
>to remove this ambiguity would be to appropriately tag restrictions as
>datavalued restrictions or individualvalued restrictions.
I don't believe I have understood this -
it feels like cross-purposes.
If I see an abstract syntax construction
Class( <FileA#c> )
and another
ObjectProperty( <FileA#c> )
there is a problem - but to know that I need to know
the grammar in enough detail to know that the
parse tree for the class construction uses
the classID non-terminal, and the parse tree for
individualValuedProperty uses the individualValuedPropertyID
non-terminal.
I personally find it clearer if this is made
explicit in the abstract syntax construction vis:
Class( classId(<FileA#c>) )
and
ObjectProperty( individualValuedPropertyID(<FileA#c>) )
This is not a big deal, but then a lot of things that
make life a little harder do add up.
So this change should be seen as a suggested editorial
improvement - try listening to helpful suggestions.
>
>> individual ::= 'Individual(' [ individualID ] { annotation }
>> { 'type(' type ')' } { propertyValue } ')'
>> propertyValue ::= 'value(' individualvaluedPropertyID individualID ')'
>> | 'value(' individualvaluedPropertyID individual ')'
>> | 'value(' datavaluedPropertyID dataLiteral ')'
>>
>> accept for the oprthogonal annotations issue the proposed changes are
trivial
>> But I see it as an editorial improvement to uniformly use the nonterminal
>> symbol as the functor in the abstract syntax tree, avoiding any confusion
>> with the hasValue construct.
>
>Why should this be a problem?
When looking at the mapping rules the reader has to
take terms embedded within the T(_) construction in the
middle column, expand them with the grammar to some
new constructs and then match those new constructs against
some other row in the left hand column.
It appears that you have not done this as much as I have.
My user feedback to you is that it would be easier if
the words I have to search for are used as consistently
as possible.
A consistency suggestion is to "uniformly use the nonterminal
symbol as the functor in the abstract syntax tree".
So - it is a problem because the principal user of the
mapping rules to date has found it a source of unnecessary
mental effort.
Is it a great problem, no?
But since we are intending our documents to be read by
many thousands of people I suggest you save them that
small superfluous mental effort that you put me through
and accept this editorial suggestion.
>
>> restriction ::= 'restriction(' datavaluedPropertyID
>> { 'allValuesFrom(' dataRange ')'}
>> { 'someValuesFrom(' dataRange ')'}
>> { 'value(' dataLiteral ')' }
>> { cardinality } ')'
>>
>> changed to
>>
>> restriction [P1] ::= Restriction( complexDataPropID AllValuesFrom(
>> dataRange ) { restrictionComparison } )
>> [P2] | Restriction( complexDataPropID SomeValuesFrom(
>> dataRange ) { restrictionComparison } )
>> [P3] | Restriction( complexDataPropID Cardinality(
>> smallInt ) { restrictionComparison } )
>> [P4] | Restriction( complexDataPropID MinCardinality(
>> smallInt ) { restrictionComparison } )
>> [P5] | Restriction( complexDataPropID MaxCardinality(
>> smallInt ) { restrictionComparison } )
>> ...
>> as strict alternatives with one condition in each restriction (and fix to
>> EquivalentClasses problem in the { restrictionComparison } ).
>
>This change moves away from the frame syntax, which was one of the guiding
>sources for the abstract syntax.
Yes - this change is not intended as an improvement in the abstract syntax,
it is regretfully necessary to solve problems in the concrete syntax.
>
>> There are two problems with the published restriction syntax - the most
>> pressing for me is an aesthetic one - that the mapping rule for multipart
>> restrictions creates particularly strange constructs when combined with
>> complete class descriptions in OWL Lite. Trying to articulate those is a
>> mug's game.
>
>Perhaps.
Have a go - you have not tried to articulate OWL Lite triples
in English. That particular mapping rule can apply recursively
so an OWL Lite document can contain a named class
defined as an intersectionOf a list of [named classes]
or [unnamed restrictions] or [unnamed intersections of
unnamed restrictions or unnamed intersections of length 1
containing unnamed restrictions or further unnamed intersections
of length 1]
It is not acceptable to inflict such a disaster on our users.
>
>> The second is semantic:
>>
>> Ontology( Individual( type( restriction( dp ) ) )
>>
>> entails
>>
>> Ontology( DataValuedProperty( dp ) )
>>
>> according to the direct semantics,
>
>I don't believe that this is entailed in the direct semantics.
So
Ontology( Individual( type( datavalued-restriction( dp ) )
ObjectProperty(dp) )
is a legal and consistent ontology?
(using your notation from below)
>
>> but not when mapped to triples.
>
>There is an issue here, however. In response to requests, I tried to make
>the abstract syntax easier to use, which resulted in the antecedant
>ontology being ambiguous as to whether dp is an datatype property or an
>individualvalued property. My suggestion would be to change
>`restriction' to `datavalued-restriction' or something similar.
I think that only addresses a small part of the issue
I am not convinced that ease-of-use of the abstract syntax
should be the primary driver. Concrete syntaxes need to be
easy to use; the abstract syntax should be clear, which
is likely to lead to verbosity.
>
>> axiom ::= 'DisjointClasses(' description { description } ')'
>> | 'EquivalentClasses(' description { description } ')'
>>
>> as well as suffering from a very complex mapping rule, these constructions
>> also suffer from a similar semantic bug
>
>What complex mapping rule? It does result in O(n^2) triples, but so what?
See my recent post
http://lists.w3.org/Archives/Public/www-webont-wg/2003Feb/0156.html
which gives a worked example of this rule.
the problem is the impact on the bnode structures which
become distinctly non-tree like.
>
>> Ontology( DisjointClasses( classID ) )
>>
>> entails
>>
>> Ontology( Class( classID [partial] ) )
>>
>> but not when mapped to triples. (this bug appears a number of times).
>
>I don't see this as a bug. The correspondence theorem only works for
>separated vocabularies, and the vocabulary separation axiom will get this
>entailment back in the RDF-compatible semantics.
A repeated point-of-view difference is that you seem to worry
only about theoretical niceties rather than practical usability.
You seem to be technically correct about the correspondence
theorem.
The practical requirement is that given a first RDF/XML document
(say an empty one) and given a second RDF/XML document
say one with a single owl:Class element (corresponding
to the abstract syntax form above), does the first entail
the second?
The answer from AS&S is to map backwards from the
RDF as triples to an abstract syntax form, and then to
ask the question on the abstract syntax form.
That backward mapping is nondeterministic, and
the boolean yes/no is also nondeterministic with
both answers possible.
The correspondence theorem was meant to prevent that.
Since it doesn't it shows that the theorem statement
is flawed.
Fixing this problem is isolation is straight forward,
in my revised version I have applied the fix to
EquivalentProperties.
It requires at least two properties to be equivalent.
With DistinctIndividuals though the considerations
are different.
As in your english expression of the triple syntax I
would like:
[[
A node x in G is an all-different node if
...
and there is exactly one other triple
...
of one of the following forms, where l is a non-empty list
whose elements are individuals
x owl:distinctMembers owl:nil .
x owl:distinctMembers l .
]]
This is another mistake in AS&S since the abstract syntax rule
requires at least one individual so the first case cannot happen.
I think the correct fix to this one is to change the
abstract syntax rule to allow an empty list of
different individuals.
The motivation is that currently this is
the only place in the graph requiring a non-empty list of
individuals.
The other mapping rule for DifferentIndividuals (mapping to
O(n^2) owl:differentFrom triples) should be changed either
by deleting it (as in my revised version) or by requiring it
to have n >= 2.
>
>> All the Class and Property axioms fail to allow for owl:DeprecatedClass and
>> owl:DeprecatedProperty.
>
>Yeah, this late change didn't get into the abstract syntax.
It took me only a few minutes to add it to my rules ...
Also a few more would be needed for the semantics.
>
>> There is no provision in the abstract syntax for the ontology versioning
>> vocabulary agreed by the WG, which is in fact prohibited.
>
>Ditto.
This is more complicated syntactically since it only applies to
ontologies ...
>
>> The abstract syntax undermines the I18N requirements agreed by the WG.
>
>The abstract syntax does not currently allow for language tags. This
>should be changed.
Good.
How about Unicode Normal Form C?
What's your take on the internationalization issues to do with URIrefs?
Do you have any though as to how to permit Ruby annotation in
labels in OWL Lite (a feature available in both DAML+OIL and RDFS)?
>
>> Jeremy
>
>peter
>
Jeremy