- From: Eric Prud'hommeaux <eric@w3.org>
- Date: Sat, 5 Feb 2005 02:14:43 -0500
- To: Pat Hayes <phayes@ihmc.us>
- Cc: Dan Connolly <connolly@w3.org>, www-archive@w3.org, Jos De Roo <jos.deroo@agfa.com>
- Message-ID: <20050205071443.GA10422@w3.org>
On Fri, Feb 04, 2005 at 01:28:12PM -0600, Pat Hayes wrote: > > > > > >Let's add some data to query (I think just querying the schema info > >slightly obscures the problem): > > > > _:somebody foaf:homePage <dansHomePage#topic>. > >> > <dansHomePage#topic> owl:sameAs _:somebody . > > > >and ask a question: > > CONSTRUCT * > > WHERE { (?who foaf:homePage <dansHomePage#topic>) } > > > >A complete OWL reasoner must know that > > <dansHomePage#topic> foaf:homePage <dansHomePage#topic>. > >Just for giggles, it could add > > _:x foaf:homePage <dansHomePage#topic>. > > _:y foaf:homePage <dansHomePage#topic>. > > _:y foaf:homePage <dansHomePage#topic>. > > _:z foaf:homePage <dansHomePage#topic>. > > Well, it could, yes. So could an RDF reasoner, for that matter, since > an inference to change a blanknodeID is valid in any version of RDF. > But this particular example is artificial, since according to the > SPARQL scoping rules these answers are all the same answer, so this > engine is just repeating itself. > > >Does anything but a query like > > CONSTRUCT * > > WHERE { (?who foaf:homePage <dansHomePage#topic>) } > > AND isURI(?who) > > > >keep the reasoner from reporting an endless series of equivlient bNode > >solutions? > > I think the SPARQL rules already stop that, if you say that you don't > want repeated answers. But look, whats to stop the answering engine > from inventing a string of URIs like mine:uri1 mine:uri2... and adding > > mine:uri1 owl:sameAs <dansHomePage#topic> . > mine:uri2 owl:sameAs mine:uri1 . > etc. > > to the graph? There is no way to be totally secure against getting > silly stuff back from a truly brain-damaged, or maybe malicious, > answering engine. > > >Is it logically equivilent to substitute a bNodes for any > >URI in the graph? It seems that OWL would not worry about this > >limitless enumeration. > > Yes, and indeed it should not, and almost any real OWL or RDF > answering engine would not do this (though it might accidentally > repeat itself when using a large graph, if the graph contains > redundancies.) > > > > >and by definition > >> > isURI(<dansHomePage#topic>) > >> >but not > >> > isURI(_:somebody) > > > >If isURI is a constraint on a set of bindings of nodes/literals to > >variables, and each node/literal is only one of URI, bNode, Literal, > >then it seems like we're fine. If owl:sameAs makes some node both a > >URI and a bNode, then I don't understand owl:sameAs (a definite > >possibility). > > Well, not sure what you mean by 'makes some node both'. One can > assert a sameAs between a bnode and a URI, as you did above. This > isnt a problem, surely. Since I think this is the crux of this issue, I will expound... SPARQL queries over RDF data, so any data that isn't expressed in triples is not our problem. (1) _:somebody foaf:homePage <dansHomePage> results in a single triple with a bNode subject. (2) <dansHomePage#topic> owl:sameAs _:somebody . results in the obvious triple. I'm trying to see what comes out of OWL closure over this data. I believe it is only (3) <dansHomePage#topic> foaf:homePage <dansHomePage> which makes (1) redundant and forgettable. If, however, I'm confused, and OWL inference changes the _somebody node to be both a bNode and the resource <dansHomePage#topic>, then SPARQL is oversimplifying the data model over which it queries. Expressing this SPARQL query in RDF may bring up use/mention issues, but I don't see how asking the question about what note types are in the RDF graph runs the risk of confusing a reference to a node with the node itself. > >Also, I'm not sure why this is a use/mention problem rather than a > >potential over-simplification of the RDF model. > > The 'predicate' in isURI(x) refers to the syntax of the expression > substituted for the variable, not to whatever that expression > denotes. To this extent it is semantically different from an RDF > pattern with a variable in it. Its meta-RDF rather than RDF. Agreed. Just as SQL steps outside of relational algebra (UNIQUE, GROUP BY), I'm happy doing that in SPARQL. For fun, let's imagine the predicates log:isURI and log:isBnode. (1) _:somebody foaf:homePage <dansHomePage> . + _:somebody log:isBnode 1 . + foaf:homePath log:isURI 1 . + <dansHomePage> log:isURI 1 . (2) <dansHomePage#topic> owl:sameAs _:somebody . + <dansHomePage#topic> log:isURI 1 . + owl:smaeAs log:isURI 1 . OWL inference: (3) <dansHomePage#topic> foaf:homePage <dansHomePage> { ?who foaf:homePage ?page. ?who log:isURI 1 } => { (?who ?page) a answer } would give you ( <dansHomePage#topic> <dansHomePage> ) a answer } For that monotonic fuzzy feeling, { ?who foaf:homePage ?page. ?who log:isBnode 1 } => { (?who ?page) a answer } *could* give you ( _:1 <dansHomePage> ) a answer } because <dansHomePage#topic> foaf:homePage <dansHomePage> implies _:1 foaf:homePage <dansHomePage> Eliminating logically redundant bNodes could have a parallel operation that looks for things that could be bNodes on the matching side. The use cases aren't well-served by this extra inference. The one I see all the time is the variance in the object of dc:creator. <annot1> dc:creator <dansHomePage#topic>. <annot2> dc:creator _:creator2. _:creator2 rdf:type foaf:Person. _:creator2 foaf:homePage <dansHomePage#topic>. If I were looking for the pages where the creator had put in some sort of structure to describe themselves, I would be tempted to ask cwm: { ?page dc:creator ?creator. ?creator log:isBnode 1. } => { ( ?page ) a answer. } at which point the query engine dutifully infers that both could be considered bNodes: ( <annot1> ) a answer. ( <annot2> ) a answer. Fat load of good that did me. In the end, I think I either want to pull isBnode out of SPARQL because it imposes a peculiar inference burden and gives answers that people won't expect, or, put in some text that says that the constraints clause is a filter on results, does not imply inference, is non-monotonic, is fattening, leads to heart disease, etc. The latter option addresses the construction: AND !(isURI(?creator) || isLiteral(?creator)) -- -eric office: +81.466.49.1170 W3C, Keio Research Institute at SFC, Shonan Fujisawa Campus, Keio University, 5322 Endo, Fujisawa, Kanagawa 252-8520 JAPAN +1.617.258.5741 NE43-344, MIT, Cambridge, MA 02144 USA cell: +81.90.6533.3882 (eric@w3.org) Feel free to forward this message to any list for any purpose other than email address distribution.
Received on Saturday, 5 February 2005 07:14:44 UTC