USING is the like SELECT-FROM -- the WG decided a different name was better. It sets up the dataset to query in the WHERE clause. Again, there is no variable binding to use.

It looks to me like you really want $resourceMetadataGraph to come from outside - a parametrized update. If so, the unsubtle way is to do string replacement. I don't know if ParameterizedQueryString will work.

Don't forget

DELETE WHERE  QuadPattern

saves writing template and pattern

        Andy

On 25/10/17 21:04, Charles Greer wrote:

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