ppt - ITI

Werbung
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
Herunterladen