> -----Original Message-----
> From: Danny Ayers [mailto:[email protected]]
> Sent: 2 September 2009 12:13
> To: Seaborne, Andy
> Cc: Lee Feigenbaum; Chimezie Ogbuji; [email protected]
> Subject: Re: Does the expressive power of SPARQL include all forms of
> default negation?
> 
> 2009/9/2 Seaborne, Andy <[email protected]>:
> 
> >> Chimezie Ogbuji wrote:
> 
> >> > Basically, the problem is one where I want to find "all resources
> that
> >> are
> >> > not a member of a specific class".  This seems to be especially
> >> problematic
> >> > for RDF graphs where each resource has *multiple* rdf:type
> statements.
> >> > Consider the graph:
> >> >
> >> > _:b rdf:type D
> >> > _:a rdf:type C
> >> > _:a rdf:type D
> >> > _:a rdf:type B
> >> >
> >> > And we want to find "all resources that are not a member of the C
> >> class,"
> >> > where the *not* in this case is meant in the closed world sense
> (i.e.,
> >> > basically there is no statement of the form:  ?RESOURCE a C in the
> >> graph).
> 
> Excuse me folks, but I'm not quite grasping something here - would NOT
> EXISTS/UNSAID be introducing something new, or would it be sugar for
> the kind of convoluted !BOUND query Chime described?

The NOT EXISTS proposal is a filter - it takes the pattern and sees if it can 
be matched for the variables of the current row, substituting in the variables 
in the pattern that are the same.  As such it behaves very like OPTIONAL/!bound 
except you don't have to go through hoops to ensure there is a unused variable 
for the bound to test 

OPTIONAL { ?x a ?t2 . FILTER(?t2 = :C) }

There can be differences for some more complicated patterns e.g. if the NOT 
EXISTS involves an OPTIONAL inside it's pattern and that OPTIONAL involves a 
variable only used in the thing being tested (the double nested optional 
situation from current SPARQL).  In my experience, such complicated patterns 
are very rare in practice and even then often the wrong thing to do.  Given 
that the test for the difference or not is a static test of the query, an 
optimizer can choose either strategy.  

So it's not directly sugar but it does provide a way for many optional/bound() 
to be written in a clearer fashion.  Few people find the OPTIONAL/!bound very 
clear. 

More details will be in the FPWD of the query language changes.

        Andy

> 
> Cheers,
> Danny.
> 
> --
> http://danny.ayers.name

Reply via email to