W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > April to June 2010

Re: Negation section text updated.

From: Andy Seaborne <andy.seaborne@talis.com>
Date: Thu, 20 May 2010 20:04:41 +0100
Message-ID: <4BF587C9.6010801@talis.com>
To: Olivier Corby <Olivier.Corby@sophia.inria.fr>
CC: SPARQL Working Group <public-rdf-dawg@w3.org>
Olivier,

Thanks for the remarks:

On 20/05/2010 08:27, Olivier Corby wrote:
 > Some remarks on negation.
 >
 >
 >
 > 8 Negation
 >
 > "one based filtering results"
 > ->
 > one based on filtering results

Done

 >
 >
 > 8.1 Filtering Using Graph Patterns
 >
 > "Filering of query solutions"
 > ->
 > Filtering

Done

 >
 >
 > Note that there are two syntax for negation :
 >
 > filter(not exists PAT)
 >
 > filter(! exists PAT)

See next message.

 >
 > 8.1.2 Testing For the Presence of a Pattern
 >
 > EXISTS { ?person foaf:name ?name }
 > ->
 > FILTER EXISTS { ?person foaf:name ?name }

Done

 >
 >
 > 8.2 Removing bindings
 >
 > "then to calculates"
 > ->
 > then calculates

Done

 > 8.3 Relationship and difference between NOT EXISTS and MINUS
 >
 > evaulation
 > ->
 > evaluation
 >
Done

 >
 > "Note: NOT EXISTS as a graph pattern is translated into an
 > algebra filter and positioned exactly where it occurs in the graph 
pattern,
 > unlike a FILTER expression which is applied over the whole group it 
occurs
 > in, as done during algebra translation. See below."
 >
 > Isn't this note obsolete as NOT EXISTS is proposed to be a filter ?
 >
Removed

 >
 > 8.3 Relationship and difference between NOT EXISTS and MINUS
 >
 > Introduction to Negation :
 > "The SPARQL query language incoporates two styles of negation, [one ...]
 > and one based on removing solutions related to another pattern."
 >
 > PREFIX : <http://example/>
 > SELECT *
 > {
 > ?s ?p ?o
 > MINUS { :a :b :c }
 > }
 >
 > evaluates to result set with one query solution:
 >
 > <http://example/a> <http://example/b> <http://example/c>
 >
 >
 > So I write a MINUS to remove solution :a :b :c and I get solution :a 
:b :c
 >
 > I wonder how I will explain this to users ...

Yes - that's how MINUS works.
I share your concern.

Maybe the example should be more direct

{ ?s :b :c } MINUS { :a :b :c }

 >
 > 8.4.1 Algebra: EXISTS
 >
 > "We define a expression"
 > ->
 > define an

Done

 > 8.4.2 Algebra: MINUS
 >
 > "The additional restriction on dom(μ) and dom(μ') is added so that if
 > any solution mapping
 > has no variables in common with solution mappings of Ω1 then
 > Minus(Ω1, Ω2) is empty, regardless of the rest of Ω2"
 >
 > I don't understand this sentence.

It might be unnecessary.  The point is that MINUS is defined specially 
and different from the it's natural definition of "not compatible" 
anti-join (which is the "diff" operation used in defining OPTIONAL/left 
join).

Otherwise:
{ anything MINUS {} }

is the empty result which the WG members found unhelpful.  I'd rather 
not give an example in the doc because it isn't what the spec is defining.

Forcompleness: currently:
{ {} MINUS {} }

is one row of no bindings, not the empty result set.

	Andy
Received on Thursday, 20 May 2010 19:05:13 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:15:42 GMT