To: ietf-dav-versioning@w3.org Message-ID: <OF7359A20F.C4F300F2-ON85256968.006212F3@ott.oti.com> From: "Boris Bokowski/OTT/OTI" <Boris_Bokowski@oti.com> Date: Thu, 28 Sep 2000 13:58:15 -0400 Subject: proposal for OPTIONS Here is a proposal for spec'ing the OPTIONS request. First of all, to attack the problem that OPTIONS, although applied to a resource, should report capabilities of a server: "The DAV response header for an OPTIONS request applies to a resource and all its members. If a DAV response header contains one or more of 'core-versioning', 'workspace', 'versioned-collection', 'baselined-collection', 'activity', 'merge', the DAV response header for its members MUST at least contain these as well." Spec'd this way, it is sufficient to query the root of a resource subtree in order to discover the versioning capabilities for all resources in the subtree. The list of OPTIONS responses should not include reports. As already pointed out on the mailing list, the availability of reports can be queried using DAV:available-report. There are a couple of minor features which need not appear as OPTIONS responses. They can be detected by the absence or presence of certain properties: initial value of DAV:auto-version - if a server sets an initial value for DAV:auto-version, it MUST be the same initial value for all newly created version selectors. Reified version histories - This is a protected property. If supported, the server MUST provide it consistently. - If reified version histories are supported, the server MUST supports the DAV:version-history property on versions, version selectors, and working resources. - If reified version histories are not supported, the server MUST NOT include the DAV:version-history property on versions, version selectors, and working resources. Controlling forking - Controls forking on checkout and checkin. - Also covers implicit checkout and checkin - must support DAV:checkout-fork of versions, version selectors, and working resources - must support DAV:checkin-fork of versions, version selectors, and working resources - must support CHECKOUT specifying DAV:fork-ok in body - must support CHECKIN specifying DAV:fork-ok in body Mutable versions - Controls whether versions are mutable - the server MUST support (as in if-supported) CHECKIN specifying DAV:overwrite in body - the server MUST provide DAV:mutable for versions, version selectors, and working resources - for a single version history, all versions, version selectors, and working resources must have - the server chooses the initial boolean value for this property - the property propagates from version selector to version on CHECKIN [missing postcondition] - the property propagates from version to version selector on CHECKOUT [missing postcondition] - the property can be changed at any time on versions, version selectors, and working resources - overwriting happens only if DAV:overwrite is specified in body and DAV:mutable of the checked-out version is "T" The major advanced features are "workspace", "versioned-collection", "baselined-collection", "activity", and "merge". If a server returns one of these in an OPTIONS request, it promises the following: Workspace - Controls whether there are workspaces - option name: "workspace" - replaces: "workspace", "mkworkspace", "workspace-header", "workspace-url-report" - must support MKWORKSPACE method - must support "Workspace" header as explained in 15.1 - must support VERSION-CONTROL when request-URL is member of workspace - must support VERSION-CONTROL when request-URL is member of workspace and activities are supported - must support CHECKOUT when request-URL is member of workspace - must support CHECKOUT when request-URL is member of workspace AND activities are involved - must support CHECKIN when request-URL is member of workspace - must support CHECKIN when request-URL is member of workspace AND activities are involved - must support SET-TARGET when request-URL is member of workspace - must support deleting of workspaces with DELETE - must support DAV:repository-report as per 18.2 - must support DAV:workspace -url-report as per 18.3 - must support DAV:version-selector-url report as per 18.8 Versioned collections - Controls whether collections can be versioned - option name: "versioned-collection" - must support VERSION-CONTROL when request-URL is a collection - must support CHECKOUT when request-URL is a collection - must support CHECKIN when request-URL is a collection - must support SET-TARGET when request-URL is a collection - N.B. may or may not support BASELINE-CONTROL when request-URL is a collection Baselines - Controls whether baselines are supported - option name: "baselined-collection" - must support BASELINE-CONTROL method - must provide DAV:baseline-selector property of collections - must allow CHECKOUT, CHECKIN, and SET-TARGET on baseline selectors - must provide resources of type DAV:baseline - must provide DAV:version-set for all baselines - must support SET-TARGET when request-URL is a baseline selector - must support reports of type DAV:baselined-collection-report - N.B. may or may not support VERSION-CONTROL when request-URL is a collection Activity - Controls whether activities are supported - option name: "activity" - replaces: "activity", "mkactivity", "workspace-current-activity", "subactivity" - must support MKACTIVITY method - must support additional VERSION-CONTROL, CHECKOUT, CHECKIN, and SET-TARGET semantics - must support DAV:activity-set property of versions, version selectors, and working resources - must support DAV:unreserved property of version selectors and working resources - must support DAV:current-activity-set of workspaces - must support resources of type DAV:activity - must support DAV:version-set property of activities - must support DAV:subactivity-set property of activities - must support DELETE when request-URL is activity - must support VERSION-CONTROL when request-URL is member of workspace and activities are supported - must support CHECKOUT specifying DAV:activity-set in body - must support CHECKOUT specifying DAV:unreserved in body - must support CHECKOUT when request-URL is member of workspace AND activities are involved - must support CHECKIN when request-URL is member of workspace AND activities are involved - must support reports of type DAV:repository-report - must support reports of type DAV:current-workspace-report Merging - Controls whether merging is supported - option name: "merge" - must support MERGE method - must support DAV:merge-set of version selectors and working resources - must support DAV:auto-merge-set of version selectors and working resources - must support reports of type DAV:merge-preview-report - must support reports of type DAV:compare-report -Boris.