"1996 wurde Jim Fulton gebeten, einen Kurs über die CGI-Programmierung zu halten, obwohl er nicht viel über dieses Thema wusste. CGI (common gateway interface) Programmierung ist ein weitverbreitetes Modell, welches Entwicklern die Konstruktion dynamischer Webseiten ermöglicht. Auf dem Weg zum Kurs las Jim die existierende Dokumentation zu CGI. Auf dem Rückweg überlegte er, was ihm nicht an traditionellen CGI-basierten Programmierumgebungen gefiel. Auf diesen ersten Träumereien aufbauend, wurde Zopes Kern auf dem Rückflug von diesem Kurs geschrieben.
Die Zope Corporation (damals noch als Digital Creations bekannt) veröffentlichte drei Open Source Software-Pakete, die Web-Publikation unterstützten: Bobo, Document Template und BoboPOS. Diese Pakete wurden in Python geschrieben und stellten jeweils die Möglichkeit zur Web-Publikation, Schablonen und beziehungsweise eine Objekt-Datenbank zur Verfügung. Unter dem Namen Principia entwickelte Digital Creations einen kommerziellen Applikations-Server, der auf diesen drei Open Source Paketen aufbaute. Im November 1998 überzeugte der Investor Hadar Pedhazur Digital Creations, Principia als Open Source zu veröffentlichen. Diese Komponenten haben sich zu den Kernkomponenten von Zope entwickelt.
Der Spitzname "Zope" steht für Z Object Publishing Environment, wobei das "Z" keine spezielle Bedeutung hat. Der Großteil von Zope ist in der Skriptsprache Python geschrieben, mit einigen Performance kritischen Teilen in C."12
Aus dem Eingangszitat dieses Kapitels lässt sich schon sehen, dass Zope ein Web Application Framework ist. Eine zulässige alternative Bezeichnung wäre Application Server. Ein Application Server im allgemeinen ermöglicht es, in einer Programmiersprache Web-Applikationen zu schreiben. Oft werden jedoch auch Dienste angeboten, die über die Basisfunktionen der Sprache hinausgehen, wie zum Beispiel die Verwendung von Templates, ein einheitliches Sicherheitsmodell, Sessions und andere Features.
Der Vorteil liegt hierbei auf der Hand: Anstatt die gesamte Applikation von Grund auf neu zu schreiben, kann auf Funktionalität zurückgegriffen werden, die bereits zur Verfügung steht. Um beim eigentlichen Thema dieser Arbeit zu bleiben, wird an dieser Stelle ein Content Management System als die Web-Applikation betrachtet, auch wenn sich noch viele andere Arten von Web-Applikationen denken ließen.Zope selbst ist also kein Content Management System, im folgenden wird demnach zu klären sein, inwiefern Zope die Erstellung eines CMS unterstützt.
Zope besteht aus mehreren Komponenten, deren Zusammenspiel im folgenden Bild dargestellt wird.
ZServer: Zope hat einen eigenen Webserver, der standardmäßig aktiviert ist, um auf die Anfragen aus dem Web zu beantworten. Ebenso "versteht" der Server FTP, WebDAV, und XML-RPC.
Web Server: Sollte bereits ein Webserver vorhanden sein, und der Einsatz des Zope-eigenen nicht erwünscht, so kann Zope mit jedem Web-Server arbeiten, der das Common Gateway Interface (CGI) unterstützt.
Zope Core: Der Kern koordiniert das Zusammenspiel aller Komponenten und stellt das Zope Management Interface (siehe nächstes Kapitel) und die Objektdatenbank zur Verfügung
Object Database: Wärend der Arbeit mit Zope wird in der Regel auf Objekte zugegriffen, die in Zopes Objektdatenbank gespeichert sind.
Relational database: Sollte der Zugriff auf relationale Datenbanken notwendig sein, kann auf unterschiedliche externe RDBMS zugegriffen werden (siehe auch relationale Datenbanken im nächsten Kapitel).
File System: Zope kann auch auf Dokumente und Dateien zugreifen, die auf dem Dateisystem des Servers gespeichert sind.
ZClasses: Site Manager können über das Zope Management Interface neue Objekt-Typen zu Zope hinzufügen. Diese Art von Objekten werden ZClasses genannt (siehe auch Erweiterbarkeit im nächsten Kapitel).
Products: Ebenso ist das Hinzufügen von neuen Objekt-Typen durch die Installation von "Produkt"-Dateien im Dateisystem des Servers möglich (siehe auch Erweiterbarkeit im nächsten Kapitel).
Als Web Application Framework stellt Zope Entwicklern einige Komponenten bereits zur Verfügung, so zum Beispiel regelt es die Speicherung von Daten, deren Integrität und bietet Möglichkeiten der Zugriffskontrolle. Dadurch kann sich der Entwickler auf das eigentliche Problem seiner Anwendung konzentrieren. Als hauptsächliche Programmiersprache wird Python eingesetzt, Perl wird aber auch unterstützt. Für die einheitliche Ausgabe als Text, XML oder HTML gibt es zwei Möglichkeiten in Zope: Document Template Markup Language (DTML), und Zope Page Templates (ZPT).
Zope ist eine Objekt orientierte Umgebung. Gerade in Bezug auf die Entwicklung von Webseiten kann die durchweg auf Objekte konzentrierte Sichtweise gewöhnungsbedürftig erscheinen. Dadurch dass Python Objektorientierung unterstützt, ist Zope auch wirklich Objekt orientiert (in Gegensatz zu beispielsweise PHP4) und benutzt diese Konzepte:Während die ersten vier Punkte an dieser Stelle als bekannt vorausgesetzt werden, ist es notwendig, auf das Konzept der Nachrichten und die Lebensdauer von Objekten im Kontext von Zope einzugehen. Mit Nachrichten ist hier der Austausch von Informationen durch den Aufruf von Methoden gemeint, zum Beispiel der Name einer Veranstaltung, der zur Darstellung eines Kalenders benötigt wird. Das Kalender-Objekt würde eine Nachricht an das Veranstaltung-Objekt schicken, indem es dessen getName-Methode aufruft. Das Veranstaltung-Objekt empfängt die Nachricht und gibt den Wert seines name-Attributs zurück.
Objekte übernehmen von ihren Eltern-Objekten (hier sind damit die Container gemeint, nicht etwaige Oberklassen) die Unterobjekte. Wird zum Beispiel von einem Unterordner die DTML-Methode index_html angefordert, dieser aber besitzt keine, so versucht er die Methode im übergeordneten Ordner aufzurufen. Dies geht immer so weiter, bis zum Stammordner. Wird die Methode dort nicht gefunden, wird eine Exception ausgelöst.Die Lebensdauer eines Objektes wird vom Programmierer bestimmt, oder vom Benutzer des Systems, in dem das Objekt erzeugt wurde. Exemplare von Objekten, die über das Web verwaltet werden, wie zum Beispiel Dateien, Ordner, DTML-Methoden usw. existieren von dem Zeitpunkt, an dem sie vom Benutzer erzeugt wurden, bis sie gelöscht werden. Diese Objekte werden auch als persistente Objekte bezeichnet und in Zopes Object database (ZODB) gespeichert.
Die Lebensdauer von anderen Objekten verhält sich anders. Das session_data-Objekt existiert von dem Augenblick wo es vom Programmierer (durch sein Programm) im Auftrag des Benutzers erzeugt wird, bis zu dem Augenblick, an dem es vom System (im Auftrag des Programmierers oder Administrators) gelöscht wird, um entweder Speicherplatz zu sparen, oder um das Ende einer Session kenntlich zu machen. Standardmäßig ist dieser Zeitpunkt als 20 Minuten nach der letzten Aktion des Benutzers definiert, für den das Objekt erzeugt wurde.
Im Allgemeinen werden in Zope drei verschiedene Typen von Objekten unterschieden:
Zope Objekte wie zum Beispiel Dokumente, Bilder und Dateien enthalten unterschiedliche Daten textueller und binärer Art. Außer mit Objekten, die Content enthalten, kann Zope auch mit extern gespeichertem Content umgehen, zum Beispiel aus einer relationalen Datenbank.
Das Aussehen einer Website wird durch Objekte kontrolliert, die als Templates agieren. Es gibt wie bereits erwähnt zwei Möglichkeiten, um die Präsentation zu steuern: DTML (in dem auch Programmier-Logik enthalten sein kann), und Zope Page Templates (ZPT). Der Unterschied zwischen DTML und ZPT ist dass DTML die Vermischung von Präsentation und Logik zulässt, ZPT dagegen nicht.
Um Anwendungen zu schreiben, gibt es in Zope drei Möglichkeiten: Document Template Markup Language (DTML), Python, und Perl, wobei Perl nur als Zusatz verfügbar ist. "Logic" ist jede Art von Programm, die keine Präsentation enthält, sondern etwa Objekte verändert, Nachrichten sendet, Bedingungen testet oder auf Ereignisse reagiert. Es wird hier zwischen Skript-Objekten und externen Methoden unterschieden. Beide enthalten Code der in Python geschrieben wurde, unterscheiden sich jedoch dadurch, dass externe Methoden nicht über das Zope Management Interface bearbeitet werden können und als Dateien im extensions-Verzeichnis abgelegt werden müssen. Dadurch werden sie nicht von Zopes Sicherheitsmechnismen beschränkt und können daher (bösartigen) Python-Code importieren und direkt auf Dateien im Dateisystem des Servers zugreifen.
Eine weitere Art von Logic-Objekten sind SQL-Methoden, in denen Datenbank-Abfragen gespeichert und ausgeführt werden können, um auf eine relationale Datenbank zuzugreifen.