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,
>
>

Reply via email to