XML Framework: Cocoon
Seminar: XML für FortgeschritteneReferent: Katrin Apel
Gliederung
• MotivationMotivation• Cocoon Basics• Einsatz in der Wirtschaft• Fazit• Literatur
Motivation
• Dynamische Generierung von Dokumenten in verschieden Formaten und für verschiedene Clients
Motivation
• Trennung von Content, Style, Logik und Management Funktionen
Gliederung
• Motivation• Cocoon BasicsCocoon Basics• Einsatz in der Wirtschaft• Fazit• Literatur
Cocoon Basics
• Was ist Cocoon?Was ist Cocoon?• Funktionsprinzip• Extensible Server Pages (XSP)• Sitemap
Was ist Cocoon?
• XML Publishing Framework• Teil des Apache Projekts• Aufsatz für Webserver / Teil einer
lokalen Applikation• Bestandteile:
– Servlets– XML-Parser– XSL-Prozessoren
Cocoon Basics
• Was ist Cocoon?• FunktionsprinzipFunktionsprinzip• Extensible Server Pages (XSP)• Sitemap
Funktionsprinzip - Basismechansimen
- Abfertigung basierend auf Matchern und Selektoren
- Generierung von XML Dokumenten durch Generatoren
- Transformation von XML Dokumenten durch Transformatoren
- Aggregation von XML Dokumenten durch Aggregatoren
- Rendering von XML durch Serializers
FunktionsprinzipPipeline Processing I
Einfachstes Beispiel:- Eingabe: gespeichertes XML-Dokument- Verarbeitung: XSL Stylesheet- Ausgabe: HTML
FunktionsprinzipPipeline Processing II
Verbindung von statischen Daten (file.xml) und dynamisch generierten (Datenbankanfrage)
durch in XML eingebettete SQL Statements
Eingebettete SQL Statements in XML Datei file.xml
<guest-list><sql:execute-query>
<sql:query>SELECT CONCAT(lastNAME,‘,‘,firstName) as name, ageFROM guest WHERE status=ARRIVING;</sql:query>
</sql:execute-query></guest-list>
Beispielausgabe des SQL Transformers:
<guest-list><row-set>
<row><name>Bush, George</name><age>56</age>
</row><row>
<name>Jackson, Michael</name><age>42</age>
</row><row>
<name>Albert Einstein</name><age>105</age>
</row></row-set>
</guest-list>
FunktionsprinzipPipeline Processing III
Verbindung von statischen Daten (file.xml) und dynamisch generierten (Datenbankanfrage, Internetanfrage an Web Service)
Cocoon Basics
• Was ist Cocoon?• Funktionsprinzip• Extensible Server Pages (XSP)Extensible Server Pages (XSP)• Sitemap
Extensible Server Pages (XSP)
• XML Dokument mit integrierter Logik• Ähnlich wie Java Server Pages (JSP)• XSP-Parser interpretiert Logik-
Bestandteile und wandelt sie in Code um
• Dokument Root Element: <xsp:page>• Weitere Tags: <xsp:logic>
<xsp:expression>
Extensible Server Pages (XSP)
<?xml version=“1.0“ encoding=“ISO-8859-1?“><xsp:page language=“java“ xmlns:xsp=„http://apache.org/xsp“><xsp:logic>static private int counter=0;private synchronized int count() {
return counter++;}</xsp:logic><page><p>I have been requested <xsp:expr>count()</xsp:expr> times.
</p></page></xsp:page>
Cocoon Basics
• Was ist Cocoon?• Funktionsprinzip• Extensible Server Pages (XSP)• SitemapSitemap
Sitemap
• XML Datei (Sitemap DTD)• Um neue Elemente erweiterbar• Enthält Konfigurationsinformationen
– Liste von Matchern– Liste von Generatoren– Liste von Transformern– Liste von Readern– Liste von Serializern– Liste von Selektoren– Liste von Processing Pipelines mit Match
Pattern
Sitemap - Matcher
• Matcht URI mit einem spezifizierten Pattern, um den Request mit einer bestimmten Processing Pipeline abarbeiten zu können
• Verschieden Arten von Matchern:– Wildcard Matcher (WildcardURIMatcher)– Regexp Matcher (RegexpURIMatcher)
Sitemap – Matcher II
Einträge in die Sitemap für verschiedene Matcher:
<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>
Sitemap – Matcher III
Beispiel Matcher Eintrag in einer Pipeline:
<map:match pattern=“jsp/*“><map:generate type=“jsp“ src=“/docs/samples/jsp/{1}.jsp“/>...
</map:match><map:match pattern=“hello.pdf“>
...</map:match>
Sitemap - Generatoren
• Generiert eine XML Struktur aus einer Eingabequelle (Datei, Verzeichnis, Stream,..)
• Verschiedene Arten von Generators– Datei Generator– Verzeichnis Generator– XSP Generator– JSP Generator– Request Generator– ...
Sitemap – Generatoren II
Einträge in der Sitemap für verschiedene Generator
<map:generators default=“file“><map:generator
name=“file“src=“org.apache.cocoon.generation.FileGenerator“label=“content“/>
<map:generatorname=“directory“src=“org.apache.cocoon.generation.DirectoryGenerator“label=“content“/>
<map:generatorname=“serverpages“src=“org.apache.cocoon.generation.ServerPagesGenerator“label=“content“/>
<map:generator name=“request“src=“org.apache.cocoon.generation.RequestGenerator“/>
...</map:generators>
Sitemap – Generators III
Beispiel Generator Eintrag in einer Pipeline:
<map:match pattern=“hello.html“><map:generate src=“docs/samples/hello-page.xml“/><map:transform src=“stylesheets/page/simple-page2html.xsl“/><map:serialize type=“html“/>
</map:match>
Sitemap - Transformer
• Transformiert eine XML Struktur in eine andere XML Struktur
• Verschiedene Arten von Transformers– XSLT Transformer– Log Transformer– SQL Transformer– ...
Sitemap – Transformer II
Einträge in der Sitemap für verschiedene Transformer
<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></map:transformer><map:transformer name=“log“ src=“org.apache.cocoon.transformation.LogTransformer“/>...
</map:transformer>
Sitemap – Transformer III
Beispiel Transformer Eintrag in einer Pipeline:
<map:match pattern=“hello.html“<map:generate src=“docs/samples/hello-page.xml“/><map:transform src=“stylesheets/page/simple-page2html.xsl“/><map:serialize type=“html“/>
</map:match>
Sitemap - Serializer
• Gibt eine XML Eingabestruktur in einem anderem Format aus
• Verschieden Arten von Serializern:– HTML Serializer– FOP Serializer (PDF)– Text Serializer– XML Serializer
Sitemap – Serializer II
Einträge in der Sitemap für verschieden Serializer
<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:serializers>
Sitemap – Serializer III
Beispiel Serializer Eintrag in einer Pipeline:
<map:match pattern=“hello.html“><map:generate src=“docs/samples/hello-page.xml“/><map:transform src=“stylesheets/page/simple-page2html.xsl“/><map:serialize type=“html“/>
</map:match>
Gliederung
• Motivation• Wie funktioniert Cocoon?• Einsatz in der WirtschaftEinsatz in der Wirtschaft• Fazit• Literatur
Einsatz in der Wirtschaft
• Einige Beispiele:– Reporting System für die Deutsche
Bank– Internetabfrage der
Medizindatenbank von Novartis– Enterprise Portal der NASA– Diverse Webportale anderer Firmen
und Gruppen
Gliederung
• Motivation• Wie funktioniert Cocoon?• Einsatz in der Wirtschaft• FazitFazit• Literatur
Fazit - Vorteile
• Vorteile– Hohe Flexibilität– Modularität– Erweiterbarkeit- komplett Java und XML basiert- Plattformunabhängigkeit– Open Source
Fazit - Nachteile
• Nachteile– Einarbeitungszeit– Performanz– Verwendung von XSL– Design leidet
Gliederung
• Motivation• Wie funktioniert Cocoon?• Einsatz in der Wirtschaft• Fazit• LiteraturLiteratur
Literatur
• Cocoon Homepage– http://cocoon.apache.org
• Cocoon Tutorial– http://www.logabit.com/cocoontutorial.php– http://wiki.cocoondev.org/downloads/
Cocoon.pdf
• Artikel bei XML.com– http://www.xml.com/pub/a/2002/07/10/cocoon2.html– http://www.xml.com/pub/a/2002/07/24/xmlportal.html
• Java & XML (O‘Reilly)