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

Re: DELETE and blank nodes

From: Ivan Herman <ivan@w3.org>
Date: Wed, 03 Mar 2010 15:23:38 +0100
Message-ID: <4B8E70EA.5070303@w3.org>
To: Steve Harris <steve.harris@garlik.com>
CC: Lee Feigenbaum <lee@thefigtrees.net>, SPARQL Working Group <public-rdf-dawg@w3.org>


On 2010-3-3 15:02 , Steve Harris wrote:
> On 3 Mar 2010, at 12:26, Ivan Herman wrote:
> ...
>>> == My Opinion ==
>>>
>>> While I'm sympathetic to Sandro's use case, I'm frightened of the fact
>>> that:
>>>
>>>  DELETE { _:b1 :p :o } WHERE { }
>>> and
>>>  DELETE { ?b1 :p :o } WHERE { }
>>>
>>> do dramatically different things. Because of this, I'd rather we go with
>>> the first proposal and prohibit blank nodes in the DELETE template
>>> entirely.
>>
>> I think Sandro's use case is important. Eg, this is the only way we can
>> manipulate, via SPARQL UPDATE, RDF graphs encoding OWL constructs or, if
>> Sandro's RIF-in-RDF encoding is done, RIF rules. With entailment regimes
>> around the corner, I think this is important. (And yes, as you say, the
>> restriction on non-named blank nodes is difficult to justify.)
> 
> One possibility, which I shied away from mentioning before because it's
> probably a hornets nest, is to change the definition of (0 1 2) to
> produce non-*-projected variables, instead of bNodes. I think this will
> be compatible with the semantics of SPARQL 1.0, but wouldn't swear to it.
> 
> This means that DELETE WHERE { :x :p (0 1 2) } would expand to something
> like:
> 
> DELETE {
>   :x :p ?tmp3 .
>   ?tmp1 rdf:first 2 .
>   ?tmp1 rdf:rest rdf:nil .
>   ?tmp2 rdf:first 1 .
>   ?tmp2 rdf:rest ?tmp1 .
>   ?tmp3 rdf:first 0 .
>   ?tmp3 rdf:rest ?tmp2 .
> }
> WHERE {
>   :x :p ?tmp3 .
>   ?tmp1 rdf:first 2 .
>   ?tmp1 rdf:rest rdf:nil .
>   ?tmp2 rdf:first 1 .
>   ?tmp2 rdf:rest ?tmp1 .
>   ?tmp3 rdf:first 0 .
>   ?tmp3 rdf:rest ?tmp2 .
> }
> 
> Which I believe would delete the list.

yes, that would work but, oh boy!, it is ugly:-)

> 
> More complex things like:
> 
> DELETE {
>   :x :p (0 1 2) .
> }
> WHERE {
>   :x :q (3 4 5) .
> }
> 
> Aren't going to work, you'd have to write them in full, but I don't see
> any way round that.

But what does it mean "writing them in full"? The other alternative of
Lee is to prohibit blank nodes in the DELETE template, ie, one cannot
have a list.

Ivan

> 
> - Steve
> 

-- 

Ivan Herman, W3C Semantic Web Activity Lead
Home: http://www.w3.org/People/Ivan/
mobile: +31-641044153
PGP Key: http://www.ivan-herman.net/pgpkey.html
FOAF   : http://www.ivan-herman.net/foaf.rdf
vCard  : http://www.ivan-herman.net/HermanIvan.vcf



Received on Wednesday, 3 March 2010 14:23:36 GMT

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