On 11/01/13 09:53, Carina Haupt wrote:
Hi,

when I try to perform an delete against my external endpoint (Virtuoso),
the query gets modified by Jena.

Original

DELETE FROM <http://test> { ?s <http://purl.org/dc/terms/identifier>
"21818744"^^<http://www.w3.org/2001/XMLSchema#string> . } WHERE { GRAPH
<http://test> {?s <http://purl.org/dc/terms/identifier>
"21818744"^^<http://www.w3.org/2001/XMLSchema#string> . }}

Not legal SPARQL 1.1.

It parses in ARQ only because there is some compatibility with the old SPARQL/Update submission. It is incomplete compatibility - it is a burden to support both and the standard is their to be a common syntax for all.

Compatibility helps people migrate apps progressively because other remote systems are only going to support SPARQL 1.1 syntax.

Modified by Jena

DELETE {
   GRAPH <http://test> {
     ?s <http://purl.org/dc/terms/identifier>
"21818744"^^<http://www.w3.org/2001/XMLSchema#string> .
   }
}
WHERE
   { GRAPH <http://test>
       { ?s <http://purl.org/dc/terms/identifier>
"21818744"^^<http://www.w3.org/2001/XMLSchema#string> }
   }

The internal form is output converted to a standard form - legal SPARQL 1.1 syntax.

http://www.sparql.org/update-validator.html

The first example only works if you check "extended syntax".

This is going to be removed from ARQ at the next release. SPARQL 1.1 is the standard. The submission syntax has significant design problems which have been corrected by the working group.

Virtuoso cannot handle the second syntax. I also tried all given syntax
formats provided by Jena, but only ARQ does not throws an exception, but
does this modification instead.

While Virtuoso claims SPARQL 1.1 support, it seems patchy and incomplete. I don't know what Virtuoso supports - some varient of the SPARQL/Update submission I guess. OpenLink did not summit any conformance reports when the working group gathered them from as many implementations as possible.

You should contact OpenLink and ask them what their plans and timescales are. Their erratic support for SPARQL 1.1 (Update and to a lesser extent query) is a cost on open source projects providing application/client environments.


Code I use:

UpdateRequest update = UpdateFactory.create(deleteString);
UpdateProcessor uExec =    UpdateExecutionFactory.createRemote(update,
endpoint) ;
uExec.execute();

The SPARQL protocol is very simple for sending SPARQL Update requests - set the Content-type: and send the request as the body.

You can send the operation directly using the packaged up use of HTTP:

HttpOp.execHttpPost(endpoint,
                    WebContent.contentTypeSPARQLUpdate,
                    reqStr) ;

which is the core of what .execute does.

For query, there is a hack cut-through path (create a remote query execution based on the string without parsing). It could be added for update but the point of parsing and emitting strictly legal SPARQL 1.1 syntax is to maximise interoperability helping people migrate applications using old, deprecated style update.

(exasperation at the lack of standards compliance over :-)

        Andy



On 10.01.2013 19:44, Andy Seaborne wrote:
On 10/01/13 16:52, Carina Haupt wrote:
Hi,

is it possible to delete triples from an external triple store like
Virtuoso using the Jena API?

I found examples to use SPARQL/UPDATE statements for in memory stores,
but not external hosted ones.

Regards,
Carina


You can create executions on remote endpoints by:

UpdateExecution uExec =
    UpdateExecutionFactory.createRemote(Update, remoteEndpoint) ;
uExec.execute() ;

     Andy



Reply via email to