Ανάπτυξη Υπηρεσιών Πληροφόρησης με την Χρήση ZOPE

Preview:

DESCRIPTION

Ανάπτυξη Υπηρεσιών Πληροφόρησης με την Χρήση ZOPE. Νίκος Κορφιάτης (nkorf@eltrun.gr). Σκοπός και Πλαίσιο Παρουσίασης. Να παρουσιάσει την πλατφόρμα Zope/CMF Να εξηγήσει την αντικειμενοστράφεια των web εφαρμογών και των Συστημάτων Διαχείρισης Περιεχομένου ( CMS) - PowerPoint PPT Presentation

Citation preview

Ανάπτυξη Υπηρεσιών Πληροφόρησης με την Χρήση ZOPE

Νίκος Κορφιάτης (nkorf@eltrun.gr)

Σκοπός και Πλαίσιο Παρουσίασης

• Να παρουσιάσει την πλατφόρμα Zope/CMF

• Να εξηγήσει την αντικειμενοστράφεια των web εφαρμογών και των Συστημάτων Διαχείρισης Περιεχομένου (CMS)

• Να καταγράψει τα W3C πρότυπα σύμφωνα με την διαχείριση περιεχομένου

Υπηρεσίες Πληροφόρησης

• Μια υπηρεσία πληροφόρησης σε μεγάλο abstract level είναι ένα website

• Ένας δικτυακός «κόμβος» στον οποίο εισέρχεται και εξέρχεται πληροφορία

• Πολυπλοκότητα Υπηρεσιών– Εξατομίκευση (Personalization)– Διαχείριση Εκδόσεων (Versioning)– Διαχείριση Ροής Εργασίας (Workflow)

Τι είναι ο ZOPE• The “Z”, “Object Oriented Publishing Environment”• Ένας application server γραμμένος σε python με μερικά «κρίσιμα»

σημεία γραμμένα σε «C». Οι λειτουργίες που παρέχει μοιάζουν αρκετά με του JBOSS με την μόνη διαφορά ότι είναι επικεντρωμένες στην διαχείριση περιεχομένου.

• Ίσως η πιο αντικειμενοστραφής πλατφόρμα για ανάπτυξη web based εφαρμογών

• Παρέχει βασικές υπηρεσίες όπως: – Database integration

– Template-based page production

– User authentication,

– Selective permissions

– Object-oriented paradigm for the distribution of custom code (Python Packages known as Products)

– Management of persistent objects and sessions

Πως μοιάζει ο ZOPE (?)

Αρχιτεκτονική του ZOPE

• Zope Core– ZServer

• Multithreaded Web Server• Συνεργασία με όλα

σχεδόν τα πρωτόκολλα• Σημαντική η υποστήριξη

του WebDAV (!)

– ZODB• Object database • Λόγω Python η

αντικειμενοστραφής τάση της πλατφόρμας θεωρείται δεδομένη

Αρχιτεκτονική του ZOPE (2)

• Zserver: Ο Zope περιέχει έναν δικό του web server o οποίος μπορεί να δώσει το περιεχόμενο μέσα από διάφορα πρωτοκόλλα όπως FTP, WebDAV & XML-RPC

• Web Server: Δίνεται η δυνατότητα να χρησιμοποιηθεί ένας άλλος web server (Apache, IIS) o οποίος πρέπει να υποστηρίζει CGI

• Zope Core: Είναι το κύριο σημείο της πλατφόρμας που ενώνει την κονσόλα διαχείρισης με τη βάση αντικειμένων

• Βάση Αντικειμένων: Διαχειρίζεται τα αντικείμενα με τα οποία γίνεται εργασία στο ZOPE

• Σχεσιακή βάση δεδομένων: Χρησιμεύει για την αποθήκευση πληροφορίας. Η επικοινωνία γίνεται μέσα από ειδικό adapter. (Oracle, PostgreSQL, Sybase, MySQL etc).

• Σύστημα αρχείων: Ο Zope μπορεί να δουλέψει και με αρχεία (πχ python scripts) τα οποία και είναι αποθηκευμένα κάπου στο σύστημα αρχείων

• ZClasses: Τύποι αντικειμένων που μπορούν να προστεθούν μέσα από την κονσόλα διαχείρισης

• Products: Αφορά νέους τύπους αντικειμένων που επεκτείνουν την λειτουργικότητα της πλατφόρμας. Στην ουσία ένα προϊόν είναι ένα σύνολο από ZClasses

Η Αντικειμενοστραφής Αρχιτεκτονική του WEB

• Το γενικό σκεπτικό γύρω από την αντικειμενοστραφή αρχιτεκτονική του Zope είναι ότι και ο ίδιος ο ιστός είναι ένα αντικειμενοστραφές σύνολο.

• Η URL σε μία πηγή του web είναι απλά ο δείκτης ενός αντικειμένου σε ένα σύνολο containers και το πρωτόκολλο HTTP μας παρέχει τη δυνατότητα να στείλουμε μηνύματα στο αντικείμενο και να λάβουμε τηνανταπόκριση του.

• Η ίδια η δομή του Zope είναι ιεραρχική, κάτι που σημαίνει ότι ένα τυπικό website που είναι χτισμένο με zope αποτελείται από αντικείμενα τα οποία με την σειρά τους εμπεριέχουν άλλα αντικείμενα. Πχ η URL www.dmst.aueb.gr/nkorf/research/index_html χρησιμοποιείται για να προσπελάσει το αντικείμενο index_html που εμπεριέχεται στο αντικείμενο research το οποίο με την σειρά του εμπεριέχεται στο αντικείμενο nkorf

Η Αντικειμενοστραφής Αρχιτεκτονική του ZOPE

• «Καθήκον» του ZOPE είναι να δημοσιεύει τα αντικείμενα που δημιουργούμε και να παρέχει την υποδομή για ανταλλαγή των μηνυμάτων μέσω του URL

• Πχ Έστω το τυπικό σενάριο στον Apache– http://www.mobiforum.org/cgi-bin/mobi/mobi.cgi?action=load&session_id=1

• Μορφή: protocol://host:port/path?querystring – Protocol: http– Host: www.mobiforum.org– Port: 80(default) – Path: cgi-bin/mobi/mobi.cgi – Query String: action=load & session_id=1

• Στον ΖΟPE έχουμε τον ίδιο διαχωρισμό τις ακολουθίας στα στοιχεία Protocol, Host, Port με την διαφορά ότι δεν υπάρχει file based path (!)

Η Αντικειμενοστραφής Αρχιτεκτονική του ZOPE(2)

• Η έννοια της διαδρομής (path) δεν υπάρχει στο ZOPE καθώς ο ΖOPE αποθηκεύει όλα τα αντικείμενα – (πχ nkorf, research, index_html) σε μία βάση αντικειμένων (ZopeDB, Object Database)

• Επιστροφή στο παράδειγμα: – Ο Zope εντοπίζει στην Object Database το αντικείμενο χρησιμοποιώντας ως

query string το /cgi-bin/mobi (παρόμοια σύνταξη με το XPath). Θυμίζει κάπως ORB

– Στην συνέχεια εκτελεί το αντικείμενο (mobi.cgi) μεταφέροντας του όλες τις παραμέτρους από το Query String που είχαμε πριν. Η συμπεριφορά του αντικειμένου μπορεί να αλλάξει δίνοντας διαφορετικές τιμές στις παραμέτρους του.

– Το αποτέλεσμα τις εκτέλεσης του αντικειμένου μεταφέρεται μέσω του ZOPE στον Web Browser του χρήστη. Το αποτέλεσμα αυτό μπορεί να είναι είτε:

• Content Type/ html • Application /Image • Application / File

– Application-zip file » Etc……

Η Αρχιτεκτονική μιας Καλής web Εφαρμογής (1)

• Πλήρως Συμβατή με W3C Accessibility Guidelines– Σημαίνει:

• Διαχωρισμός Περιεχομένου από Δομή • Διαχωρισμός Περιεχομένου από Παρουσίαση• Προσβάσιμες και κατανοητές URL

– http://www.dmst.aueb.gr/news.php?date=20040206&event_type=conference&sesion_id=123123123123123asdf1

– http://www.dmst.aueb.gr/news/conferences/20004-02-06/

• Διαχωρισμός λογικών επιπέδων – Επίπεδο Δεδομένων

– Επίπεδο Επεξεργασίας

– Επίπεδο Παρουσίασης

Η Αρχιτεκτονική μιας Καλής web Εφαρμογής (2)

• Παρουσίαση– Ανεξάρτητη από web browser

• Αποφυγή JavaScript (όπου μπορεί να γίνει) • Χρήση Stylesheets για έλεγχο της παρουσίασης

– Παροχή Πληροφορίας πλοήγησης• Αποφυγή «χαοτικών» δομών στα links

– Εύχρηστη Δομή Αναζήτησης• Ιεραρχική Δομή (Site Map) • Υποδομή Αναζήτησης (πχ μέσω Google)

Η Αρχιτεκτονική μιας Καλής web Εφαρμογής (3)

• Ανάπτυξη– Διακριτοί ρόλοι

• Database Admin• Programmer • Designer

– Συνεργασία • Ο Programmer με τον Database Admin• O Designer με τον Programmer

– Πρέπει να διευκολύνεται η συνεργασία και ο καταμερισμός της εργασίας των παραπάνω ρόλων

Η πρόταση του ZOPE στον Διαχωρισμό Ρόλων

• Στον Zope τα πάντα είναι «αντικείμενα»– Μία μέθοδος του αντικειμένου είναι η SQL που θα εκτελεστεί στον

Data Adapter. O Data Adapter με τα permissions κτλ έχει οριστεί από πριν στο ZOPE. Ο Database admin το μόνο που έχει να κάνει είναι να γράψει το transaction ή το query και να το “σερβίρει” στον Programmer

– Σε δεύτερο βήμα o Programmer έχοντας ήδη τη μέθοδο που κάνει handle την SQL κάνει scripting για να παρουσιάσει τα δεδομένα ή να εκτελέσει μια αλγοριθμική διαδικασία

– Ο Designer έχει από πριν φτιάξει ένα template χρησιμοποιώντας html και CSS το οποίο χρησιμοποιεί ο προγραμματιστής για να παρουσιάσει τα αποτελέσματα του query

H συμβατότητα του ZOPE με το W3CAA

• Όπως προαναφέραμε στον ZOPE δεν υπάρχει η έννοια του file-based path όπως για παράδειγμα υπάρχει στον Apache. Η διαδρομή http://www.dmst.aueb.gr:8080/news/conferences/ δεν σημαίνει ότι στο root directory του server υπάρχει η δομή καταλόγου news/conferences

• To path είναι στην ουσία το query string δίνοντας έτσι μία ευπαρουσίαστη και κατανοητή url

H συμβατότητα του ZOPE με το W3CAA

• Ο Designer μπορεί να χρησιμοποιήσει CSS ώστε να ελέγχει καλύτερα την παρουσίαση του Site

• To Query String στην ZopeDB χρησιμοποιείται για παροχή πληροφορίας στη πλοήγηση του χρήστη

• Οι data adapters πού έρχονται μαζί με το zope υποστηρίζουν την εξαγωγή των δεδομένων σε XML RDF etc

Εγκατάσταση

• Για Windows υπάρχει Installer με κονσόλα διαχείρισης ως απλό process ή service για ΝΤ

• Port σε FreeBSD, rpm για linux καθώς και πακέτα για όλα τα κύρια λειτουργικά συστήματα

• Πανεύκολη εγκατάσταση – απαιτεί κάποιες ρυθμίσεις στα Permissions του UNIX

Συνεργασία με Apache και RDBMS

• Όπως προαναφέραμε ο ZOPE χρησιμοποιεί τον δικό του multithreaded web server για καλύτερο object persistence – Μπορεί άνετα να λειτουργήσει κάτω από τον Apache

χρησιμοποιώντας είτε το mod_proxy είτε ως pcgi/cgi

• O ZOPE μπορεί να αποθηκεύσει τα δεδομένα του είτε στην δικιά του database είτε να συνεργαστεί άνετα μέσω των data adapters που διαθέτει με ένα σύστημα RDBMS όπως η MySQL

ΖOPE Templates

• Ένα XML namespace το οποίο χρησιμοποιείται για να διαχωρίσει την λογική από το περιεχόμενο

• Διευκολύνει την επαναχρησιμοποίηση ήδη υπαρχόντων αντικειμένων

• Επειδή ανήκουν στο ίδιο «namespace» δεν χρειάζεται η δήλωση τους κάθε φορά που δημιουργούμε ενα dtml page template

• Ενσωματωμένοι αλγόριθμοι cashing στο Zope διευκολύνουν το scalability της εφαρμογής μας

Πως μοιάζουν ?

<dtml-var standard_html_header><h1>Presentation : <dtml-var title></h1><p>Nikos Korfiatis</p><p>ELTRUN Group</p><dtml-var standard_html_footer>

<html><head><title>ZOPE Presentation</title><body bgcolor="#FFFFFF"> <h1>Presentation: Zope Presentation</h1> <p>Nikos Korfiatis</p> <p>ELTRUN Group</p> </body></html>

Στο παράδειγμα

• <dtml-var title>: Μας έδωσε το τίτλο του αντικειμένου (δημιουργήσαμε ένα Folder με τίτλο Zope Presentation)

• <dtml-var standard_html_header/footer>: Predefined tags για html handling.

Ένα δεύτερο παράδειγμα

• Έστω ότι ένας «πελάτης» μας έχει μια βάση δεδομένων με προϊόντα τα οποία θέλει να παρουσιάσει στο web μέσω μιας ιστοσελίδας

Με mod_perl#!/usr/bin/perl

use DBI;use CGI qw/:standard/;

$query = new CGI;$order_number = $query->param('order_number');

$dbh = DBI->connect ("DBI:Oracle:MyDatabase");$sth = DBI->prepare (<<"_QUERY_");SELECTparts.part_id, description, price, order_number, quantity, shipped, customers.name, customers.addressFROM parts, orders, customers WHERE parts.part_id = orders.part_id AND orders.customer_id = customers.customer_idAND orders.order_number = $order_numberORDER BY order_number_QUERY_

$sth->execute;

print "Content-Type: text/html\n\n";

print <<_HEADER_;<table><tr> <th>Order<br>Number</th> <th>Quantity</th> <th>Shipped</th></tr>_HEADER_

while ($row = $sth->fetchrow_hashref) { print <<"_ROW_"; <tr> <td>$$row{order_number}</td> <td>$$row{quantity}</td> <td>$$row{shipped}</td> </tr>_ROW_}

print <<_FOOTER_;</table>_FOOTER_

$sth->finish;$dbh->disconnect;

To ίδιο στο Zope

• Μέσω του administration interface δημιουργούμε ένα νέο object (ZSQL query object)

• Στο query object καλούμε μία μέθοδο η οποία μας εξάγει τα δεδομένα από την βάση καλώντας τον data adapter που έχουμε ορίσει από πριν στο ZOPE

SELECT parts.part_id, description, price, order_number, quantity, shipped, customers.name, customers.address FROM parts, orders, customers WHERE parts.part_id = orders.part_id AND orders.customer_id = customers.customer_id AND orders.order_number = <!--#var order_number--> ORDER BY order_number

To ίδιο στο Zope (2)

• H παρουσίαση του περιεχομένου θα γίνει με την χρήση ενός template το οποίο και θα καλέσουμε να εμφανίσει τα αποτελέσματα που έκανε bind η μέθοδος μας

<table><tr> <th>Order<br>Number</th> <th>Quantity</th> <th>Shipped</th></tr>

<!--#in qryListOrderInformation--> <tr> <td><!--#var order_number--></td> <td><!--#var quantity--></td> <td><!--#var shipped--></td> </tr><!--#/in--></table>

Βασικές Έννοιες Διαχείρισης Περιεχομένου

• Διαχείριση Δικαιωμάτων (State Management) – Ποιος έχει δικαίωμα να δημοσιεύσει τι και που ? – Review Process

• Διαχείριση ροής εργασίας (workflow)– Contributions and merging – Περιορισμοί και χρονικά περιθώρια

• Acquisition του περιεχομένου – Εύχρηστες φόρμες εισαγωγής και έλεγχος

σωστής καταχώρησης

Βασικές Έννοιες Διαχείρισης Περιεχομένου (2)

• Μεταδεδομένα και υποστήριξη σημασιολογίας– Όσο το δυνατόν καλύτερη περιγραφή του

περιεχομένου

• Παροχή δυνατότητας συγχρονισμού από άλλες πηγές– RSS/RDF feeds

The ZOPE CMF

• Το κύριο πλαίσιο διαχείρισης περιεχομένου που χρησιμοποιεί ο ZOPE

• Μια βιβλιοθήκη έτοιμων αντικειμένων τα οποία μπορούμε να ενσωματώσουμε στην εφαρμογή μας. Τέτοια αντικείμενα είναι wikicontent, callendar,localizer (!) etc

• Μια Component Based προσέγγιση στο «χτίσιμο» portals και υπηρεσιών πληροφόρησης

CMF Core Services

• MembershipServices (includes personalization) • CatalogingServices (using Zope's ZCatalog) • WorkflowServices (Permissions, State

Management)• BasicContentServices • SiteDesignServices (Templates, Cashing)• IntegrationServices • DiscussionServices • ArchivingServices • SyndicationServices (RSS, RDF)• RatingServices • TestingServices

PLONE: A ZOPE Portal Application based on CMF

Εισαγωγή στο Plone/CMF

• To Plone έχει «κτιστεί» πάνω στο CMF δίνοντας ένα πλήρως λειτουργικό Content Management System

• Γενικά χαρακτηριστικά που κληρονομεί από το Zope– Διαχείριση Ροής Εργασίας– Αντικειμενοστραφής Εργασία με έγγραφα και

πληροφορία – Products του Zope μπορούν να χρησιμοποιηθούν

στο Plone

Διαχείριση Ροής Εργασίας

• Σε ένα πλήρες site πολλές φορές απαιτείται η συνεργασία πολλών ατόμων

• Στο “Plone” διευκολύνεται η συνεργασία μέσω ειδικά διαμορφωμένων δυνατοτήτων– Διαμόρφωση ρόλων– Είδη εγγράφων – Μεταδεδομένα

Διαχείριση Αντικειμένων

Πρόσβαση σε όλα τα αντικείμενα του ZOPE

Διαχείριση Ιδιοτήτων

Add-ins (CMFBibliography)

Μεταδεδομένα

Και τα Nukes ?

• Nukes: Συστήματα Διαχείρισης περιεχομένου που αναπτύσσονται με PHP

• Προσεγγίζουν (προσπαθούν) την αντικειμενοστράφεια

• Αδυναμία ενιαίας πλατφόρμας (Application Server)

• Πρόβλημα στα πλαίσια ανάπτυξης

• Total Cost of Ownership πολύ μεγάλο....

Τέλος...

• ΕπικοινωνίαEmail: nkorf@eltrun.gr

Οικονομικό Πανεπιστήμιο Αθηνών, Electronic Trading Research Unit (ELTRUN)

Sites

http://www.zope.org

http://www.plone.org

http://www.zopelabs.com

Recommended