- From: Peter F. Patel-Schneider <pfps@research.bell-labs.com>
- Date: Mon, 09 Sep 2002 12:57:05 -0400 (EDT)
- To: cewouter@cs.latrobe.edu.au
- Cc: public-webont-comments@w3.org
From: "Carlo Wouters" <cewouter@cs.latrobe.edu.au>
Subject: comments on abstract syntax for OWL (Lite)
Date: Sun, 8 Sep 2002 20:35:41 -0400 (EDT)
> Hi,
>
> I have been going through the documents that have been put up in regards
> to OWL and OWL-Lite, and I have several comments/questions/remarks that
> I thought are worth sharing (I'll focus mostly on the abstract syntax
> working draft here). I have to admit that I'm inexperienced in this
> area, so it is definitely not with great confidence that I bring these
> issues forward. Especially my ignorance in terms of BNF (in whatever
> extended form) might mean that my remarks are completely of the mark
> there, but after some consideration I decided to share them anyway, as I
> might not be the only one misunderstanding these documents, and even
> wrong comments might be helpful in targetting the documents towards a
> broader (and less knowledgeable !) audience (as I read was one of the
> proposed improvements).
>
>
> small mistakes [RS]
> -------------------
> - [FS] defines rdfs:Property, while in section 'Property Elements'[RS]
> it has namespace rdf. I assume that it should be rdfs, but I might be
> wrong (in which case the error is in [FS])
It is rdf:Property.
>
> Typos [AS]
> ----------
> - in the mapping table section 6
>
> Class( <classID>
> [partial]
> [complete]
> <description1> ... <descriptionn>)
>
> => No space between the '<descriptionn>' and the ')'
Spaces are not significant in this context, so no change is necessary.
That said, in other similar places I have a space, so I'm adding one here.
> <classID> rdf:type owl:Class .
> <classID> owl:sameClassAs _:x .
> _:x owl:OneOf T(SEQ <individualID1> ... <individualIDn>) .
>
> => Should be 'owl:oneOf' (small 'o' for one) instead of 'owl:OneOf'
Correct. I also had owl:OneOf in one other place.
> [<ID> owl:sameIndividualAs _:x .]
> _:x rdf:type <classID1> . ... _:x rdf:type <classIDn> .
> _:x <IDi> T(<value1>) . ... _:x <IDn> T(<valuen>) .
>
> => Should be '<ID1>' instead of '<IDi>'
Correct. This one doesn't really matter, but the next one, under
differentIndividualFrom does matter.
>
> _:l1 rdf:type owl:List .
> _:l1 owl:first T(<item1>) . _:l1 owl:rest _:l2 .
> ...
> _:ln rdf:type owl:List .
> _:ln owl:first T(<itemn>) . _:ln owl:rest owl:nil .
>
> => As discussed by Peter F. Patel-Schneider and Jos de Roo all the
> 'owl''s should be replaced by 'rdf''s.
Correct.
>
> _:x rdf:type ex::Book .
> _:x dc:author _:x 1
> _:x1 ex:name "Fred" .
>
> => instead of 'ex::Book' it should be 'ex:Book' (one colon)
> => instead of '_:x 1' it should be '_:x1' (no space between x and 1)
> => missing a '.' at the end of the second line
> (I've seen these comments - or at least one of them - somewhere in a
> mailing list, but I can't seem to find the message anymore, so sorry to
> the person who first spotted these mistakes for missing reference)
Hmm. I hadn't seen them. Thanks for pointing them out to me.
>
> Class(ex:Student complete ex:Person
> restriction(ex:enrolledIn
> allValuesFrom=ex:School minCardinality(1))
>
> => missing the final closing bracket at the end
Correct.
> - Questions [AS]
> ----------------
> - 5.1.1. Owl Lite Class Axioms:
>
> <axiom> ::= Class( <classID> <modality> {<classID>}
> {<restriction>} )
> <modality> ::= complete | partial
>
> This seems very strange to me, and similar expressions have been made by
> Martin Bryan as well (as a general issue that the notation '{}'
> sometimes would make more sense as occuring at least once).
>
> Class( ex:Book complete ) ; // this is correct
> Class( ex:Book ) ; // this is wrong
>
> To me (but as usual, I might be completely wrong) this says it is
> impossible to define a Class without providing any details. Not that
> that is a bad thing, I just thought that one was allowed to do that (Of
> course it is still possible by saying Class( ex:Book partial owl:Thing),
> which is true for all classes). However, in the mapping in section 6 we
> find that the terminals of modality are both made optional :
>
> Class( <classID>
> [partial]
> [complete]
> <description1> ... <descriptionn>)
>
> All of a sudden Class( ex:Book ) is considered correct. For that
> matter, even Class( ex:Book partial complete ) is correct, which strikes
> me as very strange. My intuition is that the BNF used in the table has
> a less strict syntactical impact, but if so, this probably should be
> made clearer, as it makes the syntax open to very different
> interpretation.
> Another one : Class( ex:Book complete partial) is wrong, but Class(
> ex:Book partial complete ) is still correct. In general a lot of -
> unnecessary - restrictions on the order of elements are insinuated.
> Completely disregarding the order is not possible, as <description> can
> be a ClassID as well, resulting in an ambiguity of which <ClassID> is
> which.
It should be [ complete | partial ] throughout. In the abstract syntax,
for now, it is required to say one or the other. The problem is that the
natural ``default'' would be partial, but this encourages sloppiness.
> Would Class( <classID> [partial | complete <description1> ...
> <descriptionn>] ) be closer to the truth ? I know it still lacks a
> grouping of the modalities (so that the '|' only applies to them), but
> I'm not sure how to do that.
This would not be correct. A typical partial definition is something like
Class ( Foo partial Person restriction(friend minCardinality=3) )
>
> - 5.1.2 OWL Lite Restrictions
>
> As noted by Martin Bryan, and acknowledged by Peter F. Patel-Schneider,
> the minCardinality and maxCardinality can both have a zero value. I
> assume this will change the syntax to something like:
>
> <Cardinality> ::= minCardinality( 1 )
> | maxCardinality( 1 )
> | minCardinality( 0 )
> | maxCardinality( 0 )
> | cardinality( 0 )
> | cardinality( 1 )
That is the current situation.
> (or maybe introducing <CardinalityOption> ::= 0 | 1 would be a better
> solution)
This would also work, although OWL Lite is supposed to be a constrained
sublanguage, so right now only the useful versions are allowed.
> Assuming this to be corrected, I still have following problem with the
> <restriction> syntax:
>
> <restriction> ::= restriction( <datavaluedPropertyID>
> {allValuesFrom=<dataRange>}
> {someValuesFrom=<dataRange>}
> {value=<dataLiteral>}
> [<cardinality>] )
> <restriction> ::= restriction( <individualvaluedPropertyID>
> {allValuesFrom=<description>}
> {someValuesFrom=<description>}
> {value=<individual>}
> [<cardinality>] )
> <cardinality> ::= minCardinality( <positive-integer> )
> | maxCardinality( <non-negative-integer> )
> | minCardinality( <positive-integer> ) maxCardinality( <non-negative-integer> )
> | cardinality( <non-negative-integer> )
>
> Is it intentional that only one cardinality can be given in a
> restriction ? A statement like :
>
> restriction(dc:author allValuesFrom=ex:Person minCardinality=1 maxCardinality=6)
>
> is incorrect (as I read the syntax specification), and should be defined
> in two steps (at least), which seems a bit cumbersome.
This is allowed, from the third option for <cardinality>.
restriction(dc:author allValuesFrom=ex:Person maxCardinality=6 minCardinality=1 )
is currently not allowed. I suppose that it should be allowed, but the
abstract syntax is not now an exchange syntax, so disallowing the
wrong-order cardinalities doesn't seem to be a serious problem.
> Ambiguity issues between OWL and OWL Lite
> ------------------------------------------
> - section 6, second example after mapping table.
>
> Class(ex:Student complete ex:Person
> restriction(ex:enrolledIn
> allValuesFrom=ex:School minCardinality(1))
>
> 'minCardinality(1)' is used here, which has previously been defined
> (section 5.1.2) as being part of the OWL Lite syntax. Because OWL Lite
> is said to be a subset of OWL, these OWL Lite syntax can be used in OWL
> as well (or is this a wrong assertion ?). However, the mapping table
> states the following:
>
> restriction( <ID> minCardinality=<min> )
>
> Doesn't this mean that the 'minCardinality(1)' should read
> 'minCardinality=1' ? If both are allowed (I thought that any OWL Lite
> ontology specification is also a valid OWL ontology specification),
> maybe this can be represented in the mapping as well.
Hmm. Correct. I've changed to the = construction throughout.
> Also notice that according to the strict interpretation of the mapping
> it doesn't cater for the appearance of an 'allValuesFrom' and a
> 'minCardinality' in the same restriction. A more correct (if I
> interpret the syntax correctly) statement would be:
>
> Class(ex:Student complete ex:Person restriction(ex:enrolledIn
> allValuesFrom=ex:Scool) restriction(ex:enrolledIn minCardinality=1))
I believe that multiple allValuesFrom and cardinalities are allowed
throughout. The first mapping for restriction breaks up all the
components, which are then treated separately.
> Of course I prefer the example as it is given in the document (and so
> would most people, I believe), but I can see that the mapping table
> grows a lot more difficult when incorporating all these possibilities.
> As I mentioned before, maybe the mapping table shouldn't be taken as a
> strict syntax mapping (i.e. those are the only ways statements can be
> expressed), but rather as examples of how small pieces individually are
> mapped (without carrying any implications on how the pieces are allowed
> to be fitted together (which can be more accurately defined - and IS
> more accurately defined most of the time - in section 5)). If this is
> the case, again, it might prove useful to emphasize that point.
> As a more general, and also final, point; a clarification of the
> expected or intended usage of the abstract syntax is most welcome, as I
> first considered to use it as a more user-friendly and non-graphical way
> of interactively letting users construct ontologies, but in its current
> form the abstract syntax doesn't seem to be rigorous enough to provide
> the users with a unambiguous syntax for doing this. Maybe this is not
> the intention of the abstract syntax at all, so a purpose statement
> might shed some light on this.
The purpose of the abstract syntax is yet unclear. At a minimum, it is a
tool for the working group to use in discussing OWL. It might also be used
by OWL users as a nicer syntax, but this is not yet approved. It also
might be used as a presentation syntax by editors, but this is definitely
not approved yet.
>
> [AS]: W3C, OWL Web Ontology Language 1.0 Abstract Syntax
> (W3C working draft 29 July 2002)
> [RS]: W3C, OWL Web Ontology Language 1.0 Reference Specification
> (W3C working draft 29 July 2002)
> [FS]: W3C, Feature Synopsis for OWL Lite and OWL
> (W3C working draft 29 July 2002)
>
>
> I hope my inexperience hasn't produced too many incorrect assumptions or
> misinterpretations, and that this mail is helpful. My apologies that it
> turned out this lengthy.
No problem. Thanks for your comments.
>
> Regards,
>
>
> Carlo Wouters
>
>
> ****************************************************
> Carlo Wouters
> La Trobe University
> Dept. of Computer Science and Computer Engineering
> Melbourne, Australia
> ****************************************************
Peter F. Patel-Schneider
Received on Monday, 9 September 2002 12:57:21 UTC