diff --git a/protocol.html b/protocol.html index fdd5b3f0..3e1cc6d5 100644 --- a/protocol.html +++ b/protocol.html @@ -717,7 +717,32 @@
Servers MAY use the HTTP ETag
header with a strong validator for RDF bearing representations in order to encourage clients to opt-in to using the If-Match
header in their requests.
+ When the target resource of a PATCH
request is represented by an RDF document [RDF11-CONCEPTS], servers MUST support changing the representation using the request body containing a variation of SPARQL Update as defined in the Appendix.
+ Servers MAY further support SPARQL 1.1 Update [SPARQL],
+ except that servers MUST NOT allow a request with a PATCH
method to change other resources than the target resource. [Source]
+ Servers that receives a request body containing a SPARQL query that falls outside of the what they are able to process MUST respond with a 422
status code [RFC4918] and a message body that explains the error.
+
+ When servers that process requests containing REMOVE
or REMOVE DATA
operations as defined in the Appendix detects a failure resulting from the processing of these operations, then the server MUST abort any modifications and respond with a 409
status code.
+
+ When the request body of a PATCH
request has a SPARQL Update query that contains an INSERT
keyword, servers MUST treat the request as an Append operation.
+ When the query contains a WHERE
keyword, servers MUST treat the request as a Read operation.
+ When the query contains a DELETE
keyword, servers MUST treat the request as a Write operation.
+ When the query contains a REMOVE
keyword, servers MUST treat the request as a Read and Write operation.
+
This section is non-normative.
+ +The objective of this variant is two-fold: Firstly, it is a variant of SPARQL 1.1 Update [SPARQL11-UPDATE] that is relatively easy to implement and contains features that are most commonly used. Secondly, it seeks to enable a semaphore mechanism that exploits that if a delete operation does not remove any triples, it may have been due to an edit conflict. Since this is incompatible with SPARQL 1.1 as defined, it introduces a REMOVE
keyword. The variant operates over triples and triple patterns only, and uses basic graph patterns, and does not include more advanced features. To further examine the grammar definition, see the Yacker validator.
+
+ REMOVE DATA
differs from DELETE DATA
as defined in SPARQL 1.1 Update [SPARQL11-UPDATE] in that the deletion of non-existing data results in a failure.
+
+ REMOVE
differs from DELETE
as defined in SPARQL 1.1 Update [SPARQL11-UPDATE] in that when the corresponding WHERE
clause does not match exactly one solution, it results in a failure.
+
+ The Internet Media Type / MIME Type for this variant is "application/vnd.solid.sparql-patch
".
+
This specification alters the grammar of 8 rules in the original grammar of the SPARQL 1.1 Query Language [SPARQL] grammar and introduces another 11 new rules to accommodate for INSERT DATA
and REMOVE DATA
, as the corresponding operations were defined in the language definition but not precisely defined in the grammar. This specification references the original grammar definition where no changes were made.
+