Hi Andy,
I was trying to just recreate the scenario -- the original query did have a WHERE. I found it: prefix raf: <https://xxx/ns/raf/> with $resourceMetadataGraph delete {?urn raf:latest ?latest.} where {?urn raf:latest ?latest.} It was my attempt to present a workaround that ended up with a USING - from SPARQL 1.1 """ To illustrate the use of the WITH clause, an operation of the general form: WITH <g1> DELETE { a b c } INSERT { x y z } WHERE { ... } is considered equivalent to: DELETE { GRAPH <g1> { a b c } } INSERT { GRAPH <g1> { x y z } } USING <g1> WHERE { ... } """ We have taken on binding after USING and WITH as an enhancement request, but given your response I'm going to push back until SPARQL 2.1 Thank you, Charles ________________________________ From: Andy Seaborne <[email protected]> Sent: Wednesday, October 25, 2017 11:10:12 AM To: [email protected] Subject: Re: Binding graph names for WITH and USING What are they trying to achieve? The Update has a second error the parsers didn't get to. No WHERE clause - it's mandatory Did they mean: INSERT { GRAPH ?g { <http://example.org/a> <http://example.org/p> "1" } } WHERE { GRAPH ?g { } } GRAPH ?g { } returns all graph names. Where does USING come into this? > Sometimes "the spec prohibits it" is not what people want to hear. That's what the commercial support has to answer! Andy On 25/10/17 19:02, Charles Greer wrote: > The error from Jena when I try to reproduce is fairly clear: > > > @Test > public void testGraphBinding() { > MarkLogicDatasetGraph dsg = getMarkLogicDatasetGraph(); > String updateQuery = "WITH ?g INSERT { <http://example.org/a> > <http://example.org/p> \"1\" }"; > BindingMap updateBindings = new BindingHashMap(); > updateBindings.add(Var.alloc("g"), > NodeFactory.createURI("http://example.org/g")); > UpdateRequest update = new UpdateRequest(); > update.add(updateQuery); > UpdateAction.execute(update, dsg, updateBindings); > } > > > > org.apache.jena.query.QueryParseException: Encountered " <VAR1> "?g "" at > line 1, column 6. > Was expecting one of: > <IRIref> ... > <PNAME_NS> ... > <PNAME_LN> ... > > > > So I guess to reframe my question -- given that the expectation of this > customer is that ?g should be bindable here, > > can I give them a rationale? Sometimes "the spec prohibits it" is not what > people want to hear. > > > > > Charles Greer > Lead Engineer > MarkLogic Corporation > [email protected] > @grechaw > www.marklogic.com<http://www.marklogic.com> Best Database for Integrating Data From Silos | MarkLogic<http://www.marklogic.com/> www.marklogic.com Learn why MarkLogic Enterprise NoSQL is the world's best database for integrating data from silos. > > ________________________________ > From: james anderson <[email protected]> > Sent: Wednesday, October 25, 2017 9:59:14 AM > To: [email protected] > Subject: Re: Binding graph names for WITH and USING > > good evening; > > >> On 2017-10-25, at 18:48, Charles Greer <[email protected]> wrote: >> >> Hi jena folks, I was surprised recently with a customer who was surprised >> that my jena connector did not properly >> >> bind graph names as variables after WITH. >> >> >> WITH ?g >> >> INSERT ... >> >> DELETE ... >> >> >> When I looked back at the SPARQL specs, it looks indeed true that variables >> are inadmissable after WITH or USING. >> >> I am curious about how to write a workaround, short of putting a literal in >> for ?g > > do you have a concrete example which you are in a position to share? > > where did the customer express a binding for the ?g of which they thought the > ‘with’ clause was in its scope? > > best regards, from berlin, > >
