- From: Jim Hendler <hendler@cs.rpi.edu>
- Date: Wed, 9 Jan 2008 19:59:38 -0500
- To: Bijan Parsia <bparsia@cs.man.ac.uk>
- Cc: "Web Ontology Language ((OWL)) Working Group WG" <public-owl-wg@w3.org>
- Message-Id: <158E0BE4-FA06-4EE7-8137-CF58CAF1287D@cs.rpi.edu>
Bijan - just a quick response with a half-baked thought, but I don't have time to bake it and don't want to lose it. If I type the equation X = a - b x c it would be ambiguous, except that math comes with a set of precedence rules, so the multiply comes before the subtract -- thmath has survived for a pretty long time using this idea and I haven't seen a lot of complaints about lack of interoperability between calculators I am wondering if there is not something similar we could do (maybe as part of Alan's document on how DL processors should handle non-DL inputs). If we got things mostly right, I suspect we could make it so DL reasoners would generate a "warning" but still produce an answer (and all produce the same answer) without making these declarations mandatory (i.e. in math I can break the precendence by inserting an override like X = (a - b) x c ) so the typing vocabulary would enter the language for when it was needed, but most naturally occuring RDF graphs would not cause the problem, and there would be a standard way to solve things I know it would take some work to work this out, but might be worth doing as it would meet a need that, strangely, you and I both agree on, which is, as you say, to handle more RDF graphs -JH On Jan 9, 2008, at 7:31 PM, Bijan Parsia wrote: > > I'm following up from the discussion on tonight's telecon. > > There's a chain of reasoning that closed for me tonight. I > mentioned it in the telecon but I'll though it be helpful to > document it. > > ONE MOTIVATION FOR PUNNING > > We had punning in Pellet before OWL 1.1. The motivation for punning > there was to handle more RDF graphs that we were pretty sure we > could handle. Before that, we handled some graphs with untyped > entities which we were pretty sure were only *used* in one one. > Here is a concrete example: > > G1 > :C rdf:type owl:Class. > :D rdf:subClassOf [a Restriction; > onProperty :p; > someValuesFrom :C] > > This is not in OWL DL because :D and :p don't have a type triple. > But it's pretty obvious what the fix should be: > F1 > :D rdf:type owl:Class. > :p rdf:type owl:ObjectProperty. > > This is the only way to make this OWL DL. But now consider: > > G2 > :C rdf:type owl:Class. > :p rdf:type owl:DatatypeProperty. > :q rdf:type owl:ObjectProperty. > :D rdf:subClassOf [a Restriction; > onProperty :p; > someValuesFrom :C] > :E rdf:subClassOf [a Restriction; > onProperty :q; > someValuesFrom :C] > > This is not in OWL DL and cannot be repaired to be. The reason is > that in the axiom about :E, :C needs to be a datatype. It's not. > But if we add the corresponding type triple, the vocabulary is no > longer separated (i.e., :C is both a class and a datatype). Punning > allows us to accept this graph by treating :C as a class in the > first axiom and a datatype in the second. > > (If you are concerned about "uri's denote only one thing", you can > think of :C being one class that has two disjoint subclasses, one > which is restricted to elements of owl:Thing and one to data > values. As long as owl:Thing and literals are disjoint there's no > trouble.) > > Note that there's another choice! We could pun on :q (treat it *in > that expressions* as an object property). > > PROBLEMS > > Well, the fact that we have a choice on what to pun is a problem. > This happens in other examples., e.g., if we get rid of the first > type triple of G1: > > G1' > :D rdf:subClassOf [a Restriction; > onProperty :p; > someValuesFrom :C] > > Then we have two possible fixes. F1 and > > F2 > :D rdf:type owl:Class. > :p rdf:type owl:DatatypeProperty. > :C rdf:type rdfs:Datatype. > > Which should we pick? (They are mutally exclusive.) With punning, > we can have *both*: > > G1'' > :D rdf:subClassOf [a Restriction; > onProperty :p; > someValuesFrom :C] > :D rdf:type owl:Class. > :p rdf:type owl:DatatypeProperty. > :p rdf:type owl:ObjectProperty. > :C rdf:type rdfs:Datatype. > :C rdf:type owl:Class. > > The question is, then, what is :D a subclassof? and what do we do > with it? > > One hope is that the user *meant* for it only to be G1' + f2 *or* > G1 + F1. We can guess which it is. (Up to now, we've had a known > set of datatypes so thing are pretty easy). The typed vocabulary > let's use *express* which one we meant: > > D rdf:subClassOf [a owl11:ObjectRestriction; > onProperty :p; > SomeValuesFrom :C] > :D rdf:type owl:Class. > :p rdf:type owl:DatatypeProperty. > :p rdf:type owl:ObjectProperty. > :C rdf:type rdfs:Datatype. > :C rdf:type owl:Class. > > Thus we disambiguate. The mapping only requires the > owl11:ObjectRestriction if there's the multiple type triples (and > thus we've signaled ambiguity). > > It's a pretty minimal disambiguation. We just change the type of > the restriction. Presumably we forbid having both an object and a > data restriction on the same bnode. It could also have an optional > owl:Restriction. > > Note that the RDF mapping is *already doing some fix up of old owl > graphs. We could extend this to the cases where there are *no* type > triples for :p. > > Note that problems can arise with punning on classes or on properties. > > WHAT'S GOING ON? > > There are two cases of not-correctly-DL typed owl graphs (three if > we count extending the builtin vocab....): > 1) We are *missing* type triples. > There are three possibilities here: > a) there is a single fix (do it!) > b) there are multiple alternative fixes (what to do?!) > c) there is no fix (without at least punning or triple deletion) > NOTE: Notice that this issue is *orthogonal* to whether we have > punning or hilog semantics. The only important thing is whether we > allow a non-separated vocabulary. OWL DL doesn't, so *can't* repair > some graphs without deleting triples. > > 2) We have too many type triples > These are always not-OWL DL and can't be repaired without > deletions (case c) above). Punning solves them being in OWL 1.1 > (yay) but then leaves ambiguity problems with how to interpret > restrictions (for example). > > I think it's clear that we don't want EVERY restriction to be > "doubled" I.e., we interpret *EVERY* restriction as being an > implicit disjunction of the restriction in its objectproperty form > and in its dataproperty form. That brutally sucks. This is not far > from what OWL Full requires, and if your ontology makes owl:Thing > and rdfs:Literal disjoint, I suspect it's equivalent. > But I feel very very confident in saying that no user expects > this. No one expects this. I'll be shocked if anyone has *thought* > of this before I have right now. Not because I'm particularly > smart, but because it's...well...not something that occurs to > anyone. Because it's freaky and useless. > We then need a way of telling *which* restriction we meant (in > cases when we have "active" punning between data and object > properties or between classes and datatypes). > > This is why we have owl:11ObjectRestriction and > owl11:DataRestriction. Note that this a *syntax* flaw because we > cannot make the value of an onProperty (or somevaluesfrom) > "locally" typed. Well, we could with reification: > > onProperty [a DatatypeProperty; rdf:value :p] > > Uhm...did I just invent an alternative serialization that doesn't > require vocabulary extension?!? Damn. I think I just did. > > But it's after midnight so maybe I'm wrong :) > > You'll still have ambiguous (e.g., onProperty [:p]) and > overdetermined (e.g., onProperty[a ObjectProperty; a > DatatypeProperty; :p]) graphs, but they will be *MUCH* harder to > write, esp by hand. > > Those graphs already exist. It might make owl full semantics for > onProperty change a bit. Who knows. > > May I observe that this is *waaaaay* too much work for what is, > essentially, a syntax issue. OWL made it much more, but that seems > to be a really broken "feature" of OWL. I think when we are > thinking about backwards compatibility, we should think hard about > future extensibility and specification. If we can break things a > little to make working *on* the language more robust, that would be > a good thing. > > Cheers, > Bijan. > "If we knew what we were doing, it wouldn't be called research, would it?." - Albert Einstein Prof James Hendler http://www.cs.rpi.edu/~hendler Tetherless World Constellation Chair Computer Science Dept Rensselaer Polytechnic Institute, Troy NY 12180
Received on Thursday, 10 January 2008 01:00:08 UTC