CMIS soporta SOAP y también REST a través del protocolo AtomPub. Atom o AtomPub es un estándar del IETF para la creación y actualización de los recursos web. Está basado en REST y es muy flexible en la extensión de los metadatos que maneja. Este protocolo es la base para la API REST.
CMIS está hecho pensado en los sistemas existentes y para permitir casos uso básicos, tales como:
- Permite a los usuarios la creación colaborativa de contenido, por ejemplo para hacer uno o más documentos, páginas web, etc.
- Una forma de acceso a portales, con CMIS se permite visualizar y mostrar contenidos desde múltiples fuentes.
- Mashups de contenidos en sitios web, sitios web que usan CMIS pueden crear aplicaciones compuestas o integrar los datos y las funcionalidades de uno o varios repositorios.
- Búsqueda paralela contra múltiples interfaces de repositorios CMIS.
CMIS se centra en servicios que puede ofrecer un repositorio para ser realmente interoperable. Estos servicios están basados en gestión de contenidos, metadatos e índices.
El repositorio CMIS, es la forma que tiene Alfresco de mostrar todos los contenidos cumpliendo los requerimientos del estándar. Mediante CMIS podemos ver las capacidades CMIS de nuestro Alfresco en este enlace http://localhost:8080/alfresco/service/cmis/index.html. Vamos a ver con más detalle tres conceptos fundamentales:
- Consultas CMIS
- Servicios CMIS
- Modelo de objetos CMIS
Una consulta CMIS se basa en SQL-92. La consulta es de sólo lectura y no permite manipulación de datos.
En la sintaxis que se puede utilizar están las siguientes cláusulas:
- SELECT con una lista de objetos
- FROM con los tipos de objeto que se consultan
- JOIN para realizar una combinación entre los tipos de objetos (aspectos).
- WHERE con especificar una condición
- IN y ANY para consultar propiedades multi-valuadas.
- CONTAINS para especificar un texto concreto en la búsqueda.
- IN_FOLDER y IN_TREE para buscar dentro de una jerarquía de carpetas.
- ORDERBY para ordenar los resultados.
Para hacernos una idea, podríamos entender una consulta CMIS en una estructura relacional donde el tipo de objeto sería como una tabla, el objeto como una fila y la propiedad como una columna que puede tener varios valores. Además se puede consultar el contenido binario real mediante una consulta de texto completo e información de ruta de la carpeta con ayuda de las funciones in_tree y in_folder. Las consultas también se pueden paginar para crear la interfaz de presentación al usuario. Estos son algunos ejemplos de consultas:
[sql]
SELECT * FROM cmis:document
SELECT * FROM cmis:document WHERE cmis:name = ‘invite-email.ftl’
SELECT * FROM cmis:document WHERE cmis:creationDate > TIMESTAMP ‘2011-04-01T00:00:00.000+00:00’
SELECT * FROM cmis:document WHERE CONTAINS(‘alfresco’)
[/sql]
Como hemos comentado, CMIS proporciona servicios a los que puede acceder mediante SOAP o AtomPub (REST), que se pueden usar dependiendo de la preferencia o caso de uso. Estos son los servicios CMIS soportados:
- Servicios del Repositorio: permiten descubrir repositorios disponibles, obtener la capacidad de estos repositorios y proporcionar información de los tipos disponibles en el repositorio desde el Diccionario de Datos.
- Servicios de Navegación: permiten navegar por el repositorio mediante el acceso al árbol de carpetas. Se pueden utilizar estos servicios para saber elementos padres e hijos de un objeto concreto.
- Servicios de Objeto: proporcionan CRUD (Crear, Leer, Actualizar, Borrar) y control de los servicios en cualquier objeto, incluyendo documento, carpeta, política y objetos relacionados. Para los documentos, esto incluye establecer y obtener de sus propiedades, políticas y el contenido en si mismo. Estos servicios se pueden usar mediante la ruta al objeto o el identificador único del objeto. También se pueden saber para qué acciones están autorizados los usuarios.
- Multifiling Services: permiten establecer jerarquías añadiendo o eliminando un objeto de una carpeta.
- Servicios de Descubrimiento (discovery services): permiten los servicios de consultas y cambios, adicionalmente permiten paginación de los resultados de las consultas.
- Servicios de Cambios: permiten saber lo que el contenido ha cambiado desde la última vez que se ha marcado el contenido. Se pueden utilizar estos servicios de cambio para la indexación externa y para servicios de replicación.
- Servicios de Control de Versiones: funcionan en paralelo a los servicios objeto y proporcionan los servicios de check-in y check-out, además de el historial de versiones de los objetos versionados.
- Servicios de Relación: permiten crear, gestionar y acceder a las relaciones o asociaciones entre objetos.
- Servicios de Políticas: se aplican sobre los objetos del repositorio. Las políticas son los objetos utilizados para implementar seguridad, registro o control.
- Servicios de ACL: permiten crear, gestionar y acceder a las listas de control para controlar quién puede realizar ciertas operaciones sobre un objeto.
El modelo de objetos CMIS es similar al modelo de objetos de Alfresco excepto en cuanto a los aspectos. CMIS soporta tipos de objetos que definen las propiedades asociadas a cada tipo. Cada objeto tiene un tipo de objeto, propiedades definidas por ese tipo de objeto y un identificador de objeto.
Los tipos de objetos soportan herencia y pueden tener subtipos tanto para documentos como para carpetas. Los tipos de objetos de documento puede tener flujos de contenido para almacenar y acceder a los datos binarios. Los tipos de objetos también puede estar relacionados entre sí con relaciones de tipos.
- Objeto Política o Directiva CMIS:
Un objeto de directiva representa una política administrativa que puede aplicarse a un repositorio, como una política de gestión de retención de información.
Una lista de control de acceso es un tipo de objeto de directiva. CMIS permite a las aplicaciones crear o aplicar ACLs. El repositorio de Alfresco también utiliza objetos de directiva para aplicar aspectos.
Los objetos documento tienen propiedades y enlaces para acceder a la información binaria que es el documento en si, pueden tener propiedades multivaluadas y versiones. También pueden tener transformaciones que los representan como por ejemplo un thumbnail.
Las versiones en CMIS son sencillamente la forma de controlar versiones de varios formas en diferentes implementaciones CMIS. Cada versión es un objeto independiente con su propia identificación de objeto. Con el identificador de un objeto determinado se puede obtener la versión actual o todas las versiones del objeto, así como eliminar una o varias versiones de un objeto.
Los objetos documento se almacenan en una jerarquía de carpetas. Al igual que en Alfresco, una carpeta puede estar dentro de otra para crear la jerarquía. La relación entre carpeta y documento es de muchos a muchos, si el repositorio soporta multi-presentación (multifiling), un documento puede estar presente en más de una carpeta.
- Enlaces que te pueden interesar: