The versioning stuff looks pretty good, definitely in line with what I've been thinking. A couple questions and thoughts...
Would there be a way (perhaps an alternate implementation) that would be able to operate without modifying the Data table? Like if someone wanted to use versioning but didn't want their main table modified? (just curious, it's ok if the answer is 'no' or 'really hard'.
For the revision attribute on GetFeature, could we just use the WFS 'featureVersion' construct? That would entail us not putting in an extra read-only attribute.
From the spec:
'The optional featureVersion attribute on the <Query> element is included in order to accommodate systems that support feature versioning. A value of ALL indicates that all versions of a feature should be fetched. Otherwise, an integer, n, can be specified to return the nth version of a feature. The version numbers start at 1, which is the oldest version. If a version value larger than the largest version number is specified, then the latest version is returned. The default action shall be for the query to return the latest version. Systems that do not support versioning can ignore the parameter and return the only version that they have. It should be noted, that if the value of the featureVersion parameter is set to ALL, the resulting XML document will contain duplicate feature identifiers and thus cannot be validated.'
I believe that our svn style is compatible with this. So if we did this you don't need a filter to specify the version number, you just do it as an attribute in your Query. But filters are still compatible with this. And if people request 'all', then we return all versions for that GetFeature request.
GetLog looks good. It should just be a GetFeature call. In the future we could expose a new 'GetLog' operation, that turns common filter operations (filters against dates to/from, specific users, ect.) in to more top level parameters. We can easily create a new output format for the WFS, indeed probably can just re-use some of the code from the WMS (would be cool if we could get those two outputs as the same, so our GML WFS output format could be used directly by the WMS).
The revision stuff additions in the Transaction should probably be change requests to the WFS spec eventually. One thing to note is that the wiki way is more to just allow the overwrite and to store both in the history. So it's ok if we do that. But I do agree we should encourage revision checks, making sure clients are up to date.
But all your additions to transaction are sensible.
GetDiff - might be nice if one could specify dates in addition to revision numbers? Something more for the future...
Could the results of a GetDiff possibly be a WFS-Transaction? A transaction is any number of insert, updates, and deletes. Isn't that more or less what we'd be reporting? The updates that have taken place? Not sure if this makes sense, just a thought, and it'd make Rollbacks as GetDiff + Transaction be quite easy. Though I do think a rollback operation with a RollbackTypeElement could still make sense, as a shortcut to doing the whole thing.
The rollback looks good, I like the idea of implementing it as a new element type.
best regards,
Chris
--
Chris Holmes
The Open Planning Project
http://topp.openplans.org