# Apache Cocoon

Apache Cocoon o Cocoon és un entorn de programació de pàgines web dinàmiques al voltant dels conceptes de procés de transformacions en seqüència (ang.: pipeline), separació d'aspectes i componentització.
L'entorn es basa en l'expressió dels elements en XML i la seva transformació mitjançant fulls d'estil XSLT.
Tot el procés es compila generant una Servlet Java per a ser emprada en un servidor Tomcat o altres servidors contenidors de Servlets.
Segons el model MVC (Modelització/Visualització/Controlador) la modelització (Accions) es fa en Java, el controlador en Flowscript (una extensió de Javascript) i la visualització és el resultat del procés de transformacions descrit anteriorment a partir de pàgines XSP (XML Server Pages) amb marcatge separador de contingut i lògica i també a partir de documents XML o de generadors d'esdeveniments SAX.

## El SiteMap

El sitemap és l'element base de la configuració de Cocoon. Descriu els components emprats i la seqüència de processos (pipeline) per a cadascun dels patrons de comanda http (URI) especificats.

## Seqüència de procés (pipeline)

En un sitemap poden especificar diverses pipelines.

### Matchers o Encaixos de patrons

    Permeten especificar els patrons de comanda http als quals es respondrà amb la present pipeline. Cada pipeline té un únic component matcher. Els comodins dels patrons del matcher estàndard o els grups en un matcher d'expressions regulars permeten captar en variables les parts de la URI.

### Accions

    Les accions permeten executar codi Java per a les requestes que comportin la modificació de les dades de sessió o l'actualització de la base de dades. Cada acció retorna un diccionari de variables utilitzable en la resta del procés. Si es retorna NULL la pipeline s'avorta. Es poden concatenar diverses accions cadascuna de les quals fondrà el seu diccionari amb el diccionari precedent.

### Generadors

    Els generadors permeten generar dinàmicament documents XML com a origen de transformació, emprant entre altres paràmetres les claus dels diccionaris de les accions precedents.

### Lectors

    Els lectors permeten proporcionar documents o fitxers estàtics (ex. imatges) sense transformar. Són origen i final de la pipeline.

### Agregadors

    Els agregadors permeten agregar XML procedent de parts (subdocuments XML a incorporar) o subpipelines.

### Selectors

    Els selectors permeten establir alternatives de transformació a partir de les variables de la pipeline.

### Transformadors

    Transformen el resultat del pas anterior mitjançant un full d'estil XSLT.

### Serialitzadors

    Generen la sortida en el format especificat.

### Vistes

    Les vistes (views) s'utilitzen per a proves. Creen un punt de sortida a la pipeline.

## El Controlador

El controlador en llenguatge Flowscript (extensió de Javascript) permet especificar el flux de treball de diverses pàgines en una rutina, mitjançant continuacions.
El mecanisme de continuacions permet continuar una rutina en un punt intermedi prèviament interromput, havent desat la pila de crides i l'entorn de variables, establint un punt d'entrada.
Les dades de continuació es desen amb les dades de sessió i el seu identificador pot ser utilitzat com a paràmetre ocult en un formulari.

## Enllaços externs

* The Apache Cocoon Project (anglès)
* Cocoon 2.1 Documentation (anglès)
* The Apache Software Foundation (anglès)
* Mostres de programació Cocoon Arxivat 2006-10-10 a Wayback Machine. (anglès)
* Apache Lenya (anglès) Sistema de gestió/publicació de continguts desenvolupat amb Cocoon.