Publié par : Hélène Rabault le : 27 février 2009
EMC (Documentum), Microsoft (Sharepoint) et IBM (Filenet) ont publié conjointement en septembre 2008 un standard pour assurer l’intéropérabilité de systèmes de gestion de contenu d’entreprise : CMIS ou Content Management Interoperability Services.
La mise en place de CMIS au niveau des progiciels nécessite l’ajout d’un connecteur basé sur des Web Services SOAP ou bein sur le protocole REST/ATOM. Aucune réécriture du code, donc.
Le langage exploité par CMIS, CMIS Query Language, s’inspire de SQL-92 grammar (ISO/IEC 9075: 1992 – Database Language SQL) et de sa syntaxe. Il permet de réaliser des jointures entre tables, des sélections de données de type « select» et des recherches plein-texte
Le standard complet dans sa version 0.5 est disponible en téléchargement :
Voici ce que contient le dossier du standard :

CMIS (1)

CMIS (2)
CMIS est composé de plusieurs parties :
Les “CMIS services” fournis en plus du modèles de données permettent notamment de
CMIS spécifie également des correspondances avec SOAP et REST/ATOM pour la mise en place de connecteurs
Un repository peut gérer un certain nombre de fonctions. Le service getRepositoryInfo renvoie la liste des fonctions prises en charge. Les fonctions concernées sont
Les documents représentent des unités de contenu à l’intérieur de l’entrepôt.
Un document peut inclure ou non un flux de contenu, ou” content stream”, et cela doit être précisé dans les définitions des objets de type Document (voir “types d’objets” ci dessous).
Les documents peuvent être versionnés.
Les répertoires ou dossiers sont les contenants dans lesquels des documents (ou d’autres répertoires) peuvent être déposés. Un document peut être déposé dans un ou plusieurs répertoires. A l’instar des documents les Folder objects sont interrogeables.
Il y a une relation hiérarchique implicite entre un dossier et les objets qu’il contient, avec comme contraintes d’intégrité de cette relation sa réciprocité, et l’interdiction de créer des boucles (un objet de type répertoire ne peut pas être à lui même son propre père). La suppression d’un élément de la collection associée au répertoire doit également détruire le lien hiérarchique implicite qui le rattachait à un dossier parent.
Une propriété AllowedChildObjectTypeIDs permet de définir quels sont les types d’objets autorisés comme “enfants” de chaque Folder object.
Le service removeObjectFromFolder permet de supprimer le lien père-fils entre un “Folder object” et un objet d’un autre type déclaré être son fils.
Tout répertoire a un et un seul élément père, sauf les repertoires situés à la racine du système, qui n’ont pas d’élément père.
Un répertoire racine ne peut être créé, supprimé ou déplacé via des CMIS services.
Tout nouveau répertoire créé doit se voir déclarer un “Folder object” parent, par le service addObjectToFolder.
Il est impossible de supprimer un “Folder object” dès lors qu’un objet au moins lui est associé.
Il n’est pas obligatoire en revanche d’attribuer aux autres types d’objets un “Folder object” parent.
Deux modes de fonctionnement distincts peuvent être choisis pour un entrepôt :
ou bien l’attribution d’un répertoire à un document est unique pour toutes les versions du document (version-independent : elles sont toutes stockées dans un même repertoire), ou bien elle est décidé pour chacune des versions du document (version-specific : chaque version d’un document peut être placée dans un répertoire indépendamment de ce qui a été décidée pour les versions antérieures de ce document .)
Les relations désignent des relations très lâches entre deux 2 objets (documents ou répertoires) dans l’entrepôt. Elles peuvent avoir comme objet source ou comme objet cible des Documents, des Folders, et, selon les repositories, éventuellement des Policies.
Etablir une relation entre deux objets n’a aucune incidence sur eux. Par exemple cela n’entraîne pas un changement de version, ni de date de dernière modification. L’objet cible de la relation n’hérite pas des contraintes ni des comportements de l’objet source.
Il est autorisé de créer une relation avec le même objet comme cible et comm source de la relation.
Ils gèrent les règles d’administration qui sont appliquées aux objets.
L’entrepôt CMIS peut supporter des objets de type Policy object mais cela n’est pas obligatoire. Un objet peut être soumis à une ou plusieurs règles.
Les 4 objets principaux décrit ci-dessous acceptent d’être déclinés en types : types de documents, types de relations etc.
La définition de chaque type d’objet est constituée des informations suivantes
Pour définir des types d’objets Document on inclut également
Pour définir des types d’objets Relationship on inclut également
Les propriétés peuvent être mono- ou multi-valuées. Les types de données sont basés sur XML Schema Part 2: Datatypes Second Edition (28/10/2004) :
Les quatres objets définis ci-dessus (Document, Folder, Relation et Policy) ont en commun les propriétés suivantes
Les propriétés d’un document sont
Les propriétés d’un dossier sont :
Les propriétés d’une relation sont exclusivement :
Les propriétés pour les règles sont :
Il est possible, pour n’importe lesquels des 4 types d’objets prévus, de créer des types d’objets supplémentaires qui spécifient le schéma des propriétés autorisées ou requises pour les objets.
CMIS fournit des services CRUD (Create, Retrieve, Update, Delete) applicables aux objets.
getRepositories : retourne URI, noms et IDs des repositories disponiblesgetRepositoryInfo : retourne des informations détaillées sur un repository : ID, nom, URI, description, ID du dossier racine, nom et version du produit, versions supportées de CMIS, propriétés spéicfiques du repositoriy ex: gestion du multifiling, repositories liésgetTypes retourne tous les types d’objets du repository et leurs attributsgetTypeDefinition : retourne des propriétés détaillées d’un type d’objet déterminégetAllowableActions : retourne les actions autorisées à l’utilisateur sur un objet ex. le supprimer, modifier ses propriétés, le changer de dossier etc.getProperties : retourne les propriétés de l’objet et éventuellement les actions autorisées à l’utilisateur sur cet objetgetContentStream : retourne le flux de conteu du documentgetDescendants : retourne la liste des objets de l’arborescence à partir d’un dossier déterminé, sur un ou plusieurs niveaux. Il est possible de ne demander que les objets d’un type particuliergetChildren : retourne les éléments situés au premier niveau sous le dossier spécifié. Si toutes les versions d’un même document sont sous un même dossier, seule la version la plus récente est renvoyéegetFolderParent : retourne l’ID et les propriétés du ou des dossier(s) parent(s) de l’objet de type Folder spécifiégetObjectParents : retourne l’ID et les propriétés du ou des dossier(s) parent(s) de l’objet non- Folder spécifiégetCheckedoutDocuments : retourne les objets de type Documents validés auxquels l’utilisateur à accès (en général ceux qu’il a lui-même validés)createDocument : crée un objet Document du type spécifié, et éventuellement lui attribue un dossier parentcreateFolder : crée un objet de type Folder du type spécifiécreateRelationship : crée une relation d’un type déterminé entre deux objetsreatePolicy : crée un objet Policy du type spécifié, et éventuellement lui attribue un dossier parentupdateProperties : permet de mettre à jour les propriétés de l’objet spécifié (dans CMIS 1.0 pour une propriété multivaluée il faut mettre à jour toute la liste de valeurs)moveObject : permet de déplacer l’objet spécifié d’un dossier à un autredeleteObject : permet de supprimer l’objet spécifiédeleteTree : permet de supprimer une arborescnce à partir du point (dossier) spécifié inclu.setContentStream : crée ou remplace le flux de contenu associé à l’objet Document spécifiédeleteContentStream : supprime le flux de contenu associé à l’objet Document spécifié(valable uniquement pour les repositories qui acceptent le multifiling)
addObjectToFolder : placer l’objet spécifié sous un dossieremoveObjectFromFolder : enlver l’objet spécifié d’un ou de tous les dossiers dans lesquels il est placéapplyPolicy : applique une règle à l’objet spécifiéremovePolicy : annule l’application d’une règle à l’objet spécifiégetAppliedPolicies : Retourne la liste des objets Policy appliqués à l’objet spécifiégetRelationships : retourne la liste des relations de l’objet spécifié, eventuellement restreintes à celles d’un type particulier ou établie dans une direction précise (source/cible)checkOut :checkIn : fait de la copie privée la version courante du documentgetPropertiesOfLatestVersion : retourne les propriétés de la dernière version dans la série spécifiéegetAllVersions : retourne la liste de toutes les versions de la série sépcifiée, triée par ordre décroissant de date de créationdeleteAllVersions : supprime toutes les versions de la série spécifiée