This is my next article providing an introduction to Enterprise Content Management (ECM). This article introduces the most important standard for building content solutions: Content Management Interoperability Services (CMIS). When a developer is given a task that involves content, it will save time and energy to leverage the CMIS standard when interacting with that content.
One of the visionaries behind CMIS is John Newton who was a founder of Alfresco. He likes to compare the adoption of the CMIS standard for content repositories to the adoption of the SQL standard for relational databases in the 1990s. Before SQL was widely adopted, developers had to learn the vendor specific API for their particular system. Now developers can learn the general concepts of relational databases by learning SQL, and apply those skills to any product. Libraries exist in almost every language, and many products have integrations with any SQL compliant system. Developers can still take advantage of vendor specific features, but by keeping the most common operations compliant with the standard, developers can build solutions with far less dependence on a specific vendor, or on a specific version of that vendor's database.
CMIS is a least-common-denominator standard that covers the basic operations needed for document management. The goal of CMIS is to cover the most common use cases, but frequently a vendor specific library will be necessary to take advantage of additional capability. CMIS defines a SOAP and REST API which addresses the following needs:
- CRUD functions: create, read, update, delete,
- Relationships, folder hierarchies, and hierarchy traversal,
- Library services: upload, download, versioning, check-in and check-out,
- Permissions as access control lists,
- Meta-data properties,
- Repository query.
The repository query is done using an SQL-like syntax:
SELECT cm:customer FROM alf:invoice WHERE CONTAINS("Utah")
The beauty of CMIS is the flexibility this standard provides for solving problems related to content. You can use it to integrate two CMIS compliant repositories, allow a client to work with multiple back-end repositories, or build an integration with authoring tools. CMIS is the glue that allows a simple three-tier architecture for content applications. The content repository is the middle tier which provides the system of record for all the enterprise content. At the top is a presentation tier which exposes that content to the appropriate clients. At the bottom is a content production tier that allows content to be submitted from enterprise applications such as the CRM, ERP, or case management application.
The CMIS standard was ratified by OASIS in 2010, and though it is a relatively young standard it has already received significant adoption (Microsoft, IBM, Alfresco, EMC, Nuxeo). Most enterprise content repositories have CMIS APIs, and many products will integrate with any CMIS repository. The most common version of the standard currently is version 1.0. Version 1.1, ratified last month, has some nice new capabilities, but you won't find support for it in many places for a while. Jeff Potts has a good blog post explaining what is new in CMIS 1.1.
Good places for learning more about CMIS:
- Alfresco's CMIS page; make sure to check out the CMIS cheatsheet.
- Apache Chemistry project: home to client libraries in Java, Python, .NET, Objective C, and PHP, as well as useful development tools; make sure to play with the CMIS Workbench.
- There are other client libraries for Ruby, Perl, C++, and I am sure more.
- The Alfresco Documentation.
- CMIS and Apache Chemistry in Action (disclosure: I am friends with a few of the authors).
My hope is that CMIS will take its place next to SQL in your collection of important tools, and that it will be useful every time you are asked to deal with content.