10.06.2004stefan metzlaff1 cocoon stefan metzlaff 10.06.2004
Post on 06-Apr-2016
214 Views
Preview:
TRANSCRIPT
10.06.2004 Stefan Metzlaff 1
Cocoon
Stefan Metzlaff10.06.2004
10.06.2004 Stefan Metzlaff 2
GliederungGliederung
• Geschichte• Was ist Cocoon?• Cocoon 1 vs. Cocoon 2• Sitemap und Komponenten• XSP• Fazit• Quellen
10.06.2004 Stefan Metzlaff 3
GeschichteGeschichte
• 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 4
Was ist Cocoon (1)Was ist Cocoon (1)
• XML Publishing Framework• Dynamische Visualisierung von Daten in
verschiedenen Formaten – HTML– PDF– SVG
10.06.2004 Stefan Metzlaff 5
Was ist Cocoon (2)Was ist Cocoon (2)
• Servlet innerhalb eines Applikationsserver• Trennung von Logik, Daten und
Präsentation
Pipeline - XML - XSL
10.06.2004 Stefan Metzlaff 6
Cocoon 1Cocoon 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 7
Cocoon 2Cocoon 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 8
PipelinePipeline
• Einfache Pipeline
• Besteht aus Generator, Transformer und Serializer
SAX SAX sample1.html
sample1.xsl
sample1.xml
Generator Transformer Serializer
10.06.2004 Stefan Metzlaff 9
Sitemap (1)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 10
Sitemap (2)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
10.06.2004 Stefan Metzlaff 11
Sitemap (3)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 12
Sitemap (4)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/>
10.06.2004 Stefan Metzlaff 13
Sitemap (5)Sitemap (5)
Aus MatthewLangham - Introduction To Cocoon 18.11.2003
10.06.2004 Stefan Metzlaff 14
Generator (1)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 15
Generator (2)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 16
Generator (2)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>
SAX SAX sample1.html
sample1.xsl
sample1.xml
Generator Transformer Serializer
10.06.2004 Stefan Metzlaff 17
Transformer (1)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 18
Transformer (2)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 19
Transformer (3)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>
SAX SAX sample1.html
sample1.xsl
sample1.xml
Generator Transformer Serializer
10.06.2004 Stefan Metzlaff 20
Serializer (1)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 21
Serializer (2)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 22
Serializer (3)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>
SAX SAX sample1.html
sample1.xsl
sample1.xml
Generator Transformer Serializer
10.06.2004 Stefan Metzlaff 23
Reader (1)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 24
Reader (2)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 25
Matcher (1)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 26
Matcher (2)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 27
Matcher (3)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 28
Selector (1)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 29
Selector (2)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 30
Selector (3)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 31
ActionAction
• 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 32
XSPXSP
• 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 33
Komplexe PipelineKomplexe Pipeline
sample2.xml
Generator Transformer Serializer
formatier.xsl html-out.xsl
SQLTransformer Transformer Transformer
XSL SOAP XSL
DB
sample2.html
10.06.2004 Stefan Metzlaff 34
FazitFazit
• 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 35
QuellenQuellen
• 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 36
Fragen ?!?Fragen ?!?
top related