- From: Richard Newman <rnewman@twinql.com>
- Date: Sun, 8 May 2011 20:31:03 -0700
- To: Paul Gearon <pgearon@revelytix.com>
- Cc: public-rdf-dawg-comments@w3.org
Hi Paul,
Only two remarks:
> Given that many operations occur over HTTP, then sub-transactions are
> not going to be common, as they imply a transaction is already
> underway (and HTTP is stateless).
Addressing this comment for a moment, apart from any formal response. See below for that.
HTTP itself is stateless, but it's also a common access protocol for all kinds of systems, including those which support transactions. For example, one might
POST /server/transaction/new
=> redirects to a custom port, or returns a transaction ID, etc.
POST /server/tr1234/sparql...
POST /server/tr1234/sparql...
POST /server/transaction/commit?id=tr1234
which includes two SPARQL Update operations within the concept of a transaction. The transaction becomes an integral part of the space of resources upon which HTTP verbs act; state exists without forcing it to be part of the protocol itself.
If each operation must be treated atomically, then one cannot coalesce them, and implementations must support sub-transactions if they support global transactions. I know that AllegroGraph supports global transactions using just such a mechanism[1], termed "sessions", so this is not an academic curiosity.
AllegroGraph will not treat each request atomically unless sessions are not used, and thus the regular auto-commit logic applies.
[1] <http://www.franz.com/agraph/support/documentation/v4/http-protocol.html#header2-685>
> More significantly, the current text is: "Each request SHOULD be
> treated atomically by a SPARQL 1.1 Update service, i.e., the execution
> of all the operations in one request should be performed atomically. "
>
> That means that not supporting transactions does not violate the spec,
> since SHOULD only applies unless you have a good reason to do
> otherwise.
... that is satisfactory.
> The spec now *requires* (non-empty) INSERTs to create a graph, and
> *allows* DELETEs to remove any graphs that are emptied. CREATE and
> DROP are left to allow individual stores to perform administration on
> empty graphs, if they support such a feature.
If CREATE and DROP are effectively optional ("if they support such a feature"), and your parenthetical "non-empty" INSERT remark stands, then my point here is adequately addressed, thank you.
Regards,
-Richard
Received on Monday, 9 May 2011 17:07:53 UTC