10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

36
10.06.2004 Stefan Metzlaff 1 Cocoon Stefan Metzlaff 10.06.2004

Transcript of 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

Page 1: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

10.06.2004 Stefan Metzlaff 1

Cocoon

Stefan Metzlaff10.06.2004

Page 2: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

10.06.2004 Stefan Metzlaff 2

GliederungGliederung

• Geschichte• Was ist Cocoon?• Cocoon 1 vs. Cocoon 2• Sitemap und Komponenten• XSP• Fazit• Quellen

Page 3: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 4: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 5: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 6: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 7: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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)

Page 8: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 9: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 10: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 11: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 12: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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/>

Page 13: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

10.06.2004 Stefan Metzlaff 13

Sitemap (5)Sitemap (5)

Aus MatthewLangham - Introduction To Cocoon 18.11.2003

Page 14: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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– ...

Page 15: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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>

Page 16: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 17: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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– ...

Page 18: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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>

Page 19: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 20: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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– ...

Page 21: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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>

Page 22: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 23: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 24: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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>

Page 25: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 26: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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>

Page 27: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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>

Page 28: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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 – ...

Page 29: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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>

Page 30: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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>

Page 31: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 32: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 33: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 34: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 35: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

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

Page 36: 10.06.2004Stefan Metzlaff1 Cocoon Stefan Metzlaff 10.06.2004.

10.06.2004 Stefan Metzlaff 36

Fragen ?!?Fragen ?!?