From: Pat Hayes ([email protected])
Date: 10/24/01
>>It seemed to me there was a real disagreement at the end of the
>>joint-committee call today. Here's a test case. If I understood
>>correctly, Pat (and I) will vote for (b) and Richard will vote for
>>(a).
>>
>>The knowledge base contains the statements: "Pat's car is blue, and
>>there is something colored red." Somewhat more formally:
>>
>> RDF(PatsCar, color, blue).
>> exists x (RDF(x, color, red)).
>>
>>or in N-Triples (ignorng URI syntax)
>>
>> <patsCar> <color> <blue>.
>> _:a <color> <red>.
>>
>>And then we have the query: "is there anything with any color?", or
>>RDF(?x, color, ?y).
>>
>>Do we get back
>>
>>(a) 1 triple
>>
>> <patsCar> <color> <blue>.
>>
>>or (b) 2 triples
>>
>> <patsCar> <color> <blue>.
>> _:b <color> <red>.
>>
>>(where I've changed the _:a to _:b just to emphasise that it is an
>>arbitrary term, and its scope does not carry over from the knowledge
>>base to the response).
>>
>>or (c) 2 triples with genid (skolem constant)
>>
>> <patsCar> <color> <blue>.
>> <reasonerCreatedSymbol79878687> <color> <red>.
>>
>>If everyone actually is happy with (b), then we were in fact in
>>violent agreement. If not, then there's a real issue here.
I am happy with b, provided that we pay very strict attention to that
little business of changing the name. That means, in particular, that
this cannot be done by BINDING anything in the Kbase to any variable
in the query. That word 'binding' is the key. The question now
arises, what exactly is the process by which the query gets answered?
The 'simple' case is where the query has a body with some variables
marked as 'answer-binders', and the query is answered when there is a
binding of the varibles in the query body to terms in the Kbase such
that the Kbase entails that instance of the query body - all OK so
far - and the answer is the set of bindings to the answer-binders.
That last step is the crucial one. If we allow an anonymous node in
the Kbase to be delivered as a binding to an answer-binder, we have
in effect taken a name outside its scope, which isn't valid. So there
is no need to invoke any special 'query-answering' rules to prevent
this; all we have to say is that the query body should be a valid
consequence of the Kbase, and this condition will follow
automatically.
Notice however that this means that there is no mechanism, in this
'simple' picture, for delivering the second kind of answer. Where did
that '_:b' come from? It wasn't in the KB, and its not in the query.
So until you specify some mechanism for generating it, it won't get
generated. The basic idea is that it had better not be generated by
the KB (if it was so generated, it would be more like a skolem
constant than a bNode), so it has to be generated by the query
engine. But what process gives the query engine that licence? (Here's
one possibility. Let the bindings go ahead, but whenever a KB nodeID
would be bound to an answer binder, just refuse to deliver that
binding. The query engine then has to invent a new name of its own.
In effect, the answering engine returns a statement of existence, but
refuses to allow its private name to be used. This is easy to state,
but it does go a little beyond the simple Prolog-style binding
mechanism.
BTW, I hate to make an obvious point, but all this follows directly
from the RDF (or DAML) model theory, and we would probably get along
a lot faster if we just referred to the model theory rather than
reinvent the wheel over and over again.
Pat
--
---------------------------------------------------------------------
IHMC (850)434 8903 home
40 South Alcaniz St. (850)202 4416 office
Pensacola, FL 32501 (850)202 4440 fax
[email protected]
http://www.coginst.uwf.edu/~phayes
This archive was generated by hypermail 2.1.4 : 04/02/02 EST