Apache Chemistry
# Apache Chemistry

Apache Chemistry es un grupo de proyectos de la Apache Software Foundation que provee implementaciones de código abierto de la especificación CMIS que regula la interoperabilidad de los sistemas de gestión de contenidos.

El proyecto se compone de sub-proyectos dedicados a implementaciones en lenguajes de programación específicos:

* Apache OpenCMIS - bibliotecas CMIS, cliente y servidor, en Java
* cmislib - biblioteca de cliente CMIS en Python
* phpclient - biblioteca de cliente CMIS en PHP
* DotCMIS - biblioteca de cliente CMIS para .NET

## Estructura

Las implementaciones siguen de cerca la estructura de la norma CMIS. El modelo de datos considera:

* Documentos: son los ítem de contenido y sus ejemplares están dotados de una versión.
* Carpetas: se emplean para organizar los documentos.
* Relaciones: las relaciones (opcionales) entre objetos no los afectan como tales.
* Políticas: son objetos opcionales que pueden aplicarse a los objetos básicos.

Por otra parte y siguiendo igualmente a CMIS, las implementaciones consideran un modelo de servicios:

* Servicio de repositorios: permite descubrir los repositorios disponibles y consultar sus capacidades.
* Servicio de navegación: permite navegar a través de un repositorio seleccionado.
* Servicio de objetos: provee las funciones básicas CRUD (create, read, update, delete) para trabajar con objetos.
* Servicio de multi-archivos: permite organizar los contenidos agrupándolos en carpetas.
* Servicio de descubrimiento: provee servicios de consulta y cambio, así como una manera de paginar los resultados.
* Servicio de cambios: permite descubrir qué elementos han cambiado desde el último acceso.
* Servicio de versiones: permite el trabajo paralelo con los objetos proveyendo las operaciones de check-out" y check-in'
* Servicio de relaciones: permite crear, administrar y utilizar relaciones entre objetos de contenido.
* Servicio de políticas: permite aplicar políticas a los objetos de contenido que lo acepten.
* Servicio de listas de control de acceso: permite administrar los permisos de acceso a los objetos de contenido.
