- From: Steve Harris <steve.harris@garlik.com>
- Date: Wed, 23 Dec 2009 18:48:14 +0000
- To: Andy Seaborne <andy.seaborne@talis.com>
- Cc: SPARQL Working Group <public-rdf-dawg@w3.org>
On 23 Dec 2009, at 11:34, Andy Seaborne wrote:
> > ISSUE-24: Can data be SELECTed from one graph and INSERTed into
> another (moved)?
> > This is allowed
>
> In addition to the basic operations for SPARQL/Update, I think it is
> useful to provide operations that are short forms for common actions.
>
> It helps application writer and data administrators because it is a
> clearer statement of the intent.
>
> It helps implementers so they can do it specially without needing to
> worry about pattern analysis - this is an issue for scripting and
> lightweight implementations.
>
> A short form is defined to be exactly the semantics of it's long
> form. It does not need any other specific definition.
>
> Form:
> COPY <g1> INTO <g2>
> short for:
> INSERT { GRAPH <g1> { ?s ?p ?o } } WHERE { GRAPH <g2> { ?s ?p ?o } }
Arguably, maybe people would expect
DROP <g2>
INSERT { GRAPH <g2> { ?s ?p ?o } }
WHERE { GRAPH <g1> { ?s ?p ?o } }
> Form:
> MOVE <g1> INTO <g2>
> short for
> INSERT { GRAPH <g1> { ?s ?p ?o } }
> WHERE { GRAPH <g2> { ?s ?p ?o } }
> DROP <g2>
I would have expected
DROP <g2>
INSERT { GRAPH <g2> { ?s ?p ?o } }
WHERE { GRAPH <g1> { ?s ?p ?o } }
DROP <g1>
> Form:
>
> This one can't be directly written in SPARQL/Update easily. This
> might be a sign we're missing something,
>
> UNLOAD <g1> FROM <g2>
>
> which is delete all the triples in <g1> from <g2>. It's the DELETE
> DATA equivalent using referenced data like LOAD is to INSERT DATA.
There's a real can of worms in that around bNodes, which Andy
acknowledges below.
I'm concerned about attempting to define syntactic shortcuts in a
language that's not in widespread use yet. I think there's a serious
risk of standardising something that seems just plain odd in retrospect.
- Steve
> LOAD <g1> INTO <tmp1532>
> WITH <g2> DELETE { ?s ?p ?o } WHERE { GRAPH <tmp1532> { ?s ?p ?o } }
>
> and, yes, you can't delete bnodes in <g2> this way
>
> LOAD <g1> INTO <g3>
> LOAD <g2> INTO <g3>
> UNLOAD <g1> FROM <g3>
>
> may not result in <g3> being the same (bnode isomorphic to) <g2>.
> Use CLEAR if you want to remove bnodes.
>
> It's a common enough aggregation pattern to be worth having though.
>
> Andy
>
--
Steve Harris, CTO, Garlik Limited
2 Sheen Road, Richmond, TW9 1AE, UK
+44(0)20 8973 2465 http://www.garlik.com/
Registered in England and Wales 535 7233 VAT # 849 0517 11
Registered office: Thames House, Portsmouth Road, Esher, Surrey, KT10
9AD
Received on Wednesday, 23 December 2009 18:48:44 UTC