500 likes | 625 Views
XML Framework. Demolsky Markus Hiebler Thomas Pindhofer Walter. Agenda. History Was ist Cocoon? Sidemap Pipelines Komponenten Control Flow XSP Cocoon Forms & Binding Framework Praktisches Beispiel anhand eines Prototyp Benutzung Cocoon und zukünftige Ziele. History.
E N D
XML Framework Demolsky Markus Hiebler Thomas Pindhofer Walter
Agenda • History • Was ist Cocoon? • Sidemap • Pipelines • Komponenten • Control Flow • XSP • Cocoon Forms & Binding Framework • Praktisches Beispiel anhand eines Prototyp • Benutzung Cocoon und zukünftige Ziele
History • 1998 von Stefano Mazzocchi entwickelt • Designziel Klare Trennung von Inhalt und Layout • 1999 - Veröffentlichung Cocoon 1.x • 2001 - Veröffentlichung Cocoon 2 • Einführung der Sitemap und SAX-event basierter Pipelines • Top Level Project der Apache Software Fondation
Was ist Cocoon? • XML-Publishing System • Input im Format XML und XSL • Cocoon arbeitet intern ausschließlich mit XML • Output in beliebiges Format und Medium • Trennung von Daten, Layout und Logik
Benötigte Elemente • Sitemap • Datenquelle • Layoutbeschreibung • Core: Kernanwendung • Cocoon: Zusatzmodule • Servlet Container
Die Sitemap • Kommandozentrale von Cocoon • Zentrales Dokument in einer Cocoon-Anwendung • XML-Datei (sitemap.xmap) • Konfiguration von Komponenten und Aufrufe • Modellierung logischer Abläufe (=Pipelines) • Wird in eine Java Klasse übersetzt
Sitemap – Struktur 2/3 • <map:components/>Registrierte Komponenten die von der Sitemap verwendet werden. Erzeugen, lesen und transformieren XML-Strukturen • <map:views/>,<map:resources/> und<map:action-set/>Gruppieren registrierte Komponenten und stellen Funktionalitäten zur Verfügung, die aus einer Pipeline verwendet werden können
Sitemap – Struktur 3/3 • <map:flow/>Registrierung der benötigten Flowscripts • <map:pipelines/>Wichtigster Bereich Definition von Regeln XML-Dokument wird mit Hilfe der Komponenten erzeugt, konvertiert und in ein bestimmtes Format ausgegeben
Sitemap - Pipelines • Cocoon basiert auf dem Pipeline-Prinzip • Eine Pipeline besteht aus • einem Generator (Einlesen der XML-Datei) • 0-n Transformatoren (Umwandlung der XML-Datei) • einem Serializer (Ausgabe der neuen Datei) • Matcher und Selectoren definieren den Ablauf
Sitemap – Beispieldatei <?xml version="1.0" encoding="UTF-8"?> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <map:components> <map:generators> <map:generator name="serverpages" src="org.apache.cocoon.generation.ServerPagesGenerator"/> </map:generators> </map:components> <map:pipelines> <map:pipeline> <map:match pattern="index.html"> <map:generate type="serverpages" src="logic.xsp"/> <map:transform type="xslt" src="style.xsl"/> <map:serialize type="html"/> </map:match> </map:pipeline> </map:pipelines> </map:sitemap>
Komponenten • Definition der „Werkzeuge“ • Vordefiniert oder selbst erstellt (Java) • Gliederung der Komponenten: Bearbeitungs-Komponenten Logik-Komponenten
Matcher • Muster überprüfen • Muster wird mit pattern übergeben • Viele vordefinierte Matcher • Beliebig viel, jedoch eindeutiger Name
Matcher - Beispiel • Definition: <map:matcher name="wildcard" src="org.apache.cocoon.matching.WildcardURIMatcher"/> • Ausführung: <map:match type="wildcard" pattern="index.html"> <!– Hier könnte ihre Werbung stehen --> <!– Platz für Anweisungen --> </map:match >
Matcher - Auflistung • WildCard URI matcher • Regexp URI matcher • Request parameter matcher • Wildcard request parameter matcher • Wildcard session parameter matcher
Selektoren • Matcher mit Verzweigungen • Viele vordefinierte Selektoren • Verschiedene Logiken durch: • <map:when/> • <map:otherwise/>
Selektoren - Beispiel • Definition: <map:selector name="browser" src="org.apache.cocoon.selection.BrowserSelector"> <browser name="explorer" useragent="MSIE"/> <browser name="netscape" useragent="Mozilla"/> </map:selector> • Ausführung: <map:select type="browser"> <map:when test="netscape"> <!-- Anweisungen für Netscape --> </map:when> <map:otherwise> <!-- Anweisungen für alle anderen Browser--> </map:otherwise> </map:select>
Selektoren - Auflistung • BrowserSelector • CodeSelector • HostSelector • ParameterSelector • HeaderSelector • RequestSelector • SessionSelector
Actions • Ausgeführter Java-Code • Klassen befolgen gewisse Richtlinien • Beliebig komplexer Code möglich • Zugriff auf Request- oder Session-Attribute • Action Parameterzugriff: • <map:read src="{filename}"/>
Actions - Beispiel • Definition: <map:actions> <map:action name="myAction" src="foo.bar.MyAction"/> </map:actions> • Ausführung: <map:act type="myAction"> <!-- Nur ausgeführt, wenn eine Java-Map zurück geliefert wird --> </map:act>
Actions - Auflistung • Database Actions • Sendmail Action • Session Action
Generatoren • Dient zum Einlesen von Daten • Beliebige Daten in SAX-Stream verwandeln • XML – Dateien • Daten über HTTP • Daten von Festplatte • Nicht-XML-Strukturen werden bestmöglich „umgewandelt“ weitergegeben
Generatoren - Beispiel • Definition: <map:generators> <map:generator name="file" src="org.apache.cocoon.generation.FileGenerator"/> </map:generators> • Ausführung: <map:generate type="file" src="document.xml"/>
Generatoren - Auflistung • Default: • File Generator • Core: • Director Generator • MP3directory Generator • Request Generator • ... • Optional: • HTML Generator • PHP Generator • …
Transformatoren • Umwandlung SAX-Stream in einen anderen SAX-Stream • Gesteuert über XSLTs
Transformatoren - Beispiel • Definition: <map:transformers> <map:transformator name="xsl" src="org.apache.cocoon.transformation.TraxTransformer"/> </map:transformers> • Ausführung: <map:transform type="xsl" src="document2html.xsl"/>
Transformatoren - Auflistung • XSLT Transformer (Default transformer) • Fragment Extractor Transformer • I18n Transformer • Log Transformer • SQL Transformer • Filter Transformer • Read DOM Session Transformer • …
Serializer • Umwandeln des Streams • Output hat binäres oder textuelles Format • Steht immer am Ende einer Pipeline • Meist letzter Schritt
Serializer - Beispiel • Definition: <map:serializers> <map:serializer name="html" mime-type="text/html„ src="org.apache.cocoon.serialization.HTMLSerializer"/> </map:serializers> • Ausführung: <map:serialize type="html" />
Serializer - Auflistung • HTML Serializer (The default serializer) • XHTML Serializer • XML Serializer • Text Serializer • HSSF (XLS) Serializer (optional) • PDF Serializer (optional) • PS Serializer (optional) • PCL Serializer (optional) • WAP/WML Serializer • SVG Serializer • SVG/XML Serializer • …
Reader • Lesen und Ausgeben von Daten • Kombination von Generatoren und Serializern • Kein Umweg über Transformatoren • Keine Umwandlung in SAX-Stream • zB.: Bilder oder reiner Text
Reader - Beispiel • Definition: <map:readers> <map:reader name="resource" src="org.apache.cocoon.reading.ResourceReader"/> </map:readers> • Ausführung: <map:read type="resource" src="resources/irgendeinbild.jpg" mime-type="image/jpg"/>
Reader - Auflistung • AxisRPC Reader (Optional: Axis block) • Database Reader (Optional: Database block) • Directory ZIP Archiver (Scratchpad) • Image Reader • JSP Reader (Optional: JSP block) • Resource Reader (The default reader)
Control Flow • Bestimmt die Logik von Cocoon • Definiert Ablauf der Webanwendung • Hält Eingaben für die Dauer der Anwendung persistent • Verwendet Javascript als Sprache
Control Flow – Beispiel 1/3 • Implementierung eines einfachen Taschenrechners • Komponenten: • Sitemap.xmap • calculatorController.js • benötigten Html-Dateien
Control Flow – Beispiel 2/3 • Sitemap.xmap <map:flow language=”javascript”> <map:script src=”calculatorController.js”/> </map:flow> <map:pipelines> <map:pipeline> <map:match pattern=”calculator/index.html”> <map:call function=”calculator”/> </map:call> </map:match> </map:pipeline> </map:pipelines>
Control Flow – Beispiel 3/3 • calculatorController.js function calculator() { var a,b,operator; cocoon.sendPageAndWait(”getA.html”); a=cocoon.request.get(”a”); cocoon.sendPageAndWait(”getB.html”); b=cocoon.request.get(”b”); cocoon.sendPageAndWait(”getOperator.html”); operator=cocoon.request.get(”op”); try { if(operator==”plus”) cocoon.sendPage(”result.html”,{result: a + b }); else cocoon.sendPage(”result.html”,{result: a − b }) ; }catch(exception) { cocoon.sendPage(”error.html”,{message: ”Operation failed: ” + exception.toString()}); } }
Control Flow - Continuations • Zustand eines Programms wird festgehalten • Beispiel sendPageAndWait() • Programm hält an • Wartet bis es Informationen bekommt • Submit im HTML-Formular lässt das Programm fortsetzen
XSP – Extensible Server Page • Bettet Logik in ein XML-Dokument ein • XSP Dokument wird durch XSP Parser interpretiert • Sprachenunabhängig, meist aber Java • Control Flow löst XSP immer mehr ab
XSP – Beispiel 1/2 • HelloWorld.xsp <?xml version="1.0" encoding="ISO-8859-1"?> <xsp:page language="java" xmlns:xsp="http://apache.org/xsp"> <xsp:logic> private String S = “Hello World“; private String add() { return S; } </xsp:logic> <page> <title>Überraschung, Hello World</title> <content> Typisch, <xsp:expr>add()</xsp:expr> </content> </page> </xsp:page>
XSP – Beispiel 2/2 • Sitemap.xmap <map:generators> <map:generator name="serverpages" src="org.apache.cocoon.generation.ServerPagesGenerator"/> </map:generators> ... <map:pipeline> <map:match pattern=„HelloWorld"> <map:generate type="serverpages" src=„HelloWorld.xsp" /> <map:serialize type="xml" /> </map:match> </map:pipeline> ...
Cocoon Forms (CForms) • Basis für interaktive Web-Applikationen • Zur Zeit noch in Beta Version • Data Binding, Validation, Datentypen • AJAX Support • Trennung von Datenmodell und Formmodell 2 Bestandteile Form Model Form Template
CForms – Form Model • Beschreibung der Struktur der Form (Form-Definition) • KEINE Präsentationsdaten • Besteht aus einer Menge von Widgets • Widget ist ein Objekt:- Kann seinen Zustand aus dem Request lesen- Kann sich selbst validieren- Besitzt XML-Repräsentation (zB.: Textfeld)
CForms – Form Template • Definiert die Präsentation • Legt fest wo die einzelnen Widgets der Form-Definition platziert werden • Zusammenführung mit dem Form Model im Forms Template Transformer
Binding Framework • Arbeitet mit verschiedenen Objekten- JavaBeans- XML-Dokumente- JavaScript Objekte • Ermöglicht durch JXPath
Cocoon Prototyp 1/2 • Produktmanagement • Anlage und Bearbeitung von Produkten • Demonstriert die Basis-Konzepte von Cocoon
Benutzen von Cocoon: • Mit kleinen Problemen beginnen • Bestehende Blocks durchsuchen • XML (XSLT, XPath,..) lernen • Verwende Caching (guter Support von Cocoon) • Für längere Projekte verwenden • Logik von den pipelines und XSLTs fernhalten • Trennung von Design und Content!!!
Zukunft von Cocoon • Kleiner Kern mit vielen performanten „Blocks“ • Einfacher für simple Aufgaben • Steigern Performance • Erleichterung Einstieg • Modularität verstärken • Verstärkter Einbau von AJAX