- From: Michael Schneider <m_schnei@gmx.de>
- Date: Tue, 07 Aug 2007 22:38:40 +0200
- To: Bijan Parsia <bparsia@cs.man.ac.uk>
- CC: bmotik@cs.man.ac.uk, public-owl-dev@w3.org
[Just saw that there are more answers on this topic. Did not read the others, only Bijan's first one, and want to get this one out, to don't have a sleepless night. ;-) So maybe this one is already obsolete, when it is posted. Good night! :)] Hi, Bijan! Bijan Parsia wrote on 2007-08-07: > Now from use, you can derived all the "implied" resource kinds in a ontology by > inspecting all the (fully typed) axioms. What you can't do is put *checks* in > your ontology for being of a certain (set of) resource kinds. Some patterns are > easy enough: If you want to always enforce the OWL DL separated vocabulary criterion, > then implicit declarations are enough since *any* "duel use" is a violation. > But what if an author wants to distinguish between intended and accidental punning? > E.g., some classes I want to be usable as individuals and some not, and I don't want > any class to be a property? Use along *cannot* tell me this, and there is *no* way > to have this canned in advance (though there may be several well defined canned > versions we could use). Holding myself straight to this concrete example: How would I express this in terms of declarations? I see how I can say that some name is allowed to stand for both, a class and an individual: :ClassOrIndividual owl:declaredAs owl:Class, owl:Individual . But how can I say that another name can /only/ stand for a class and not an individual? :OnlyClass owl:declaredAs owl:Class . I would need something like :OnlyClass owl:notAllowedAs owl:Individual . Otherwise, what should my parser do when only having the first of these two declarations? It can either always deny ontologies, which contains some name, which is somewhere used in a way that is not explictly declared. In this case, the parser would show me the red card, if I say something like :OnlyClass a :ClassOrIndividual . But this would be very restrictive, and would be very much against the "declarations are pure optional" spirit. But if only existing declarations were taken into account, what then would the two declarations above affect? I then see no difference between having declarations and having none: * An axiom ':ClassOrIndividual a :OnlyClass' will (intendendly) pass, because this matches the explicit declarations for both names. * A statement ':OnlyClass a :ClassOrIndividual' will (un-intendendly) pass, because there is no declaration which speaks against using ':OnlyClass' at an individual's position. And now that we are finally at the point of discussing concrete examples, I like to come back to a small "BTW" in my first post: * Is there any list of concrete usecases for declarations? The above example (allowing or disallowing punning) would be one such usecase. Are there others? (And please no more examples of misspelled URIs anymore! ;-)) * Are there any patterns, which tell me how to best work with declarations? At least my tool should know such pragmatics, but I (as a human and potential tool implementor) would like to see such best-practices, too. > (So, the *problem* is determining whether a pun is incidental or intended, > or signalling to users and extenders whether the original author intended > this class to be used as an individual. If we want to *publish* our intent, > we need to write it down. Ok! > Declarations let us write it down. Hard to see any other way (although you > could imagine a declaration language that used patterns the way aboutEachPrefix could, > or other macro like things; but these are implementation details almost)) An alternative would perhaps be to follow the lines of XDoclets for Java. Within a comment, one could put in some "@DeclaredAsClass(C)" string or something similar what a parser can easily detect and which is hard to produce by accident. In OWL-1.1 we will have axiom comments (annotations), so this approach could be realized independent of any serialization language. I would probably prefer to put all those declaration statements into a toplevel comment: Ontology(MyOnt comment(@DeclaredAsClass(C) @DeclaredAsObjectProperty(P) ...)) The advantages and disadvantages are similar to those of XDoclet comments: - Not directly supported by the language, just a convention + Not directly supported by the language, just a convention :). So a "full featured tool" is not really supposed to support it, but one can add a third party preprocessor plugin to run over an ontology before parsing. - a little cumbersome compared with direct language support + very flexible: one can invent other such "XDoclets", like '@NotAllowedAsIndividual(C)', or '@MacroExpansion( MyDisjointUnion(A B...) { Union(A B...) DisjointClasses(B...) } )' + allows experimenting with new features, which will perhaps some time get a change to go directly into the OWL language Cheers, Michael
Received on Tuesday, 7 August 2007 20:38:53 UTC