Content Management Interoperability Services (CMIS) Extension

Latest State Symbolic Link Version 1.10

3019 October 2014

Latest version:

Technical Committee:

OASIS Content Management Interoperability Services (CMIS) TC

Author:

Kenneth Baclawski <

Eric Chan <

Extends:

The extension extends both CMIS 1.0 and CMIS 1.1.

Abstract:

This extension provides for a dependent object that specifies a latest accessible state identifier. When a latest state symbolic link is accessed as a document, it is automatically dereferenced to a document object in exactly the same manner as the latest accessible state identifier. The parent object of a latest state symbolic link is a folder object. A latest state link can only exist within its parent folder. However, one can move or copy a latest state symbolic link to another folder, in which case the parent object will be changed to the folder in which the latest state symbolic link was moved or copied. A latest state symbolic link can have an ACL that is independent of the ACL of the documents referenced by the latest accessible state identifier. If there is no document corresponding to the latest accessible state identifier or if none of the states of the document corresponding to the latest accessible state identifier are accessible to the user, then a NoObjectFound exception is thrown when the latest state symbolic link is accessed as a document. When a latest state symbolic link is created, if the document referenced by the latest accessible state identifier does not exist or is not accessible, no action is taken by the repository. In other words, the latest accessible state identifier is not dereferenced when the latest state symbolic link is created.

Note1: This is a proposal for an extension to CMIS 1.0 and 1.1. The name of the extension has not yet been accepted. When the name of the extension has been accepted, all occurrences of “latest state symbolic link” will be replaced by the accepted name.

Note2: The ability to move a latest state symbolic link to another folder may conflict with the semantics of dependent objects.

Note3: While the implementation of latest state symbolic link is repository specific, the intention is for it to be nothing more than a string: a latest accessible state identifier. It is dereferenced only when it is used as if it was a document. In other respects it is just a dependent object.

Motivation

As a rough estimate, the 80% usage case for a CMIS repository is as a filesystem alternative. The POSIX operating-system standard supports symbolic links (also called soft links or symlinks). This includes Unix-like systems, Mac OS X and Windows (in the form of shortcuts). The popularity of symbolic links is a strong motivation for adding support for them in the CMIS standard. The POSIX operating-system standard also supports hard links. The hard link feature is similar to the CMIS capabilityMultifiling. Unlike symbolic links, hard links are regarded as being difficult to support, and they are less popular than hard links.difficult to support and are not very popular. The Plan 9 operating system being developed as a successor to Unix does not include hard links.

A symbolic link is broken if it does not reference an accessible document. A symbolic link could be broken because of access restrictions for the user rather then because the document does not exist. Since the access restrictions for the symbolic link could differ from those for the referenced document, it is not feasible to require that a symbolic link be automatically deleted when the referenced document is deleted.

The motivation and use cases were derived from the motivation and use cases in the Latest State Identifier proposal:

Use Case 1. Access a CMIS repository as a filesystem using CRUD operations.

There is one primary difference between how CMIS is used and how filesystems are typically used. Filesystems do not maintain versions of documents, so every document identifier implicitly refers to the latest state of the document. CMIS repositories, on the other hand, can maintain versions of a document, and a document identifier can only refer to a specific version of the document when there are multiple versions. In order for a CMIS client application to access a CMIS repository as if it was a filesystem, then it is necessary to have an identifier for each document that references the "latest state" of the CMIS document. The latest accessible state identifier provides this capability for a CMIS repository. However, the latest accessible state identifier is not an object. The intention was to minimize the impact that the latest accessible state identifier capability would have on repositories. Unfortunately, this has the disadvantage that a latest state identifier cannot be manipulated as one would any other object. The latest state symbolic link extension would allow one to create a reference to the latest accessible state of a document in a folder.

Use Case 2. Store references to CMIS managed documents in multiple folders when multi-filing is not supported.

References to CMIS managed documents can occur in a variety of contexts such as within folders, documents, web pages, bookmarks, and other files. The latest accessible state identifier can provide support for these these other contexts when they are not CMIS managed. When these other contexts (except for folders) are CMIS managed, one can specify a latest accessible state identifier as a text string. When a repository does not have the CapabilityMultifiling, a document can only be filed in a single folder. the latest state symbolic link can be used to allow one to create and to manage references to documents in multiple folders.

Specification

A new class is introduced called cmis:LatestStateSymbolicLink as a subclass of cmis:Item.A new class will be introduced called cmis:LatestStateSymbolicLink which is a subclass of cmis:DependentObject which, in turn, is a subclass of cmis:Object.

The cmis:rootParent property that is inherited from cmis:DependentObject is restricted to be the identifier of a cmis:Folder.

Latest State Symbolic Link Object Type Definition

This section describes the definition of the latest state symbolic link object-type's attribute values and property definitions which must be present on latest state symbolic link instance objects. All attributes and property definitions are listed by their id.

Attribute Values

The latest static symbolic link object-type MUST have the following attribute values.

id

Value: cmis:latestStateSymbolicLink

localName

Value: <repository-specific>

localNamespace

Value: <repository-specific>

queryName

Value: cmis:latestStateSymbolicLink

displayName

Value: <repository-specific>

baseId

Value: cmis:latestStateSymbolicLink

parentId

Value: MUST NOT be set

description

Value: <repository-specific>

creatable

Value: TRUE<repository-specific>

fileable

Value: MUST be TRUE

queryable

Value: SHOULD be TRUE

controllablePolicy

Value: <repository-specific>

controllableACL

Value: <repository-specific>

includedInSupertypeQuery

Value: <repository-specific>

fulltextIndexed

Value: <repository-specific>

typeMutability.create

Value: <repository-specific>

typeMutability.update

Value: <repository-specific>

typeMutability.delete

Value: <repository-specific>

versionable

Value: MUST be FALSE

contentStreamAllowed

Value: MAY be TRUE if contentStreamAllowed is TRUE for cmis:document. Otherwise MUST be FALSE.

Property Definitions

The object-type MUST have the following property definitions, and MAY include additional property definitions. Any attributes not specified for the property definition are repository specific. For all property definitions on base types, the query name MUST be the same as the property id. The repository MUST have the following property definitions on the cmis:LatestStateSymbolicLink object-type:

cmis:name Name of the latest state symbolic link.

Property Type: String

Inherited: FALSE

Required: TRUE

Cardinality: single

Updatability: SHOULD be readwritereadonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: SHOULD be TRUE

Orderable: SHOULD be TRUENot Applicable

cmis:description Description of the latest state symbolic link.

Property Type: String

Inherited: FALSE

Required: FALSE

Cardinality: single

Updatability: SHOULD be readwritereadonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: <repository specific>

Orderable: <repository specific>

If the repository doesn't support object descriptions, the Updatability SHOULD be readonly and the repository SHOULD return a "not set" value for this property.

cmis:objectId Id of the latest state symbolic link.

Property Type: Id

Inherited: FALSE

Required: FALSE

Cardinality: single

Updatability: readonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: TRUE

Orderable: <repository specific>

The repository MUST return this property with a non-empty value if the property filter does not exclude it.

cmis:baseTypeId Id of the base object-type for the latest state symbolic link.

Property Type: Id

Inherited: FALSE

Required: FALSE

Cardinality: single

Updatability: readonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: SHOULD be TRUE

Orderable: <repository specific>

The repository MUST return this property with a non-empty value if the property filter does not exclude it.

cmis:objectTypeId Id of the latest state symbolic link's type.

Property Type: Id

Inherited: FALSE

Required: FALSE

Cardinality: single

Updatability: readonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: SHOULD be TRUE

Orderable: <repository specific>

The repository MUST return this property with a non-empty value if the property filter does not exclude it.

cmis:secondaryObjectTypeIds Ids of the object's secondary types.

Property Type: Id

Inherited: FALSE

Required: FALSE

Cardinality: multi

Updatability: readwrite if secondary types are supported, readonly otherwise

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: SHOULD be TRUE

Orderable: FALSE

If the repository does not support secondary types, the repository MUST return "not set".

cmis:createdBy User who created the latest state symbolic link.

Property Type: String

Inherited: FALSE

Required: FALSE

Cardinality: single

Updatability: readonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: TRUE

Orderable: TRUE

The repository MUST return this property with a non-empty value if the property filter does not exclude it.

cmis:creationDateDateTime when the latest state symbolic link was created.

Property Type: DateTime

Inherited: FALSE

Required: FALSE

Cardinality: single

Updatability: readonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: TRUE

Orderable: TRUE

The repository MUST return this property with a non-empty value if the property filter does not exclude it.

cmis:lastModifiedBy User who last modified the latest state symbolic link.

Property Type: String

Inherited: FALSE

Required: FALSE

Cardinality: single

Updatability: readonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: TRUE

Orderable: TRUE

The repository MUST return this property with a non-empty value if the property filter does not exclude it.

cmis:lastModificationDate DateTime when the latest state symbolic link was last modified.

Property Type: DateTime

Inherited: FALSE

Required: FALSE

Cardinality: single

Updatability: readonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: TRUE

Orderable: TRUE

The repository MUST return this property with a non-empty value if the property filter does not exclude it.

cmis:isImmutable Defines if the latest state symbolic link can be modified.

If TRUE the repository MUST throw an error at any attempt

to update or delete the object.

Property Type: Boolean

Inherited: FALSE

Required: FALSE

Cardinality: single

Updatability: readonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: <repository specific>

Orderable: <repository specific>

The repository MUST return this property with a non-empty value if the property filter does not exclude it.

cmis:changeToken Opaque token used for optimistic locking and concurrency checking.(See section 2.2.1.3 Change Tokens.)

Property Type: String

Inherited: FALSE

Required: FALSE

Cardinality: single

Updatability: readonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: FALSE

Orderable: FALSE

The repository MUST return this property with a non-empty value if the property filter does not exclude it. If the repository does not support change tokens, this property SHOULD not be set.

cmis:contentStreamLength Length of the content stream of the referenced document (in bytes).

Property Type: Integer

Inherited: FALSE

Required: FALSE

Cardinality: single

Updatability: readonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: <repository specific>

Orderable: <repository specific>

The repository MUST return this property with a non-empty value if the referenced document has a content stream and the property filter does not exclude it. If the referenced document has no content stream, the repository MUST return "not set".

cmis:contentStreamMimeType MIME type of the content stream of the referenced document.

Property Type: String

Inherited: FALSE

Required: FALSE

Cardinality: single

Updatability: readonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: <repository specific>

Orderable: <repository specific>

The repository MUST return this property with a non-empty value if the referenced document has a content stream and the property filter does not exclude it. If the referenced document has no content stream, the repository MUST return "not set".

cmis:contentStreamFileName File name of the content stream of the referenced document.

Property Type: String

Inherited: FALSE

Required: FALSE

Cardinality: single

Updatability: readonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: <repository specific>

Orderable: <repository specific>

The repository MUST return this property with a non-empty value if the referenced document has a content stream and the property filter does not exclude it. If the referenced document has no content stream, the repository MUST return "not set".

cmis:contentStreamId Id of the content stream of the referenced document.

Property Type: String

Inherited: FALSE

Required: FALSE

Cardinality: single

Updatability: readonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: <repository specific>

Orderable: <repository specific>

The content stream of a latest state symbolic link coincides with the content stream of the referenced document. If the referenced document has no content stream, the repository MUST return "not set".

cmis:rootParent Id of folder in which the latest state symbolic link is filed.

Property Type: String

Inherited: TRUE

Required: TRUE

Cardinality: single

Updatability: MUST be set to the folder in which the latest state symbolic link is filed.

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: TRUE

Orderable: FALSE

The property MUST point to a valid, existing instance of type cmis:Folder. When the root parent is deleted, the repository MUST delete all cmis:LatestStateSymbolicLink instances that refer to it in their cmis:rootParent property.

A repository MAY support cmis:immediateParent. The meaning of this property for the latest state symbolic link is repository dependent.

cmis:referenceId Id of the referenced document.

Property Type: String

Inherited: FALSE

Required: TRUE

Cardinality: single

Updatability: readonly

Choices: Not Applicable

Open Choice: Not Applicable

Queryable: <repository specific>

Orderable: <repository specific>

A CMIS repository MAY restrict the syntax of cmis:referenceId to conform with the syntax for a latest accessible state identifier.

Services

The latest state symbolic link shares the same CRUD operations as itemdependent objects.

The moveObject service is modified so that moving a latest state symbolic link MUST result in the cmis:rootParent property being changed to the new folder.

The getContentStream, setContentStream, appendContentStream, deleteContentStream and getRenditions services are modified so that such as service can apply to a latest state symbolic link. When applied to such an object, the effect is the same as applying the service to the referenced document. The following are the changes that should be made:

getContentStream

Replace “The identifier for the object.” with “The identifier for the object or the identifier for a latest state symbolic link that references the object.”

setContentStream

Replace “The identifier for the object.” with “The identifier for the object or the identifier for a latest state symbolic link that references the object.”

appendContentStream

Replace “The identifier for the document object.” with “The identifier for the document object or the identifier for a latest state symbolic link that references the document object.”

deleteContentStream

Replace “The identifier for the document object.” with “The identifier for the document object or the identifier for a latest state symbolic link that references the document object.”

getRenditions

Replace “The identifier for the object.” with “The identifier for the object or the identifier for a latest state symbolic link that references the object.”

A latest state symbolic link is never multi-fileable, so no services for multi-fileable objects can be applied to a latest state symbolic link. This is a consequence of the requirement that a latest state symbolic link always have exactly one cmis:rootParent which MUST be the id of the folder in which the latest state symbolic link is filed.

Extension Definition

CMIS 1.0

The extension is supported if there is a cmis:LatestStateSymbolicLink subclass of cmis:ItemDependentObject.

CMIS 1.1

The extension is supported if there is a cmis:LatestStateSymbolicLink subclass of cmis:ItemDependentObject.

The following is the feature extension entry in the repository info (see CMIS 1.1 specification, section 2.1.1.3):

ID: /
URL: /
Common Name: / Latest State Symbolic Link
Version Label: / 1.10
Description: / This extension provides for an item a dependent object that references the latest accessible state of a cmis:document, that can be filed in a folder and that can be managed independently of the cmis:document that it references.

CMIS Extension: Latest State Identifier Version 1.10.1306 October 2014

Page 1 of 12