• Aucun résultat trouvé

Zope: une plateforme collaborative de développement web open source

N/A
N/A
Protected

Academic year: 2022

Partager "Zope: une plateforme collaborative de développement web open source"

Copied!
5
0
0

Texte intégral

(1)

Zope: une plateforme collaborative de développement web open source

(Article paru en mai 2001 dans la revue .Net Pro et révisé légèrement depuis.)

Entre serveur d'applications et système de gestion de contenu, Zope fournit en Open Source les moyens de créer rapidement et simplement des applications et des sites web dynamiques.

Pourquoi Zope ?

De nos jours, les développeurs web confrontés à un projet d'application ou de site complexe peuvent difficilement envisager de programmer ex nihilo des fonctionnalités communes à la plupart des sites, telles que:

! la génération de pages HTML (ou XML, WML...) à la volée à partir d'une description dans un langage de script simple;

! la connexion à des sources de données externes, notamment des bases relationnelles;

! la gestion des transactions;

! l'indexation plein texte du contenu du site;

! l'authentification des utilisateurs et la gestion des droits d'accès;

! la possibilité de réutiliser, en les personnalisant, des composants logiciels métier.

La complexité de certains développements a par ailleurs amené à chercher à séparer conceptuellement, et sous forme de composants distincts, les applications en trois couches: gestion des données, logique applicative et présentation.

Ce type d'approche et l'ensemble des ces fonctionnalités élémentaires définit ce que l'on appelle généralement un serveur d'applications. Il existe de nombreux produits sur le marché qui correspondent à cette description, certains onéreux, d'autres sous forme de logiciels libres. Dans cette dernière famille, nous nous intéresserons à Zope, un produit qui se distingue par une approche originale:

! Zope encourage le développement collaboratif, et permet d'intégrer au sein d'une même plateforme de

développement à la fois des non-spécialistes de la programmation (designers HTML, graphistes, producteurs et éditeurs de contenu) et des développeurs.

! Il est très simple à mettre en oeuvre, aussi bien sous Windows que sous Linux/Unix; Zope peut être connecté au Web soit directement, soit derrière un serveur HTTP comme Apache, IIS ou Netscape.

! L'essentiel de ses fonctionnalités, y compris l'environnement de développement intégré et de gestion du contenu, est accessible depuis un simple navigateur web banalisé.

Afin de permettre au maximum à des utilisateurs non avertis de travailler sur un site, les auteurs de Zope ont veillé à ne pas leur imposer de changer d'environnement. Ils peuvent continuer à travaillers avec leurs outils habituels: en effet, il est possible de visualiser et d'éditer directement du contenu dans Zope à l'aide d'un navigateur de fichiers comme par exemple Konqueror sous Linux ou l'explorateur Windows, ou d'utiliser directement sur le site des éditeurs HTML tels que GoLive, DreamWeaver ou HomeSite.

D'un point de vue plus conceptuel, Zope se distingue en adoptant une vision résolument objet du Web: il ne s'agit plus seulement de publier des pages (HTML) ou d'exécuter des scripts, mais de publier des objets grâce à des appels de méthodes. Parmi les classes d'objets gérés par Zope, on trouve bien évidemments les objets familiers comme les dossiers, les documents HTML, les images, mais aussi les requêtes SQL, les connexions à une base de données ou à un serveur de messageries, ou d'autres objets métier de type un calendrier, une note de service, etc. Pour donner un exemple simple de l'avantage de l'approche objet de Zope, on peut citer la gestion des images: dans Zope, une image est un objet qui possède comme attributs une largeur et une hauteur calculées automatiquement lors de la création ou de la mise à jour de l'image.

Ces attributs permettent de renseigner automatiquement les attributs WIDTH et HEIGHT de la balise IMG lors de l'inclusion de l'image dans du code HTML.

Une solution libre

(2)

Zope était à l'origine un ensemble de logiciels développés et vendus par la société américaine Digital Creations depuis 1996.

En novembre 1998, la décision a été prise de modifier la licence de ces logiciels pour en faire un logiciel libre, rebaptisé Zope, ou Z Object Publishing Environment. Ce choix s'est avéré très profitable pour la société, qui s'est dès lors considérablement développée, grâce à la dynamique qui s'est créée autour de la plateforme. De nombreuses sociétés à travers le monde proposent à présent des services autour de Zope (hébergement, consulting, développement, formation...) et participent au développement de la plateforme ou de composants aditionnels, suivant en cela le modèle du logiciel libre. En juillet 2001, Digital Creations a annoncé sa décision de changer de nom en Zope Corp.

Zope est programmé principalement dans le langage Python, langage dynamique à objets multi-plateformes. Les avantages généralement reconnus de ce langage sont notamment sa souplesse et son expressivité, et surtout une syntaxe explicite et claire qui encourage l'écriture de code lisible. Zope est aujourd'hui l'une des applications les plus importantes écrites dans ce langage. Signe de l'importance de Python pour Zope, la société Digital Creations a embauché en octobre 2000 l'équipe de développement de Python, de façon à assurer une évolution du langage conforme aux besoins de la plateforme. Mais les développeurs Perl ne sont pas oubliés: des «méthodes Perl», actuellement en version bêta, devraient leur permettre de scripter Zope avec leur langage préféré.

Zope est programmé de façon modulaire, et intègre de nombreux composants, dont certains peuvent être exploités indépendamment de l'ensemble. Les principaux composants de Zope sont:

! ZServer, un serveur qui reconnaît les protocoles HTTP, FTP, WebDAV, XML-RPC, Fast-CGI...

! ZODB, une base de données objets. Cette base est transactionnelle et permet de revenir à des versions antérieures des objets après une modification jugée inopportune a posteriori. Elle contient une hiérarchie d'objets, que l'on peut comparer à des dossiers et des documents dans un serveur web classique, qui sont le plus souvent directement associés à des URL.

! ZPublisher, le mécanisme qui permet de transformer les URL en appels de méthodes sur des objets, et tenant compte du passage des paramètres et des droits d'accès aux différents objets.

! une base de donnée SQL très simple, qui n'est efficace que pour des tables de quelques centaines de lignes, mais qui est suffisante pour l'apprentissage de la programmation SQL ou le prototypage d'une application. Cette base peut être remplacée par n'importe quelle SGBD courant, via des interfaces natives ou via ODBC.

! le langage DTML, qui est le langage de génération de pages de Zope.

! ZCatalog, un outil d'indexation des objets de la base Zope, qui permet de réaliser facilement un moteur de recherche sur un site Zope.

Un environnement de développement 100% web

Avec Zope, l'intégralité des tâches de gestion de contenu et d'administration des sites et une grande partie des tâches de développement peuvent s'effectuer depuis une interface web. L'avantage est évident: permettre à de nombreux utilisateurs de travailler sur un site depuis des postes de travail entièrement banalisés, avec une interface utilisateur familière, et sans avoir besoin d'accès shell au serveur qui héberge le site.

L'interface de gestion de Zope se présente suivant le modèle maintenant familier des navigateurs de fichiers: l'arborescence des dossiers est représentée dans un cadre à gauche, tandis que le contenu du dossier courant est affiché en vis-à-vis à droite. À partir de cette interface, il est possible de créer de nouveaux objets (en les choisissant parmi une liste de classes reconnues par le serveur), de les copier, de les déplacer, de les renommer ou de les détruire. On peut aussi associer à chaque objet des attributs éditables depuis l'interface web, baptisés "propriétés", qui jouent le rôle de méta-données.

Parmi les fonctionnalités accessibles depuis l'interface web, qu'on ne retrouve pas sur un serveur web classique, on peut noter:

! la possibilité de revenir en arrière (opération undo) en cas d'erreur de manipulation sur des objets;

! la possibilité de travailler sur le site dans des «versions» privées, qui sont acessibles aux développeurs ou aux gestionnaires de contenus, mais pas au commun des visiteurs, et de rendre publiques ces versions une fois qu'elles ont été testées et validées.

Délégation et sécurité

(3)

Zope repose en partie sur un modèle de délégation particulier baptisé «acquisition». Dans ce modèle, un objet placé dans un dossier (ou plus généralement dans un autre objet qui joue le rôle de conteneur) peut «acquérir» les attributs ou les méthodes de l'objet qui le contient: si l'objet possède la propriété recherchée, c'est celle-ci qui est renvoyée; sinon, elle est recherchée dans le dossier qui le contient, puis dans les dossiers parents successifs jusqu'à la racine du site.

Ainsi, une propriété affectée à un dossier sera-t-elle accessible de façon complètement transparente depuis tous les objets contenus dans ce dossier. Concrêtement, on peut prendre l'exemple du site d'une entreprise qui possède plusieurs divisions, chacune affectée à un webmaster différent. Il suffit de placer les pages correspondants aux différentes divisions dans des dossiers différents, puis d'affecter à ces dossiers une propriété «webmaster» avec l'adresse e-mail du chaque webmaster pour pouvoir insérer leurs adresses respectives à l'aide d'un code générique tel que:

<a href="mailto:<dtml-var webmaster>">Contacter le webmaster</a>

qui sera inséré dans la méthode DTML qui définit les bas de page, standard_html_footer.

L'acquisition joue également un rôle fondamental dans la gestion des droits d'accès: le gestionnaire général du site peut déléguer attribuer à des utilisateurs particuliers des droits sur des dossiers donnés. Dans notre exemple, chacun des webmasters de division se verra délégué le droit de modifier le dossier dont il à la responsabilité, et pas les autres. Bien évidemment, la création de nouveaux utilisateurs et l'administration des droits d'accès se fait entièrement depuis l'interface web. Il est par ailleurs possible d'utiliser une base d'utilisateurs existante, par exemple une base Unix, NT ou LDAP.

On peut également définir dans Zope des droits d'accès et d'écriture de façon globale sous forme de «rôles», et attribuer un ou plusieurs rôles à chaque utilisateur du site. Par exemple, un utilisateur qui possède le rôle «programmeur SQL» aura la possibilité d'éditer toutes les méthodes SQL d'un site, mais pas d'autres méthodes sauf s'il possède explicitement les droits correspondants.

Le langage DTML

DTML, le «Document Template Markup Language», est le langage de génération de pages de Zope. Il s'agit d'un langage de script à balises, similaire en cela à PHP, JSP, ASP ou CFML. Sa particularité est d'être volontairement très simple, avec seulement une dizaine de balises différentes. Ce choix permet de confier d'une part à des graphistes HTML connaissant des rudiments de programmation la tâche de créer les gabarits (templates) du site chargés de la présentation, d'autre part de laisser des programmeurs développer dans un langage plus expressif, Python en l'occurrence, des objets métier qui se chargent de la logique applicative.

Voici un exemple de code DTML:

<dtml-var standard_html_header>

<h2><dtml-var title_or_id></h2>

<p>

Ceci est le document DTML "<dtml-var id>". Nous sommes aujourd'hui le <dtml-var "ZopeTime()" fmt="%c">.

</p>

<dtml-var standard_html_footer>

La balise <dtml-var ...> sert à insérer dans le code HTML des valeurs qui sont connues de Zope au moment du rendu de la page. Ces valeurs peuvent provenir de plusieurs origines: propriétés ou méthodes liées à l'objet en train d'être rendu ou à l'un de ses parents, ou valeurs provenant de l'intéraction avec l'utilisateur, notamment d'un formulaire ou d'un cookie.

Dans cet exemple, id est l'identifiant de l'objet courant; title_or_id est une méthode qui renvoie le titre de l'objet courant ou, si celui-ci n'a pas été défini, son identifiant; ZopeTime() est une méthode qui renvoie la date et l'heure courante sous forme d'un objet de type DateTime, et l'option fmt=... permet de choisir précisément la façon dont il va être représenté.

Cet exemple illustre également une pratique récurrente dans Zope, qui consiste à utiliser systématiquement deux méthodes DTML, standard_html_header et standard_html_footer, pour représenter les haut et bas de page insérés sur toutes les pages d'un site ou d'un dossier.

(4)

Après <dtml-var ...>, les balises d'usage le plus courant dans Zope sont <dtml-if ...> et <dtml-in ...>. La première permet de n'afficher un texte que lorsqu'une condition, en général exprimées sous forme d'une expression Python, est remplie. La seconde sert à réaliser une itération sur une liste d'objets, qui peut être par exemple la liste des objets contenus dans un dossier ou le résultat d'une requête SQL. De nombreuses options permettent de contrôler facilement la présentation du résultat, ou le groupage par lots.

L'exemple suivant permet d'afficher, avec leur titre, les images contenues dans un répertoire images:

<dtml-var standard_html_header>

<h2>Mes images</h2>

<dtml-in expr="images.objectValues('Image')">

<p>

<dtml-var sequence-item><br>

<dtml-var title_or_id>

</p>

</dtml-in>

<dtml-var standard_html_footer>

Dans cet exemple, l'expression Python images.objectValues(Image) renvoie la liste de toutes les images contenues dans le dossier images. La balise <dtml-var sequence-item> permet d'afficher l'objet courant de la boucle. Comme il s'agit d'une image, Zope va insérer le code correspondant: <img src="...">. Enfin, <dtml-var title_or_id> affiche le titre (ou, à défaut, l'identifiant) de cette image (et non celui de la méthode DTML en cours d'évaluation).

D'autres balises DTML utiles sont:

! <dtml-call ...>, qui appelle une méthode Python sans afficher de résultat. Cette balise permet notamment d'effectuer des manipulation simples sur les variables REQUEST et RESPONSE qui représentent respectivement la requête et la réponse HTTP en cours. Par exemple, ``<dtml-call "RESPONSE.redirect(http://www.nuxeo.com)">'' sert à rediriger le navigateur vers une nouvelle URL, en l'occurrence http://www.nuxeo.com.

! <dtml-with ...> et <dtml-let ...>, qui permettent de modifier l'espace de noms courant, dans lequel sont cherchées les valeurs lors d'un appel à <dtml-var ...>, en y insérant un nouvel objet ou une nouvelle valeur.

! <dtml-sendmail ...> et <dtml-mime ...>, qui servent à envoyer un courrier électronique, par exemple à un administrateur d'un site lorsqu'un document a été changé et que son intervention est nécessaire.

Des composants prêts à l'usage

L'un des principaux attraits de Zope est de permettre à des utilisateurs non programmeurs d'installer et de configurer selon leurs besoins des composants logiciels prêts à l'usage qui s'intègrent sur la plateforme. On trouve sur le site Zope.org les références à environ 300 de ces composants, baptisés "produits" dans la terminologie Zope.

Parmi ces produits, on peut en citer quelques-uns d'usage courant:

! de nombreux produits qui concernent l'accès à des sources de données externes: bases de données relationnelles comme Oracle, Sybase, MySQL, PostgreSQL, Interbase, etc., mais aussi serveurs LDAP, POP, IMAP... et protocoles d'objets distribués comme COM, CORBA ou XML-RPC.

! Squishdot, un site de news prêt à l'emploi, similaire aux weblogs comme slashdot.org.

! Metapublisher, un gestionnaire simple de bases de données, qui peut utiliser comme source de stockage soit la ZODB, soit une base relationnelle.

! MSWord Document, un produit qui permet d'insérer des documents Word dans un site Zope, de les visualiser en HTML et de les indexer dans des Catalogues Zope. Ce produit est à présent remplacé par NuxDocument.

! Yihaw, un gestionnaire d'information hiérarchiques, dans le style d'un annuaire de sites comme Yahoo!.

! Zope Grand Unified Desktop (GUD), un projet qui inclut notamment un logiciel de webmail, un lecteur de news, un agenda, un gestionnaire de tâches, etc.

En savoir plus

(5)

Cet article vous a donné envie d'en savoir plus sur Zope ? Pas d'hésitation, rendez-vous sur Zope.org pour télécharger Zope, sous forme de code source pour Unix, de RPM pour Linux ou sous forme d'un exécutable auto-installable pour Windows. (Ce dernier contient, pour plus de simplicité, une copie de Python, et est donc réellement prêt à l'emploi.)

Zope contient un didacticiel interactif, ZopeTutorial, qui permet avec des exemples concrets de faire le tour en quelques heures des principales fonctionnalités de Zope. Zope inclut également une aide contextuelle en ligne intégrée à l'interface de gestion de contenu.

Un livre très complet sur Zope en français est disponible depuis juin 2001 aux Éditions Eyrolles, ainsi qu'un ouvrage en anglais, The Zope Book. Ce dernier est par ailleurs disponible en version Open Content (librement modifiable et redistribuable) sur le site zope.org.

De nombreux autres documents, plus pointus et davantages destinés à des développeurs, sont disponibles sur le site Zope.org sous forme notamment de "Howtos" (mini-guides pratiques). Pour se retrouver dans cette quantité importante d'informations, on pourra consulter le document A Developer's Guide to Learning Zope.

Références

Documents relatifs

 Python : gens motivés pour se mettre au langage, se prête bien à du travail collaboratif, difficulté à trouver des méthodes quand on ne sait pas dans quelle bibliothèque

Faire un état de l'art en matière de BI Open Source (SpagoBI, Penthao, JasperSoft, Talend, etc.) et effectuer un comparatif des différentes solutions dans le but de choisir

4) Considérer l'information pluviométrique amène un mieux surtout pour la méthode de régression avec un point amont, mais le gain reste fragile par rapport aux procédés sans prise

Les étu- diants l’ont ensuite utilisée pour produire la carte sémantique au sein de la plateforme MEMO- RAe et commencer à capitaliser et échanger autour de cette dernière (partage

En appliquant strictement le critère du R 2 aj , nous sommes orientés vers le modèle complet pour lequel nous avons un R 2 aj maximal de 49, 96%.. Nous résumons ces informations dans

En appliquant strictement le critère du R 2 aj , nous sommes orientés vers le modèle complet pour lequel nous avons un R 2 aj maximal de 49, 96%.. Nous résumons ces informations dans

Pour chaque mod`ele, nous remarquons que la valeur du coefficient de d´etermination multiple ajust´e R 2 aj ne diff`ere que faiblement de celle du coefficient de d´etermination

On va traiter cet exemple issu du livre « Analyse de r´egression appliqu´ee » de Yadolah Dodge, Dunod, sans se servir de Minitab et faire tous les calculs « `a la main » pour