Objektsache
Fast jede Woche scheint ein neues kommerzielles Content-Management-System auf den Markt zu kommen. Überschaubarer sind die OpenSource-Alternativen. Die wahrscheinlich populärste unter ihnen ist der Content-Management- und Web-Applikationsserver Zope.
- Nico Grubert
- Katrin Kirchner
- Mark Pratt
Zope Corporation, ehemals Digital Creations, hat vor über drei Jahren Zope als Open-Source-Software auf den Markt gebracht (siehe iX 8/1999 [1]). Seitdem sind über 400 kostenlose Erweiterungen, so genannte Zope-Produkte, entstanden; wobei der Aufwand, der hinter diesen Applikationen steckt, unterschiedlich ist: Er liegt zwischen wenigen Tagen und mehreren Monaten oder Jahren.
Obwohl Zope üblicherweise zu den Applicationservern gerechnet wird, kann das Python-basierte Werkzeug, das entweder mit eigenem DBMS oder einem externen arbeitet, auch Content-Management-Zwecken dienen.
Wenn ein Zope-Produkt in /lib/python/Products installiert ist, können Content-Manager über das Web-basierte Interface von Zope neue Instanzen eines Produktes - beispielsweise ein Modul für Umfragen, Diskussionen oder ein ganzes Portal - per Mausklick hinzufügen. Diese Trennung von Programmcode, Layout und Managementebene macht Zope für Nichtprogrammierer und Systemverwalter bedienbar.
Zope läuft unter Windows 9x, 2000 und Unix-Derivaten wie Linux und BSD. Ein weiterer Vorteil gegenüber einigen kommerziellen Content-Management-Servern: Das System ist in der objektorientierten Skriptsprache Python geschrieben. Python generiert ähnlich wie Java plattformunabhängigen Bytecode. Für Entwickler bedeutet dies, dass sie durch den objektorientierten Aufbau auf über 900 Python-Module zurückgreifen können, die ein breites Spektrum an Funktionen abdecken: etwa dynamisches Generieren von komplexen PDF-Dokumenten - und sofern nicht systemspezifische Module eingesetzt werden, laufen sie auf allen genannten Betriebssystemen.
Da es weltweit deutlich mehr Perl- als Python-Programmierer gibt, entschloss sich Zope Corporation mit Unterstützung von ActiveState, den Applicationserver um diese Skriptsprache zu erweitern. Es entstand das ‘Perl for Zope’-Projekt. Es sollte nicht alles neu in Perl geschrieben werden, sondern zusätzlich möglich sein, Perl-Skripts zu verwenden. Seit Anfang des Jahres können Programmierer nun sowohl externe Perl-Methoden, das heißt im Dateisystem befindliche, als auch (interne) Perl-Methoden nutzen, ähnlich wie bei den Python-Methoden. Dazu müssen neben Zope und Python noch Perl sowie pyperl und zoperl installiert sein. Die mit Zope ausgelieferte Python-Version reicht nicht aus, es muss eine komplette Installation sein.
Online-Ressourcen
Zope
Dokumentation
pyperl verbindet Perl und Python - und ist nicht Zope-spezifisch. zoperl beinhaltet Dreierlei: externe und interne Methoden sowie einen DBI-Datenbankadapter. zoperl baut auf pyperl auf und lässt sich nicht ohne funktionierende pyperl-Installation verwenden. Bislang ist es nicht möglich, vollständige Zope-Produkte in Perl zu schreiben und es ist wohl auch nicht geplant. Entwickler können jedoch Teile des Produkts in Perl verfassen, das heißt, sie können die vorhandenen Perl-Bibliotheken verwenden und die neuen Teile in das endgültige Produkt einbinden. Wenn man bedenkt, dass über bekannte Online-Ressourcen wie das Comprehensive Perl Archive Network (CPAN) zur Zeit weitere 2447 Module zur Verfügung stehen, gibt es eine große Zahl an Tools für Webapplikationen wie Community Portale und Content Management.
Content Management Framework
Zopes Content Management Framework (CMF) ist ein Framework für das Entwickeln von Content-Management-Lösungen und gerade deswegen nicht ‘das Zope-CMS’. So ist die im Paket enthaltene ‘CMF Site’ nur eine Beispielimplementierung des CMF - jeder ist eingeladen, seine eigene Version zu entwickeln. ‘CMF Site’ selbst ist aber die Basis für ein Community-Portal. Enthalten sind sieben verschiedene Basistypen wie Newsitem, Image, Document und Link. Instanzen dieser Objekte kann jedes Portalmitglied in seinem eigenen Ordner anlegen, aber nur Mitglieder der Gruppe ‘Reviewers’ können sie, nachdem ein Mitglied sie eingereicht hat, freischalten.
In der Praxis sind es gerade Elemente wie der Workflow, die je nach Einsatzgebiet und Projekt unterschiedlich sind. Weil Zope das herstellerunabhängige Protokoll Web Distributed Authoring and Versioning (WebDAV) unterstützt, ermöglicht das System ganze Workflows. In einer Anwendung mit Dokumenten, auf die mehrere Mitarbeiter zugreifen, wäre es denkbar, dass Anwender nicht über HTML-Eingabemasken Inhalte in das Intranet einpflegen, sondern einfach weiter mit den vertrauten Standardanwendungen wie Word oder Acrobat arbeiten. Da der Internet Explorer WebDAV unterstützt, können Entwickler Bereiche des Zope-Servers als Webordner ansprechen.
Der Workflow in solch einem Szenario könnte wie folgt aussehen: Ein Dokument zum Thema Betriebsanweisungen wird wie bisher in Word geschrieben, über die Tastenkombination Alt-f-i werden die Standardfelder für Metadaten ausgefüllt und das Dokument in einen Webordner ‘Betriebsanweisungen’ gespeichert. Nachdem der Benutzer diese drei Schritte ausgeführt hat, übernimmt Zope den Rest. Die Metadaten indiziert der integrierte ZCatalog automatisch beim Hochladen; sie sind genau so auffindbar wie reguläre Inhalte, die über das Web Content Management eingegeben wurden.
Wer sich für eine OpenSource-basierte Content-Management-Lösung interessiert, sollte sich das CMF ansehen, schon allein deswegen, weil viele Programmierer mit mehrjähriger Erfahrung im Einsatz von kommerziellen Content-Management-Systemen in dieses Framework ihr Wissen einfließen ließen.
Zope Page Templates
Für das saubere Trennen von Design und Programmcode hat die Zope Corporation eine weiteres Lösung parat: Zope Page Templates (ZPT).
Viele Webdesigner und Grafiker arbeiten mit Software wie Adobes GoLive. Diese Programme haben oft Probleme mit Zopes Markup Language DTML (Document Template Markup Language), die dynamische Inhalte erzeugt. Bisher brachten nachträgliche Änderungen am Layout oft den DTML-Code durcheinander, da die Webpage-Tools nicht mit ihm umgehen konnten, ihn auseinander rissen und dadurch unbrauchbar machten. Das bedeutete zusätzliche Arbeit für die Programmierer, um den Code wieder zu korrigieren. Durch Page Templates entfallen diese Nachkorrekturen.
Mit der Template Attribute Language (TAL) können Programmierer nun ebenfalls dynamische Inhalte erzeugen. Die TAL-Anweisungen werden innerhalb normaler HTML-Tags verwendet. Für eine korrekte Interpretation sind sie in speziellen Zope-Objekten, den Page Templates, zu speichern, das heißt, der Code, der TAL-Anweisungen enthält, muss in einem Page Template stehen. Da TAL-Anweisungen innerhalb von HTML-Tags stehen, ist der gesamte Code für Webtools nicht mehr unverständlich: Sie interpretieren ihn als normalen HTML-Code, allerdings ohne den dynamischen Inhalt. Damit man dennoch den Überblick behält, wo sich TAL-Anweisungen befinden und was sie später bei ihrer Evaluierung erzeugen, können bei jeder TAL-Anweisung Dummy-Texte angegeben werden.
Eine Makro-Erweiterung für TAL (METAL) erlaubt es, Makros zu definieren. Diese sind ebenfalls Page-Template-Objekte, die aus HTML-Code und TAL-Anweisungen bestehen. Sie erhalten einen Namen und andere Page Templates können sie aufrufen. Damit ist Code wiederverwendbar.
Innerhalb von Makros können so genannte Slots erstellt werden. Ruft ein Page Template ein Makro auf, wird der Code des Makros in das aufrufende Page Template eingefügt. Verfügt das Makro über einen Slot und das Page Template über einen HTML-Tag, der das Attribut metal:fill-slot enthält, wird an dieser Stelle statt des Texts/Codes des Slots im Makro der Text/Code des Page Templates verwendet. Slots dienen demnach dazu, Teile eines Makros innerhalb eines Page Template zu überschreiben. Das Makro bleibt erhalten. Mit Page Templates und den Sprachen TAL und METAL gibt es drei Schichten: Page Templates, darin aufgerufene Makros und die in den Makros befindlichen Slots.
Die häufig gestellte Frage ‘Ist Zope skalierbar?’ beantwortet die Zope Enterprise Option (ZEO). Auf mehrere Rechner verteilte Server können sich eine Datenbank teilen. Diese Software war früher den Consulting-Kunden des Herstellers vorbehalten, aber seit ungefähr einem Jahr sind die Releases kostenlos und stehen zum Download und Mitentwickeln bereit. Die Website für die Gemeinde betreibt seit über einem Jahr erfolgreich ein ZEO-Cluster.
Zope Enterprise Option und ZClasses
Wer sich für Fragen der Skalierbarkeit interessiert, sollte sich die Diskussion über die nächsten Versionen von ZEO auf dem Entwicklungsserver ansehen. Durch künftige Eigenschaften wie Replikation von Datenbanken über mehrere Standorte dürfte Zope sicherlich noch für ganz andere Anwendungen interessant werden.
Während die bisher beschriebenen Produkte erst zu installieren sind, integriert Zope mehrere mittlerweile von vornherein. Es bietet eine komfortable Möglichkeit, über das Webinterface objektorientiert zu ‘programmieren’ - mit den ZClasses. Sie unterstützen den Webentwickler dabei, auf schnelle Weise Prototypen zu entwickeln. ZClasses legen Entwickler innerhalb eines Produkts an. Die Objektorientierung erlaubt es, ZClasses zu erstellen, die auf Methoden anderer ZClasses oder so genannter Basisklassen zurückgreift. Abbildung 1 zeigt den Aufbau eines einfachen Produktes ‘Vertrieb’, das unter anderem eine ZClass ‘Verkauf’ enthält.
Im Produktordner Vertrieb lassen sich so genannte Help Topics (zeige_ID) erstellen, mit denen man dem Benutzer Hilfetexte für unterschiedliche Seiten zur Verfügung stellen kann. Die ZClass Hardware ist eine Unterklasse von Verkauf. Zunächst wird eine Instanz der Klasse Verkauf erstellt. Innerhalb dieser Instanz werden Artikel der Kategorie Hardware angelegt, sodass es möglich ist, für jeden Hardwareartikel die Methode zeige_ID aus Verkauf aufzurufen.
Ferner sind beide ZClasses von der Basisklasse CatalogAware und Z Object Manager abgeleitet. Letztere ermöglicht es Hardwareartikeln, Unterobjekte (etwa Textdateien mit einer Beschreibung des Artikels) enthalten zu können. Über CatalogAware lassen sich Hardwareartikel in einem ZCatalog verwalten, was Suchmöglichkeiten nach Eigenschaften eines Artikels erleichtert.
In Property Sheets legen Programmierer die Eigenschaften fest, die eine Instanz der Klasse (etwa einen Hardwareartikel) beschreiben.
ZClasses sind gerade für Einsteiger ein guter Weg, in die Zope-Entwicklung hineinzufinden. Wer sich für das CMF interessiert, kann sie einsetzen, um neue Basistypen, so genannte Tool Types, zu entwickeln, die anschließend den Mitgliedern eines Portals zur Verfügung stehen.
Ein neuer Bestandteil von Zope ist das Speichermanagement. Es ist in zwei Caches unterteilt: den HTTP- und den RAM-Cache. Es gibt daher zwei neue Ojekte: den Accelerated HTTP Cache Manager und den RAM Cache Manager. Beide können Objekte, von denen man weiß, dass sie sich nicht häufig ändern, entweder im RAM oder als temporäre Datei auf dem Rechner des Anwenders speichern. Sie verwalten nicht automatisch alle befindlichen Objekte über die Cache Manager, sondern Objekte sind einer bestimmten Instanz eines Cache Manager zuzuordnen. Bei beiden Managern ist die Dauer der Speicherung variabel und vom Administrator einstellbar. Der RAM Cache Manager erlaubt außerdem das Setzen einer Grenze der Einträge für ein Objekt sowie eines Intervalls (in Sekunden), nach dem das Objekt im Cache gelöscht wird.
Cache-Manager, Virtual Host Monster
Beide Cache Manager verfügen außerdem über eine Statistikansicht. Der HTTP Cache Manager zeigt an, wie viele Hits eines Zope-Objekts durch anonyme oder authentifizierte Benutzer erfolgten. Es ist aber auch möglich, nur die Hits durch anonyme Benutzer erfassen zu lassen und die authentifizierten zu ignorieren. In der Statistikansicht des RAM Cache Managers werden die (Recent) Hits und Misses der mit diesem Manager verknüpften Objekte angezeigt. Außerdem zeigt die Statistik die ungefähre Größe des Objekts an, das heißt die Menge RAM, die es braucht.
Weiterer Bestandteil von Zope ist das Virtual Host Monster. Dieses Objekt dient der Unterstützung von virtuellen Hosts. Allein tut es nichts, aber wenn die Wörter VirtualHostBase oder VirtualHostRoot innerhalb einer URL verwendet werden, ändert das Virtual-Host-Monster-Objekt die innerhalb des Ordners erzeugten URLs. Dies ist günstig, um zentral Protokoll, Host und Pfad der von Zope generierten URLs festlegen zu können. Verwendet wird ein Virtual Host Monster entweder mit Apaches RewriteRules, ProxyPass-Anweisungen oder einer Access-Regel.
Ein großer Kritikpunkt ist bei allen ‘jungen’ Softwaresystemen berechtigt: der Mangel an Dokumentation. Hier tut sich mittlerweile einiges. Neben den über 300 von Zope-Anwendern geschriebenen Dokumenten (How-Tos) sind dieses Jahr schon vier Bücher zu Zope erschienen; mindestens zwei weitere sind geplant.
Nico Gruber, Katrin Kirchner, Mark Pratt
arbeiten für die Zope-Dienstleistungsfirma beehive GmbH in Berlin. Vor kurzem ist ihr Zope-Buch bei dpunkt erschienen.
Literatur
[1] Frank Tegtmeyer; Website-Entwicklung; Objekthierarchie; Open-Source-Web-Publishing mit Zope; iX 8/1999, S. 64;
iX-TRACT
- Das Python-basierte OpenSource-Werkzeug Zope ist nicht nur als Applicationserver, sondern auch für Content-Management-Zwecke einsetzbar.
- Seit Zope kostenlos erhältlich ist, sind Hunderte von Zusatzmodulen entstanden, auf die Entwickler zurückgreifen können.
- So genannte Zope-Produkte wie das Content Management Framework und die Page Templates sorgen für leichtere Arbeit an komplexen Websites.
(hb)