360 likes | 571 Views
Cocoon. Stefan Metzlaff 10.06.2004. Gliederung. Geschichte Was ist Cocoon? Cocoon 1 vs. Cocoon 2 Sitemap und Komponenten XSP Fazit Quellen. Geschichte. Jan. 1999 als Servlet zur Darstellung für XML Dateien von Stefano Mazzocchi
E N D
Cocoon Stefan Metzlaff 10.06.2004 Stefan Metzlaff
Gliederung • Geschichte • Was ist Cocoon? • Cocoon 1 vs. Cocoon 2 • Sitemap und Komponenten • XSP • Fazit • Quellen Stefan Metzlaff
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 Stefan Metzlaff
Was ist Cocoon (1) • XML Publishing Framework • Dynamische Visualisierung von Daten in verschiedenen Formaten • HTML • PDF • SVG Stefan Metzlaff
Was ist Cocoon (2) • Servlet innerhalb eines Applikationsserver • Trennung von Logik, Daten und Präsentation Pipeline - XML - XSL Stefan Metzlaff
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 Stefan Metzlaff
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) Stefan Metzlaff
Pipeline • Einfache Pipeline • Besteht aus Generator, Transformer und Serializer Generator Transformer Serializer SAX SAX sample1.html sample1.xml sample1.xsl Stefan Metzlaff
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 Stefan Metzlaff
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 Java-Klassen Stefan Metzlaff
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 Stefan Metzlaff
Sitemap (4) <?xml version="1.0"?> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <map:components/> <map:views/> <map:resources/> <map:action-sets/> <map:pipelines/> </map:sitemap> <map:generators/> <map:transformers/> <map:serializers/> <map:readers/> <map:selectors/> <map:matchers/> <map:actions/> <map:match/> Stefan Metzlaff
Sitemap (5) Aus MatthewLangham - Introduction To Cocoon 18.11.2003 Stefan Metzlaff
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 • ... Stefan Metzlaff
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> Stefan Metzlaff
Generator (2) • Beispiel in der Pipeline: <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> Generator Transformer Serializer SAX SAX sample1.html sample1.xml sample1.xsl Stefan Metzlaff
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 • ... Stefan Metzlaff
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> Stefan Metzlaff
Transformer (3) • Beispiel in der Pipeline: <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> Generator Transformer Serializer SAX SAX sample1.html sample1.xml sample1.xsl Stefan Metzlaff
Serializer (1) • Umwandlung von XML Stream in ein anwendungsspezifisches Format • Letzte Komponente der Pipeline • Typen: • HTML Serializer • FOP Serializer • Text Serializer • XML Serializer • ... Stefan Metzlaff
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> Stefan Metzlaff
Serializer (3) • Beispiel in der Pipeline: <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> Generator Transformer Serializer SAX SAX sample1.html sample1.xml sample1.xsl Stefan Metzlaff
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 Stefan Metzlaff
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> Stefan Metzlaff
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 Stefan Metzlaff
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> Stefan Metzlaff
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> Stefan Metzlaff
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 • ... Stefan Metzlaff
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> Stefan Metzlaff
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> Stefan Metzlaff
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 Stefan Metzlaff
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 Stefan Metzlaff
Komplexe Pipeline sample2.html SQL XSL SOAP XSL Generator Transformer Transformer Transformer Transformer Serializer sample2.xml formatier.xsl html-out.xsl DB Stefan Metzlaff
Fazit • Vorteile • Basiert auf Java und XML (plattformunabhängig) • Modular & Erweiterbar • Open Source • Nachteile • Lange Einarbeitungszeit, um alle Features nutzen zu können • Performance Stefan Metzlaff
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 Stefan Metzlaff
Fragen ?!? Stefan Metzlaff