Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Demolsky Markus Hiebler Thomas Pindhofer Walter

Ähnliche Präsentationen


Präsentation zum Thema: "Demolsky Markus Hiebler Thomas Pindhofer Walter"—  Präsentation transkript:

1 Demolsky Markus Hiebler Thomas Pindhofer Walter
XML Framework Demolsky Markus Hiebler Thomas Pindhofer Walter

2 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

3 History 1998 von Stefano Mazzocchi entwickelt
Designziel  Klare Trennung von Inhalt und Layout Veröffentlichung Cocoon 1.x Veröffentlichung Cocoon 2 Einführung der Sitemap und SAX-event basierter Pipelines Top Level Project der Apache Software Fondation

4 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

5 Benötigte Elemente Sitemap Datenquelle Layoutbeschreibung
Core: Kernanwendung Cocoon: Zusatzmodule Servlet Container

6 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

7 Sitemap – Struktur 1/3

8 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

9 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

10 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

11 Sitemap – Beispieldatei
<?xml version="1.0" encoding="UTF-8"?> <map:sitemap xmlns:map=" <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>

12 Komponenten Definition der „Werkzeuge“
Vordefiniert oder selbst erstellt (Java) Gliederung der Komponenten: Bearbeitungs-Komponenten Logik-Komponenten

13 Matcher Muster überprüfen Muster wird mit pattern übergeben
Viele vordefinierte Matcher Beliebig viel, jedoch eindeutiger Name

14 Matcher - Beispiel Definition: Ausführung:
<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 >

15 Matcher - Auflistung WildCard URI matcher Regexp URI matcher
Request parameter matcher Wildcard request parameter matcher Wildcard session parameter matcher

16 Selektoren Matcher mit Verzweigungen Viele vordefinierte Selektoren
Verschiedene Logiken durch: <map:when/> <map:otherwise/>

17 Selektoren - Beispiel Definition: Ausführung:
<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>

18 Selektoren - Auflistung
BrowserSelector CodeSelector HostSelector ParameterSelector HeaderSelector RequestSelector SessionSelector

19 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}"/>

20 Actions - Beispiel <map:act type="myAction"> 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>

21 Actions - Auflistung Database Actions Sendmail Action Session Action

22 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

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

24 Generatoren - Auflistung
Default: File Generator Core: Director Generator MP3directory Generator Request Generator ... Optional: HTML Generator PHP Generator

25 Transformatoren Umwandlung SAX-Stream in einen anderen SAX-Stream
Gesteuert über XSLTs

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

27 Transformatoren - Auflistung
XSLT Transformer (Default transformer) Fragment Extractor Transformer I18n Transformer Log Transformer SQL Transformer Filter Transformer Read DOM Session Transformer

28 Serializer Umwandeln des Streams
Output hat binäres oder textuelles Format Steht immer am Ende einer Pipeline Meist letzter Schritt

29 Serializer - Beispiel Definition: Ausführung:
<map:serializers> <map:serializer name="html" mime-type="text/html„ src="org.apache.cocoon.serialization.HTMLSerializer"/> </map:serializers> Ausführung: <map:serialize type="html" />

30 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

31 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

32 Reader - Beispiel Definition: Ausführung: <map:read type="resource"
<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"/>

33 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)

34 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

35 Control Flow – Beispiel 1/3
Implementierung eines einfachen Taschenrechners Komponenten: Sitemap.xmap calculatorController.js benötigten Html-Dateien

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

37 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()}); }

38 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

39 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

40 XSP – Beispiel 1/2 HelloWorld.xsp
<?xml version="1.0" encoding="ISO "?> <xsp:page language="java" xmlns: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>

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

42 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

43 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)

44 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

45 Funktionsweise von CForms

46 Binding Framework Arbeitet mit verschiedenen Objekten - JavaBeans - XML-Dokumente - JavaScript Objekte Ermöglicht durch JXPath

47 Cocoon Prototyp 1/2 Produktmanagement
Anlage und Bearbeitung von Produkten Demonstriert die Basis-Konzepte von Cocoon

48 Cocoon Prototyp 2/2 - Layers

49 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!!!

50 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


Herunterladen ppt "Demolsky Markus Hiebler Thomas Pindhofer Walter"

Ähnliche Präsentationen


Google-Anzeigen