Cocoon Stefan Metzlaff 10.06.2004 10.06.2004 Stefan Metzlaff 1 Gliederung • • • • • • • Geschichte Was ist Cocoon? Cocoon 1 vs. Cocoon 2 Sitemap und Komponenten XSP Fazit Quellen 10.06.2004 Stefan Metzlaff 2 Geschichte • Jan. 1999 als Servlet zur Darstellung für XML Dateien von Stefano Mazzocchi • Nov. 2001 Freigabe von Cocoon 2 als Teil des Apache XML Projekts • z.Z. ca. 20 Kernentwicklern und unzähligen Nutzern 10.06.2004 Stefan Metzlaff 3 Was ist Cocoon (1) • XML Publishing Framework • Dynamische Visualisierung von Daten in verschiedenen Formaten – HTML – PDF – SVG 10.06.2004 Stefan Metzlaff 4 Was ist Cocoon (2) • Servlet innerhalb eines Applikationsserver • Trennung von Logik, Daten und Präsentation Pipeline - XML - XSL 10.06.2004 Stefan Metzlaff 5 Cocoon 1 • basiert auf DOM – Aufbauen eines kompletten Baumes für jedes Dokument vor der Verarbeitung – schlechte Performance – hohe Speicherverbrauch • nutzt Reactor Pattern – Ablauf der einzelnen Funktionen durch Processing Instructions innerhalb der XML-Datendatei bestimmt – Schwierigkeiten mit hoch dynamischen Dokumenten 10.06.2004 Stefan Metzlaff 6 Cocoon 2 • Verwendung von SAX – Verarbeitung der Daten als XML SAX-Stream – ermöglicht Verarbeitung sehr großer Dokumente • Sitemap Konzept – Funktionen und deren Komponenten werden in der globalen Sitemap beschrieben – Funktionen bestehen aus einer Kette von Komponenten (Pipeline) 10.06.2004 Stefan Metzlaff 7 Pipeline • Einfache Pipeline Generator sample1.xml Transformer SAX SAX Serializer sample1.html sample1.xsl • Besteht aus Generator, Transformer und Serializer 10.06.2004 Stefan Metzlaff 8 Sitemap (1) • • • • XML Datei sitemap.xmap Deklariert Komponenten Definiert Funktionen Zuordnung von Anfragen zu Pipelines • Erlaubt es Nichtprogrammierern Webseiten und Webapplikationen mittels XML und logischen Komponenten zu erstellen 10.06.2004 Stefan Metzlaff 9 Sitemap (2) • Cocoon enthält viele vordefinierte Komponenten • Komponenten werden im Bausteinprinzip zu Pipelines zusammengefügt • Eigene Komponenten können ohne Modifikation von Cocoon integriert werden • Komponentenimplementierungen sind JavaKlassen 10.06.2004 Stefan Metzlaff 10 Sitemap (3) • Direkte Komponenten – unmittelbaren Einfluss auf XML-Stream – Generator, Transformer, Serializer und Reader • Indirekte Komponenten – keinen Einfluss auf den XML-Stream – Matcher, Selector und Action 10.06.2004 Stefan Metzlaff 11 Sitemap (4) <?xml version="1.0"?> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <map:components/> <map:generators/> <map:views/> <map:transformers/> <map:resources/> <map:serializers/> <map:readers/> <map:action-sets/> <map:selectors/> <map:pipelines/> <map:matchers/> <map:match/> </map:sitemap> <map:actions/> 10.06.2004 Stefan Metzlaff 12 Sitemap (5) Aus MatthewLangham - Introduction To Cocoon 18.11.2003 10.06.2004 Stefan Metzlaff 13 Generator (1) • • • • Erste Komponente in einer Pipeline Erzeugt XML Stream Nutzen Cache zur Performancesteigerung Typen von Generatoren – – – – – Datei Generator Verzeichnis Generator XSP Generator JSP Generator ... 10.06.2004 Stefan Metzlaff 14 Generator (2) • Deklaration von Generatoren: <map:generators default="file"> <map:generator name="file" src="org.apache.cocoon.generation.FileGenerator" label="content"/> <map:generator name="directory" src="org.apache.cocoon.generation.DirectoryGenerator" label="content"/> <map:generator name="serverpages" src="org.apache.cocoon.generation.ServerPagesGenerator" label="content"/> ... </map:generators> 10.06.2004 Stefan Metzlaff 15 Generator (2) • Beispiel in der Pipeline: Generator sample1.xml Transformer SAX Serializer SAX sample1.html sample1.xsl <map:match pattern="sample1.html"> <map:generate src="docs/samples/sample1.xml"/> <map:transform src="stylesheets/sample/sample1.xsl"/> <map:serialize type="html"/> </map:match> 10.06.2004 Stefan Metzlaff 16 Transformer (1) • • • • Eingabe und Ausgabe ist XML Stream Transformer verändert XML Struktur Meist direkt nach Generator in Pipeline Typen: – – – – – XSLT Transformer LOG Transformer SQL Transformer I18N Transformer ... 10.06.2004 Stefan Metzlaff 17 Transformer (2) • Deklaration von Transformern: <map:transformers default="xslt"> <map:transformer name="xslt" src="org.apache.cocoon.transformation.TraxTransformer"> <use-request-parameters>false</use-request-parameters> <use-browser-capabilities-db>false</use-browser-capabilities-db> </map:transformer> <map:transformer name="log" src="org.apache.cocoon.transformation.LogTransformer"/> ... </map:transformers> 10.06.2004 Stefan Metzlaff 18 Transformer (3) • Beispiel in der Pipeline: Generator sample1.xml Transformer SAX Serializer SAX sample1.html sample1.xsl <map:match pattern="sample1.html"> <map:generate src="docs/samples/sample1.xml"/> <map:transform src="stylesheets/sample/sample1.xsl"/> <map:serialize type="html"/> </map:match> 10.06.2004 Stefan Metzlaff 19 Serializer (1) • Umwandlung von XML Stream in ein anwendungsspezifisches Format • Letzte Komponente der Pipeline • Typen: – – – – – HTML Serializer FOP Serializer Text Serializer XML Serializer ... 10.06.2004 Stefan Metzlaff 20 Serializer (2) • Deklaration von Serializern: <map:serializers default="html"> <map:serializer name="xml" mime-type="text/xml" src="org.apache.cocoon.serialization.XMLSerializer"/> <map:serializer name="html" mime-type="text/html" src="org.apache.cocoon.serialization.HTMLSerializer"/> <map:serializer name="fo2pdf" mime-type="application/pdf" src="org.apache.cocoon.serialization.FOPSerializer"/> <map:serializer name="vrml" mime-type="model/vrml" src="org.apache.cocoon.serialization.TextSerializer"/> ... </map:serializers> 10.06.2004 Stefan Metzlaff 21 Serializer (3) • Beispiel in der Pipeline: Generator sample1.xml Transformer SAX Serializer SAX sample1.html sample1.xsl <map:match pattern="sample1.html"> <map:generate src="docs/samples/sample1.xml"/> <map:transform src="stylesheets/sample/sample1.xsl"/> <map:serialize type="html"/> </map:match> 10.06.2004 Stefan Metzlaff 22 Reader (1) • Übermittelt Dokumente direkt, ohne XML Streams, an den Client • Start und gleichzeitig Endpunkt einer Pipeline • z.B. für Bilder, Binaries und CSS 10.06.2004 Stefan Metzlaff 23 Reader (2) • Deklaration: <map:readers default="resource"> ... <map:reader name="image" src="org.apache.cocoon.reading.ImageReader" logger="sitemap.reader.image" pool-max="32" pool-min="1" pool-grow="4"/> ... </map:readers> • Beispiel: <map:match pattern="*.jpg"> <map:read type="image" src="resources/images/{1}.jpg" mime-type="image/jpeg"> </map:read> </map:match> 10.06.2004 Stefan Metzlaff 24 Matcher (1) • Ordnet eine URI zu einem Pattern zu, um der Anfrage eine Pipeline zu zuordnen • Ermöglichen Verarbeitung in einer Pipeline für Gruppen von URIs • Typen: – Wildcard Matcher – Regexp Matcher – Weitere eigene Matcher möglich 10.06.2004 Stefan Metzlaff 25 Matcher (2) • Deklaration von Matchern: <map:matchers default="wildcard"> <map:matcher name="wildcard" factory="org.apache.cocoon.matching.WildcardURIMatcher"/> <map:matcher name="regexp" factory="org.apache.cocoon.matching.RegexpURIMatcher"/> </map:matchers> 10.06.2004 Stefan Metzlaff 26 Matcher (3) • Beispiel: <map:match pattern="sample1.html"> <map:generate src="docs/samples/sample1.xml"/> <map:transform src="stylesheets/sample/sample1.xsl"/> <map:serialize type="html"/> </map:match> <map:match pattern="*.css"> <map:read mime-type="text/css" src="css/sample1.css"> </map:match> 10.06.2004 Stefan Metzlaff 27 Selector (1) • Zur Abbildung von Basislogik innerhalb der Sitemap • Ähnlich zu Matcher • Im Gegensatz zu Matcher nicht nur ja/nein sondern Multiple-Choice Abfragen möglich • Typen: – – – – BrowserSelector ParameterSelector HostSelector ... 10.06.2004 Stefan Metzlaff 28 Selector (2) • Deklaration von Selectoren: <map:selectors default="browser"> <map:selector name="browser" src="org.apache.cocoon.selection.BrowserSelector"> <browser name="explorer" useragent="MSIE"/> <browser name="lynx" useragent="Lynx"/> <browser name="netscape" useragent="Mozilla"/> </map:selector> <map:selector name="parameter" src="org.apache.cocoon.selection.ParameterSelector"/> </map:selectors> 10.06.2004 Stefan Metzlaff 29 Selector (3) • Beispiel: <map:match pattern="*"> <map:generate type="serverpages" src="test/{1}.xsp"/> <map:select type="browser"> <map:when test="explorer"> ... </map:when> <map:when test="lynx"> ... </map:when> <map:when test="netscape"> ... </map:when> <map:otherwise> ... </map:otherwise> </map:select> ... </map:match> 10.06.2004 Stefan Metzlaff 30 Action • In Sitemap definierte spezielle Java Klassen • Verändern nicht den XML Stream sondern setzen Parameter für die Pipeline • z.B. für Logins verwendet 10.06.2004 Stefan Metzlaff 31 XSP • eXtensible Server Pages • Ermöglichen dynamische XML Erzeugung auf Generatorebene • Programmierung im XML, durch Logic-Sheets • Integration von Java Code • Nicht sehr übersichtlich • Schwierig zu debuggen 10.06.2004 Stefan Metzlaff 32 Komplexe Pipeline sample2.html Generator SQL XSL SOAP XSL Transformer Transformer Transformer Transformer Serializer sample2.xml formatier.xsl html-out.xsl DB 10.06.2004 Stefan Metzlaff 33 Fazit • Vorteile – Basiert auf Java und XML (plattformunabhängig) – Modular & Erweiterbar – Open Source • Nachteile – Lange Einarbeitungszeit, um alle Features nutzen zu können – Performance 10.06.2004 Stefan Metzlaff 34 Quellen • Quellen – The Apache Cocoon Project, http://cocoon.apache.org/ – – – – – XML.COM, - Getting Started With Cocoon 2, Steve Punte IX 3/2004: Cocoon 2.1: XML als HTML oder PDF dynamisch darstellen, S.: 48-51 Das Apache XML Projekt, Seminarvortag von Markus Minnameier, 26.01.2001 XML Framework: Cocoon, Seminar: XML für Fortgeschrittene, Katrin Apel Publishing mit freier Apache-Software, COMPUTERWOCHE Nr. 06 vom 08.02.2002 – Introduction To Cocoon, Matthew Langham • Download – http://cocoon.apache.org/mirror.cgi 10.06.2004 Stefan Metzlaff 35 Fragen ?!? 10.06.2004 Stefan Metzlaff 36