Введение

Apache Cocoon, обычно сокращенно Cocoon, — это веб-приложе́ние, разработанное на основе концепций конвейера (Pipeline), разделения ответственности и компонентно-ориентированной веб-разработки. Фреймворк ориентирован на публикацию XML и XSLT и реализован на языке программирования Java. Использование XML в Cocoon призвано повысить совместимость форматов публикации, таких как HTML и PDF. Системы управления контентом Apache Lenya и Daisy были созданы на базе этого фреймворка. Cocoon также часто используется как инструмент ETL для организации хранилищ данных или в качестве промежуточного программного обеспечения для передачи данных между системами.

Карта сайта

Apache Cocoon использует карты сайта, чтобы предоставить пользователям возможность управлять различными компонентами программного обеспечения Cocoon, а также определять взаимодействие между клиентом и сервером в рамках так называемых конвейеров (Pipelines).

Компоненты

Компоненты внутри Cocoon сгруппированы по функциональности.

Спаренные

Сопоставители используются для сопоставления запросов пользователей, таких как URL или cookie, с подстановочными знаками или регулярными выражениями. Каждый запрос пользователя проверяется на соответствие сопоставителям в карте сайта, пока не будет найдено совпадение. В сопоставителе указывается ответ на конкретный запрос.

Генераторы

Генераторы создают поток данных для последующей обработки. Этот поток может быть сгенерирован из существующего XML-документа, либо существуют генераторы, способные создавать XML с нуля для представления каких-либо данных на сервере, например, структуры каталогов или данных изображений.

XSP

Одним из типов генераторов является XML Server Page (XSP) – XML-документ, содержащий директивы на основе тегов, определяющие, как генерировать динамический контент в момент поступления запроса. При обработке Cocoon эти директивы заменяются сгенерированным контентом, в результате чего полученный расширенный XML-документ может быть подвергнут дальнейшей обработке (как правило, преобразованию XSLT). XSP преобразуются в генераторы Cocoon, обычно в виде классов Java, хотя можно использовать и любой язык сценариев, для которого существует процессор на основе Java. Директивы могут быть встроенными ("XSP") или пользовательскими тегами обработки, и оба типа определяются в логических листах. Теги определяются с помощью шаблонов XSLT, описывающих, как теги (представленные в виде узлов XML) преобразуются в другие узлы XML или в процедурный код, например, Java. Эти теги используются для внедрения процедурной логики, подстановки выражений, получения информации из окружения веб-сервера и выполнения других операций. Следует отметить, что XSP считается устаревшим в последних версиях Cocoon.

Трансформаторы

Трансформеры принимают поток данных и преобразуют его. Наиболее распространенные преобразования выполняются с помощью XSLT для изменения одного XML-формата в другой. Однако существуют также трансформаторы, которые обрабатывают данные в других форматах (например, SQL-запросы).

Сериализаторы

Сериализатор преобразует поток XML-событий в последовательность байтов (например, HTML), которую можно вернуть клиенту. Некоторые сериализаторы позволяют отправлять данные во множестве различных форматов, таких как HTML, XHTML, PDF, RTF, SVG, WML и простой текст, например.

Селекторы

Селекторы предоставляют те же возможности, что и оператор switch. Они позволяют выбирать определенные элементы запроса и выбирать подходящую часть конвейера для обработки.

Взгляды

Виды используются главным образом для тестирования. Вид является точкой выхода в конвейере. Вы можете вывести XML-поток, сформированный к этому моменту, чтобы проверить, правильно ли работает приложение.

Читатели

Публикуйте контент без разбора (без обработки XML). Используется для изображений и подобных файлов.

Действия

Действия — это классы Java, которые выполняют определенную бизнес-логику или управляют созданием нового контента.

Трубопровод

Трубопровод используется для определения способа взаимодействия различных компонентов Cocoon с заданным запросом для формирования ответа. Типичный трубопровод состоит из генератора, за которым следуют ноль или более трансформаторов и, в заключение, сериализатор.