- From: Axel Polleres <axel.polleres@deri.org>
- Date: Tue, 03 Jul 2007 18:13:38 +0100
- To: Jos de Bruijn <debruijn@inf.unibz.it>
- Cc: RIF <public-rif-wg@w3.org>
Jos de Bruijn wrote:
> Done. See: http://www.w3.org/2005/rules/wg/wiki/Arch/RDF
I pick up the discussion we had on IRC/in the teleconf today
on Jos' RDF proposal and would like to clarify /raise some issues here:
1) First, the "problem" was that not all RDF(S) entailment rules
can be encoded in RIF.
I meant especially, that the rule
G
---
G'
where a Graph G which is obtained
from a graph G' by a bnode-renaiming
is not expressible as a RIF Core rule.
Jos returned that this rule is not necessary, because
e.g. my example, ie. querying for
_:b p o.
on graph
_:a p o.
would be expressibly by the query
exists ?b (?b p o)
ie. treating the bnode in the query as a variable. This is probably
possible for many use cases, but, I would be cautious to say ALL use
cases, so I'd prefer that we say explicitly what of the RDFS semantics
we cover, if we add RDFS as an "implicit" rules set.
2) Then in the current discussion on bnodes in heads (I more or less
agree with the proposed treatment of bnodes in bodies), jos writes
the following :
</snip>
Using real blank nodes in the head of a rule poses problems, since
existentially quantified variables are not allowed in the head of a rule
in any rules language.
However, most N3-like rules languages do not allow blank nodes in the
head, but rather have some kind of notion like "rigid bnode". Such a
rigid bnode can be encoded using a new unique constant symbol, which is
local to the rule set, i.e. combination of the rule set with another
rule set, as well as entailment checking, requires renaming of all local
constants. However, in this case there are similar round tripping
problems as with real bnodes in the body of a rule.
</snip>
I am not sure what is meant by "real bnode" here, but I'd assume a bnode
only appearing in the head but not in the body. A "new unique constant
symbol local to the rule set" is probably not enough, but you might want
a "real" Skolem function here:
e.g.
(_:a p ?x .) :- (?x q ?y .)
should probably be rather:
( sk_a(?x) p ?x .) :- (?x q o .)
than
( new_constant_for_bnode_a p ?x .) :- (?x q o .)
since the former would create a new skolem function for any
instance of ?x whereas the latter would only create 1 new constant
for all instances of ?x which causes trouble in the
general case:
e.g. when I take a graph
s1 q o1.
s2 q o2.
plus the rule above and ask a query
\exists ?y,?x,?z (?y p ?x) AND (?y p ?z) AND (?x q o1) AND (?x q o2)
I'd get a 'yes' for the latter translation which I do not necessarily
want. At least, it would not be compatible with the treatment of bnodes
in the heads of CONSTRUCTS in SPARQL (I am not sure about N3, since the
semantics of N3 is not really formally specified, AFAIK)
This is all basic logics of course, apologies, but ... just to
exemplify.
3) Also, I assume that the proposal does not treat non-real bnodes yet,
ie bnodes appearing in the body AND in the head is not yet treated
explicitly in this proposal. There are two ways of treating such
non-real bnodes, take a rule
(_:a p o .) :- (_a: q o .)
a) Firstly, you could treat those bNodes in the head as real Bnodes,
ie. those in the body as a variable, and those in the head using
a skolem-function,
the example would therefore yield something like:
(sk_a(?a) p o .) :- (?a q o .)
b) Secondly, you could treat those non-real bnodes just as a variable
in both cases (head and body)
(?a p o .) :- (?a q o .)
Note that SPARQL avoids this issue which could theoretically also arise
with CONSTRUCTs there, by stating that
"The same blank node label cannot be used in two different basic graph
patterns in the same query".
just my 3 cents,
axel
--
Dr. Axel Polleres
email: axel@polleres.net url: http://www.polleres.net/
Received on Tuesday, 3 July 2007 17:13:59 UTC