# Apache Cocoon

Apache Cocoon, usualmente llamado simplemente Cocoon, es un framework para aplicaciones web construido en torno a los conceptos de pipeline, encapsulación y desarrollo de aplicaciones web basado en componentes. El framework se enfoca en la publicación pasada en XML y XSLT, habiendo sido construido en el lenguaje de programación Java. La flexibilidad lograda basándose fundamentalmente en XML permite la rápida publicación de contenidos en una variedad de formatos, entre los que se incluyen HTML, PDF y WML. Los sistemas de gestión de contenidos Apache Lenya y Daisy han sido creados sobre la base de este framework. Cocoon también se usa con frecuencia como herramienta ETL de almacén de datos o como middleware para el transporte de datos entre diferentes sistemas.

## Sitemap

El sitemap constituye el núcleo de Cocoon. Es aquí donde el desarrollador del sitio web configura las diferentes componentes de Cocoon y define las interacciones cliente–servidor en lo que Cocoon denomina pipelines.

## Componentes

Las componentes de Cocoon se agrupan por función.

### Matchers

Se denominan matchers las componentes responsables de hallar correspondencias o calces entre elementos de una petición, tales como URLs o cookies, y patrones de búsqueda tipo wildcard o regular expression. Cada petición se somete a los matchers definidos en el sitemap hasta encontrar una correspondencia. Es dentro de un matcher donde se especifica la respuesta a una petición determinada.

### Generadores

Los generadores crean un flujo de datos para su procesamiento ulterior. Este flujo puede generarse a partir de un documento XML existente o bien existen generadores capaces de generar XML original para representar algo existente en el servidor, como por ejemplo una estructura de directorios o datos gráficos.

#### XSP

Un tipo específico de generador es una XML Server Page (XSP ), es decir, un documento XML que contiene directivas basadas en tags que especifican como generar contenido dinámico al momento de la petición. Después de procesadas por Cocoon, estas directivas han sido reemplazadas por contenidos generados, de modo que el documento XML aumentado resultante puede ser objeto de procesamientos ulteriores (típicamente una transformación XSLT). Las XSP se transforman en productores de Cocoon, típicamente como clases de Java, aunque también podría usarse un lenguaje de scripting para el que exista un procesador basado en Java.
Las directivas pueden ser ya sea tags predefinidos ("XSP") o bien tags definidos por el propio usuario, definiéndose ambos tipos en los llamados logicsheets. Los tags se definen por medio de plantillas XSLT que describen como estos tags (representados como nodos XML) se transformarán en otros nodos XML o en código procedimental, como por ejemplo en código Java. Los tags se usan para incrustar la lógica procedimental, sustituir expresiones, consultar informaciones del entorno del servidor web, así como otras operaciones.
Nótese que XSP ha sido declarado obsoleto en versiones recientes de Cocoon.

### Transformadores

Los transformadores reciben un flujo de datos y lo cambian de alguna manera. Las transformaciones más comunes se realizan por medio de XSLT para cambiar los datos de un formato XML a otro. Pero también existen transformadores que reciben otros tipos de datos (por ejemplo, comandos SQL).

### Serializadores

Un serializador transforma un flujo de eventos XML en una secuencia de bytes (como por ejemplo HTML) que pueda constituir la respuesta al cliente. Existen serializadores que permiten enviar los datos en gran variedad de formatos, entre los que se incluyen HTML, XHTML, PDF, RTF, SVG, WML y texto simple, por ejemplo.

### Selectores

Los selectors ofrecen la misma funcionalidad que una sentencia de switch. Son capaces de seleccionar determinados elementos de una petición y elegir la segmentación apropiada que se usará.

### Vistas

Las vistas se usan principalmente para realizar pruebas. Una vista es una punta "lateral" de salida en una pipeline. Es posible hacer salir el flujo XML producido hasta este punto. Así se puede verificar que la aplicación esté funcionando correctamente.

### Lectores

Los lectores publican contenidos sin analizarlos sintácticamente (sin procesamiento XML). Se usan para imágenes y contenidos similares.

### Acciones

Las acciones son clases Java que ejecutan alguna lógica de negocio o administran la producción de nuevos contenidos.

## El pipeline

Una pipeline se emplea para especificar como deberán interactuar las diferentes componentes de Cocoon con una petición dada para producir una respuesta a la salida. Una segmentación típica consiste en un generador, seguido por cero o más transformadores y finalmente un serializador.