Creating Web Based Surveys with Zope - An Open Source
Application Server

Web based surveys are
becoming more popular as an alternative to conventional surveys. A major
reason for this is cost. In Figure 1. we see that an Internet
based survey is always cheaper by a substantial margin:

Additional reasons for implementing a web-based survey include the speed
with which: 1) a survey can be created, 2) a survey can be distributed,
3) the data can be collected and put into a form which can be analyzed.
Furthermore, as survey data are collected, the survey can be modified if
problems arise during the survey process. Potential drawbacks with
internet surveys can involve biased survey responses if the population under
study is not representatively sampled via an internet medium.

Implementing a Web Survey

The typical approach to implementing a web survey will usually
involve a combination of HTML and CGI programming. This can
potentially involve a fairly substantial skill base: administering
a webserver, HTML programming skills, and Perl or Python
programming skills. Many web-based services exist in taking care
of the server administration functions and will even provide survey
creation tools for a fee (e.g.
survey monkey). In Table 1., a comparison of
the strengths and weaknesses of the different survey technologies is
provided:

In the subsequent portions of this article, we examine the use of an
open source web application server (Zope), and an open source Zope based
survey application (QSurvey), in providing HTML based survey
services here at the University of North Texas.

Zope

Zope is a web publishing system. It consists of an optional webserver, a middle layer which coordinates getting things into and out of
the database, and an object database. You can leave out the webserver
and run Zope behind Apache or IIS. Zope is designed to, and excels at,
publishing dynamic content. If you have a three page website, Zope is
overkill. If you have hundreds and thousands of pages, lots of users,
and impatient readers, Zope is a very good thing. Zope is also
open-source, which is crucial to its success. (Zope is actually an
acronym: it stands for Z Object Publishing Environment.) The programming
languages used to build Zope are Python and C. Most of Zope is written
in Python, and any bits where performance is crucial have been rewritten
in C. Zope has been described as Python's killer application; that is,
the one application that makes it well worth learning Python and which
best shows off the power of Python. In summary:

Zope (Z
Object Publishing Environment )

®Digital
Creations (1998) →
Zope Corporation. (2001)

®Originally
Used for Newspaper
Publishing

®Zope is
Based on Python; Cross-Platform

®Zope
uses an
Object-Oriented Web development Model

®Content,
Logic, & Presentation
are separated

Component Features

ZServer + Apache - Can be used alone or in conjunction with Apache

Through-the-Web Management - Zope Management Interface (ZMI)

Integrated Control: Undo, Security

ZODB + SQL Database Adaptor - Built in Object Database and API's
for Popular Databases

The QSurvey product is designed to make on-line surveys easy to
write. Instead of having first to develop the backend for the storage,
then adapt the questions to the storage available, this product allows
you to concentrate on the survey and its questions. Zope takes care of
the storage. The page-centric model with optional branching determines
at run-time which page to display next. If you need more than simple
questions, you may include DTML Document material interspersed with your
questions. This means that Images and other content are allowed inside a
QPage.

QSurvey features:

A page-oriented model, with the QSurvey holding QPages, and QPages
holding DTML Documents and Questions.

Multi-page interaction is possible with branching dependent on the
values of a multiple-choice question.

All Multiple-Choice are a single type. Select listbox, radio,
checkbox, formatting from a single "options" tab.

Ordering of things within a page from a management tab in the
QPage object.