Web Design & Development Guide
Zope management interface in a web browser window.
Zope is an open-source, object-oriented web application server written
in Python programming language. Zope stands for "Z Object Publishing
Environment." It can be almost fully managed with a web-based user interface.
Zope publishes on the web Python objects that are typically persisted in an
object database, ZODB. Basic object types, such as documents, images, and page templates, are
available for the user to create and manage through the web. Specialized object
types, such as wikis,
blogs, and photo
galleries, are available as third-party add-ons (called products), and there is
a thriving community of small businesses creating custom web applications as
There are two major generations of the software in use today. As of May 2007,
Zope 2.10.3 is the latest stable release of Zope 2 codebase, and Zope 3.3.1 is
the latest release of Zope 3. Zope is distributed under the terms of the Zope
Public License, a free software license.
The Zope Corporation was formed in 1995 in Fredericksburg, VA, as a joint
venture with InfiNet (a joint newspaper chain venture). The company developed a
classified advertisement engine for the Internet, then in 1997 became an
independently owned private company. At the behest of its largest investor,
Opticality Ventures, Zope Corporation released its software as free software,
concentrating on providing premier customization services. The company's
software engineers are led by CTO Jim Fulton. PythonLabs, creators of Python,
(foundation of Zope), became part of the company in the year 2000. Python
founder Guido van Rossum is no longer employed by Zope, however.
What is now known as Zope 2 started off with the merger of three separate
software products – Bobo, Document Template, and BoboPOS – into the Principia
application server. The authoring company, Digital Creations, open-sourced their
flagship product in 1998, influenced by their venture capitalist,
Hadar Pedhazur. This product was renamed "Zope" with this release.
In November 2004, Zope 3 was released. Zope 3 is a complete rewrite that only
preserves the original ZODB object database. The design of Zope 3 is driven by
the needs of large companies, the clients of Zope Corporation, for complex
business schemas. It is directly intended for enterprise web application
development using the newest development paradigms. Zope 3 is, however, not
compatible with Zope 2, so you cannot run Zope 2 applications on Zope 3.
Therefore, an effort (called Five) to merge the new Zope 3 paradigms into Zope 2
has been ongoing since Zope 2.8. Its aim is to allow developers to write
applications and libraries that run under both Zope 3 and Zope 2.
A Zope website is composed of objects in an object database as opposed to
files, as is usual with many other web server systems. This approach allows
users to harness the advantages of object technologies, such as encapsulation.
Zope maps URLs to objects using
the containment hierarchy of such objects; methods are considered to be
contained in their objects as well.
Zope comes with the Zope Object Database, which transparently persists
(Python) objects in a transactional database.
One particularly innovative feature of Zope is its widespread use of
acquisition. Acquisition is a technique parallel to class inheritance, in which
objects "inherit" behavior from their context in a composition hierarchy, as
opposed to their class in a class hierarchy. This allows certain ways to
structure source code that are otherwise harder to accomplish, and can encourage
application decomposition. A common use is in structuring the way layout
elements are used in a web page. Acquisition as implemented in Zope 2 is also
perceived as a source of bugs, as it enables many unexpected behaviours. The use
of acquisition has been severely narrowed in Zope 3.
Zope provides several mechanisms for HTML templating: Dynamic Template Markup
Language (DTML), and Zope Page Templates (ZPT). DTML is a tag-based language
which allows implementation of simple scripting in the templates. DTML has
provisions for variable inclusion, conditions, and loops. However, DTML has
major drawbacks: DTML tags interspersed with HTML form non-valid HTML documents,
and careless inclusion of logic into templates results in very unreadable code.
ZPT is a technology that fixes these shortcomings. ZPT templates can be either
well-formed XML documents or HTML documents, in which all special markup is
presented as attributes in the TAL (Template Attribute Language) namespace. ZPT
offers just a very limited set of tools for conditional inclusion and repetition
of XML elements, thus the templates are usually quite simple, with most logic
implemented in Python code. One significant advantage of ZPT templates is that
they can be edited in most graphical HTML editors. ZPT also offers direct
support for internationalization.
Zope 2 is the base behind the Nuxeo CPS, Plone, and Silva content management
systems, as well as the base behind ERP5 open source enterprise resource
planning. However, in late 2006 Nuxeo announced that
future versions of its CMS would be implemented in Java.
A new version of Zope, Zope 3, has been in development for some years. Zope 2
has proven itself as a useful framework for web applications development, but
its use revealed some shortcomings. To name a few, creating Zope 2 products
involves copying a lot of boilerplate code – "magic" code – that just has to be
there, and the built-in management interface is difficult to modify or replace.
Zope 3 is a rewrite of the software that attempts to address these shortcomings
while retaining the advantages of Zope that led to its popularity. Zope 3 is
based on a component architecture that makes it easy to mix software components
of various origins written in Python. The first production release of the new
software, Zope X3 3.0.0, was released on November 6, 2004. The current
production release, Zope 3.3.1, was released on January 14, 2007.
Five and the Future of Zope
Five project is a Zope 2 extension that allows usage of Zope 3 technologies
within Zope 2.
Originally released separately, Five has become an integral part of the main
line of Zope 2 development. Five 1.0 was integrated with Zope 2 starting with
Zope 2.8.0. Each successive Zope 2 release has integrated more of the features
of Zope 3.
The name Five is a bit of a joke: Zope 2 + Zope 3 = Five.
likely future scenario, proposed by Jim Fulton, Zope 3 may re-focus on
providing multiple independent infrastructure components, while Zope 2 and Five
would become one project focused on providing a web application server framework
(an ancillary goal is to reduce confusion about what exactly "Zope" is).
Zope Page Templates
As mentioned previously, Zope Page Templates are themselves XHTML documents
which means they can be viewed and edited using XHTML compliant tools (which is
a big benefit compared to other template languages used for web applications).
However, these page templates are not meant to be rendered as is. Instead they
are marked up with additional elements and attributes in special XML namespaces
(see below). This additional information is used to describe how the page
template should ultimately be processed.
Here are some basic examples. To conditionally include a particular element,
like a div element, simply add the tal:condition attribute to
the element as follows:
To control what appears inside an element, use the tal:content
attribute like this:
Finally, to introduce or replace values of attributes use the
tal:attributes attribute as follows: The power of python could also be
utilised to dynamically alter the href at runtime.
<a href="" tal:attributes="python: 'href http://someurl.com'">...</a>
Because Zope Page Templates are themselves XHTML not only can they be edited
using normal HTML editors but they can also be checked for XHTML compliance in
template form. As a result, you can be fairly confident that these templates
will be expanded into proper XHTML automatically.
This a very cursory explanation of Zope Page Templates. The behavior of Zope
Page Templates is almost completely described by a
template language, fixed on
TAL, TALES, and METAL specifications:
Template Attribute Language (TAL),
- Template Attribute Language Expression Syntax (TALES),
- Macro Expansion Template Attribute Language (METAL).
Open source content management systems
Version control systems
List of content management systems
List of content management frameworks
Document management system
Enterprise content management
Geospatial Content Management System