[z3-checkins] r12456 - in z3/deliverance/trunk: . doc examples examples/plonenet examples/plonenet/content examples/plonenet/content/tmp examples/plonenet/etc examples/plonenet/lib examples/plonenet/static examples/plonenet/static/ie7 examples/plonenet/static/ie7/compatibility examples/plonenet/static/ie7/compatibility/complexspiral examples/plonenet/static/ie7/src examples/plonenet/themes

paul at codespeak.net paul at codespeak.net
Wed May 18 18:42:31 CEST 2005


Author: paul
Date: Wed May 18 18:42:30 2005
New Revision: 12456

Added:
   z3/deliverance/trunk/
   z3/deliverance/trunk/INSTALL.txt
   z3/deliverance/trunk/README.txt
   z3/deliverance/trunk/doc/
   z3/deliverance/trunk/doc/INTRO.txt
   z3/deliverance/trunk/examples/
   z3/deliverance/trunk/examples/plonenet/
   z3/deliverance/trunk/examples/plonenet/content/
   z3/deliverance/trunk/examples/plonenet/content/compiled-plonenettheme.xml
   z3/deliverance/trunk/examples/plonenet/content/echo123.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/content/index.xsl   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/content/pfdata.sxc   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/content/plonenettheme.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/content/tmp/
   z3/deliverance/trunk/examples/plonenet/content/tmp/content.xml
   z3/deliverance/trunk/examples/plonenet/content/tmp/meta.xml
   z3/deliverance/trunk/examples/plonenet/content/tmp/pfdata-bak.sxc   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/content/tmp/pfdata.xml
   z3/deliverance/trunk/examples/plonenet/dvfilter.py
   z3/deliverance/trunk/examples/plonenet/dvhandler.py
   z3/deliverance/trunk/examples/plonenet/etc/
   z3/deliverance/trunk/examples/plonenet/etc/plonenet.conf
   z3/deliverance/trunk/examples/plonenet/etc/themerules.xml
   z3/deliverance/trunk/examples/plonenet/lib/
   z3/deliverance/trunk/examples/plonenet/lib/__init__.py
   z3/deliverance/trunk/examples/plonenet/lib/compiletheme.sh
   z3/deliverance/trunk/examples/plonenet/lib/plonenetlib.py
   z3/deliverance/trunk/examples/plonenet/lib/sxcfile.py
   z3/deliverance/trunk/examples/plonenet/lib/sxctransformer.xsl
   z3/deliverance/trunk/examples/plonenet/lib/themecompiler.xsl
   z3/deliverance/trunk/examples/plonenet/lib/themeinputdoc.xsl
   z3/deliverance/trunk/examples/plonenet/static/
   z3/deliverance/trunk/examples/plonenet/static/ie7/
   z3/deliverance/trunk/examples/plonenet/static/ie7/README.txt   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/blank.gif   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/Pure CSS Menus (nearly).html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/Pure CSS Menus.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/abbr.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/active.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/active.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/active.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/adjacent.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/adjacent.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/adjacent.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/after.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr-begin.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr-contains.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr-dash-list.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr-dash-list.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr-dash-list.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr-end.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr-list.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr-list.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr-list.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr-value.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr-value.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr-value.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/attr.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/background-fixed.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/before.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/blue.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/bluething.jpg   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/bluething_fade.jpg   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/bottom-left.gif   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/bottom-right.gif   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/box-sizing.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/button.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/child.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/child.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/child.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/comment-bug.htm   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/bigben-bg.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/demo.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/demo2.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/flower-bg.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/glassy-bg.jpg   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/glassy-gray.jpg   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/glassy-ripple.jpg   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/glassy-tan.jpg   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/glassy.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/halfscr-black.gif   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/halfscr-blue.gif   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/halfscr-white.gif   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/lightning-bg.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/shell-bg.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/shell-bg.jpg   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/shell-blue.jpg   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/shell-fade.jpg   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/shell-wash.jpg   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/shell2-bg.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/complexspiral/shuttle-bg.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/content.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/empty.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/empty.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/empty.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/first-child.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/first-child.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/first-child.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/fixed.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/float.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/focus.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/focus.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/focus.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/form.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/green.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/horizontal-gauge.gif   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/hover.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/hover.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/hover.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/ie7-demo.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/imports.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/imports.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/indirect.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/indirect.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/indirect.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/label.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/lang.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/last-child.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/last-child.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/last-child.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/left-right.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/max-width.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/min-height.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/min-width.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/multiple-classes-bug.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/multiple-classes.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/multiple-classes.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/multiple-classes.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/multiple-pseudo-classes.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/nth-child.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/nth-last-child.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/only-child.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/png-background.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/png.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/png.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/png.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/purple_stucco.jpg   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/red.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/root.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/root.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/root.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/suite.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/super-dynamic.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/super.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/super.xml   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/test.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/top-bottom.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/top-left.gif   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/top-right.gif   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/tukan-trans.png   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/unscrollable.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/compatibility/vertical-gauge.gif   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/configure.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-box-model.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-content.htm   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-core.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-css-strict.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-css2.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-css3.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-fixed.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-html4.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-ie5.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-lite-p.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-lite.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-logo.gif   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-png.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-server.css   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-standard-p.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7-standard.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/ie7.gif   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/index.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/install.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/license   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/src/
   z3/deliverance/trunk/examples/plonenet/static/ie7/src/ie7-box-model.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/src/ie7-content.htm   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/src/ie7-core.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/src/ie7-css-strict.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/src/ie7-css2.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/src/ie7-css3.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/src/ie7-fixed.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/src/ie7-html4.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/src/ie7-ie5.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/src/ie7-lite.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/src/ie7-png.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/src/ie7-standard.js   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/test-trans.png   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/test.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/ie7/usage.html   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/static/plonenet.css
   z3/deliverance/trunk/examples/plonenet/static/site_icon.gif   (contents, props changed)
   z3/deliverance/trunk/examples/plonenet/themes/
Log:
First checkin of a working, documented setup

Added: z3/deliverance/trunk/INSTALL.txt
==============================================================================
--- (empty file)
+++ z3/deliverance/trunk/INSTALL.txt	Wed May 18 18:42:30 2005
@@ -0,0 +1,69 @@
+======================
+Setting up Deliverance
+======================
+
+The whole idea of Deliverance is that it *shouldn't* be a system.
+It's just a thin approach that leverages some serious work being done
+by others.  In this case, Deliverance gets most of its value from:
+
+  o Apache.  Don't fight it, love it!  Yeh, baby!
+
+  o mod_python for both handlers and filters.
+
+  o lxml and thus libxml2/libxslt.  This is 90% of the value
+  proposition.
+
+mod_python
+----------
+
+1) Grab mod_python.
+
+2) Make sure you can do this:
+
+  http://www.modpython.org/live/current/doc-html/inst-testing.html
+
+3) Make sure Apache can read/write to the Deliverance examples directory.
+
+
+lxml
+-----
+
+1) Get 0.6 or later of lxml:
+
+  http://codespeak.net/lxml
+
+2) Make sure you can run some of the tests.
+
+3) Make sure you install it using the same Python used in mod_python.
+   To confirm, put:
+
+  import lxml.etree
+
+...in the mptest.py module used in the mod_python Testing example.
+
+
+Deliverance
+-----------
+
+1) Put a line like this:
+
+   Include /Users/paul/projects/deliverance/examples/plonenet/etc/plonenet.conf
+
+...in your Apache http.conf file.
+
+2) Edit that plonenet.conf file:
+
+  a. Change the Alias and Location lines to something meaningful.
+
+  b. Makes sure the LoadModule points at the right mod_python.
+
+  c. Fix the PythonPath line.
+
+3) Restart Apache.
+
+4) Go to the URL you put for the Location in the conf file and add
+   "/echo123" on the URL.
+
+You should see the sample file (content/echo123.xml) with the plonenet
+theme.  If not, check the Apache error log for details.  Possibly the
+web page will return a useful error message.

Added: z3/deliverance/trunk/README.txt
==============================================================================
--- (empty file)
+++ z3/deliverance/trunk/README.txt	Wed May 18 18:42:30 2005
@@ -0,0 +1,15 @@
+==============================
+Deliverance
+==============================
+Content deliver for CMS systems
+------------------------------
+
+This is a package for doing content delivery of semi-static CMS
+content using mod_python and lxml.
+
+Background information is available in the doc directory.
+
+Installation instructions are in INSTALL.txt.
+
+Paul Everitt
+paul at zope-europe.org

Added: z3/deliverance/trunk/doc/INTRO.txt
==============================================================================
--- (empty file)
+++ z3/deliverance/trunk/doc/INTRO.txt	Wed May 18 18:42:30 2005
@@ -0,0 +1,330 @@
+==============================
+Deliverance
+==============================
+Content deliver for CMS systems
+------------------------------
+
+*Note: Work in progress.  Some of the ideas, particulary the content
+ map, are in flux.*
+
+CMS systems, particularly in Zope, excel at the structured environment
+of content *production*.  This area places a strong emphasis on
+security, workflow, metadata, and other content services.
+
+For content *delivery* on public sites, though, some of this machinery
+is overkill.  The framework for content production has a nasty side
+effect of killing performance for content delivery, making reliability
+and debugging a challenge, and forcing other audiences (like web
+designers in charge of look-and-feel) to learn another way to do
+things.
+
+For this reason, many ECM packages make a formal distinction between
+content production and content delivery.
+
+Deliverance is a lightweight, semi-static system for content delivery
+of CMS resources.  It runs in mod_python, generating branded pages and
+navigation elements, giving high-performance throughput to anonymous
+visitors.  Its primary benefits:
+
+  o High performance
+
+  o Simple re-branding
+
+  o Trusted stack
+
+  o Extreme productivity
+
+It is focused on audiencces that want:
+
+  o Predictable delivery to anonymous visitors
+
+  o Some portion of an airgap (logical/physical) between the CMS and
+  the live site
+
+  o Integration with mainstream systems and technologies
+
+This document discusses how the system works, then revisits the
+benefits in detail.
+
+Overview
+---------
+
+Deliverance has two major parts:
+
+  o *Themes*.  These apply a consistent look-and-feel to content that
+  streams through Apache.  This content can be on the filesystem, in
+  Zope with mod_proxy, or using the other part of Deliverance.  In a
+  nutshell, a theme is an HTML file (plus the CSS, images, etc.)
+  containing boxes that get filled by content.
+
+  o *Content maps*.  A description of the content on a site, including
+  metadata and different organization schemes.  The content map also
+  has views that, inside Deliverance, can generate HTML for navigation
+  and other purposes.
+
+Each of these can be used without the other.
+
+
+How It Works
+-----------
+
+In a nutshell, Deliverance gets an XML map describing all the
+published content at a point in time.  It uses this map to draw
+navigation elements and issue HTTP requests for content of single
+resources.  Finally, a "theme" provides the HTML to return with named
+boxes to be filled by rules.
+
+Let's first introduce some major concepts, then walk a request through
+from start to finish, using these concepts.
+
+1) *Theme*.  Web designers don't want to learn anything new.  ZPT
+tried to embrace this, but by the time the ZPT developer has injected
+all the tal and refactored everything into macros, the web designer
+can't possible continue.
+
+A theme is the corporate identity for a site.  It is *not* a template,
+as it has zero stuff in it beyond HTML.
+
+A theme is created by saving the customer's home page and identifying
+the boxes to be replaced.  For example, <div id="sitemenu"> identifies
+a place where a generated menu should go.  Web designers are familiar
+with this, as CSS uses such selectors to apply style.
+
+Deliverance has a ruleset that does the merge between the theme file
+and the generated content.  In essense, this rule file says: "Find
+'site-menu' in the theme and replace its children with the generated
+contents with an id of 'generated-menu'."
+
+The ruleset is under the control of the integrator, who bridges the
+gap between what the CMS provides and what the UI designer makes
+available.  This is done, though, without touching anything on either
+side of the equation.
+
+This allows the theme to be applied to all pages, without touching the
+pages.  The theme engine uses XSLT (via lxml) to perform the merge.
+
+2) *Map*.  By design, content delivery is separated from content
+management.  In fact, this separation acts as insulation.  At various
+intervals, the CMS makes an "edition" or a snapshot of its contents,
+providing a map with metadata for all the contents that should be
+visible.  (In fact, the map could point at a certain *version* of a
+resource that should be visible.)
+
+This map is read by mod_python using lxml.  It serves two functions:
+
+a. *Navigation elements*.  We can draw site menus and trees without
+visiting the server.  Since these can be done in XSLT, not only is the
+performance very good, but we can draw many other kinds of pages.  For
+example, we can show all the contents modified in the last week, or
+all the contents in France.
+
+b. *Resource lookup*.  The map controls how an incoming, virtual URL
+gets mapped to a real resource.  This means the URL space can be
+placeless.  Content can appear in multiple places.  Equally, content
+from multiple CMSs, even multiple remote hosts, can be integrated into
+the same map.
+
+The identifier used for retrieving the content for the resource can be
+a normal GET or a more complicated QUERY_STRING or even xml-rpc kind
+of lookup.
+
+Note that the contents for many CMS resources are, in fact, very small
+amounts of data.  They could be cached inline in the content map and
+not looked up.  For frequent pages, this would provide a big win.
+
+Finally, some resources in the map might be virtual, meaning the page
+can be fully rendered in Deliverance.  For example, a URL to show all
+the content with the keyword of "CPS" can be serviced without a trip
+to the server.  All that is needed is an XSLT rule for generation.
+(Later, the XSLT could be eliminated with a Python extension function
+in lxml.)
+
+3) *Compilation*.  The goal is high performance.  There are certain
+aspects that never change between requests:
+
+a. The contents of the map.
+
+b. The theme and the rule file for merging.
+
+c. Site configuration, such as site menus.
+
+It makes no sense to re-parse DOMs and stylesheets on each request.
+Equally, it makes no sense to have a multi-stage pipeline when several
+parts never change.
+
+Deliverance gets a tremendous speedup by compiling the theme into a
+stylesheet.  It reads the XHTML file for the theme, identifies the
+nodes to be replaced, and generates an XSTL with xsl:value-of and
+xsl:apply-template statements in the right location.  Compilation also
+inlines the map data into the XSLT so it doesn't have to included
+later.
+
+Compilation thus gives two benefits:
+
+a.  You can re-brand stuff without learning XSLT and without touching
+the HTML of the theme file.
+
+b. Most of the work needed for per-request transformations is done on
+startup.  Specifically, we avoid the 50ms hit that the "identity
+transformation" pattern seemed to give.
+
+4) *Retrieval*.  mod_python has a Bobo-inspired publisher that walks
+the URL, traversing Python objects using a set of rules.
+
+Deliverance has a similar idea.  The URL provides an identifier into
+the map file to retrieve a map item.  The map item then gives
+instructions on how to find the content for the page and how to render
+it.
+
+In most cases, some Python code will be issued to retrieve a page from
+the CMS.  For this, a very stripped-down skin will be used in the CMS,
+or perhaps no skin at all.  For example, the URL in the map file might
+request the DAV view of the resource, thus giving just the data.  For
+CMF-based systems, this is a 10x speedup.
+
+In other cases, the map might point to a virtual page, as discussed
+above.
+
+The mapping provides some interesting possibilities for integration.
+First, Deliverance could leverage Apache's infrastructure for
+retrieval and caching.  Second, libxml2 has several Python extension
+facilities (XPath functions, custom resolvers) that allow the map to
+act as an integration facility.  Simply put some metadata on a map
+entry to make it look like a resource, with the actual retrieval being
+done with custom code.
+
+5) *Generation*.  Deliverance does not have a parser of any kind.  It
+uses XSLT to generate HTML.  As noted above, for important parts of
+usage, no XSLT knowledge is required.
+
+Using XSLT gives some benefits:
+
+  o Extremely optimized.
+
+  o Extremely documented.
+
+  o Rich tool chain.
+
+  o Maintenance burden belongs to others.
+
+XSLT has a negative reputation.  Thus, Deliverance works hard to allow
+people to avoid using it, except when they need something custom.  For
+example, navigation boxes don't have to be generated by XSLT, they
+could be in the HTML lookup up by the CMS and inserted into the theme.
+
+A Typical Request
+---------------
+
+With that background, how does Deliverance work, end-to-end?  The
+following section starts with an Apache restart, finishing with the
+last byte returned to the browser.
+
+*Note: This describes how things will be, not how they currently are.
+ lxml needs some more work for a couple of things mentioned herein.*
+
+First, Apache is started.  In the conf file, there is a section that
+maps part of the URL space to a mod_python handler.  This handler is
+part of Deliverance.
+
+When the handler module is imported, it performs some one-time
+optimizations on startup:
+
+a. Read the map file, the theme's XHTML, and the site configuration
+into XML DOMs.
+
+b. Read the "blank-compilerdoc" and the compiler stylesheet into a DOM
+and a processor, respectively.
+
+c. Merge everything from (a) into the blank-compilerdoc (later
+replaced by XInclude).
+
+d. Create a compiled theme processor by applying the compiler
+stylesheet against the blank-compilerdoc.  The output is, in fact,
+another XSLT stylesheet.  Namely, it is a "compiled" stylesheet, ready
+to be applied to each incoming request while doing the least amount of
+work needed.
+
+When a request comes in, Apache passes it off to the Python handler
+function in Deliverance.  The handler takes the relevant part of the
+URI and does an XPath lookup in the map, grabbing the node referenced
+by this URI fragment.  This map node contains instructions for the
+next two steps:
+
+  o Retrieve the contents.
+
+  o Format the contents.
+
+The handler then retrieves the X(H)TML for the contents and applies
+the compiled stylesheet.  The compiled stylesheet has a rule for
+handling anything unique about that resource type.
+
+The results are serialized and returned.
+
+Performance
+-----------
+
+Since much of the information needed for rendering a requests is
+statically contained in a specially-tuned, in-memory DOM, performance
+automatically gets a boost.  (This would be the same in Zope.)
+
+The use of XSLT, especially compiled into a well-tuned state, gives
+another big performance win.  Many operations, such as drawing a tree
+or site map, fit the XSLT pattern better than ZPT.  Also, libxslt is a
+much more actively developed project, used by 1,000x the number of
+people, than ZPT.
+
+Memory usage is likely to be an issue.  A content map with 400,000
+entries could occupy 150 Mb of real memory.  However:
+
+  o Few sites have 400,000 public resources.
+
+  o Those that do can afford a gigabyte of RAM.
+
+For requests that don't require a trip to the CMS, 130 requests/sec
+should be expected.
+
+Productivity
+-----------
+
+You can speed up a computer by buying a bigger box.  How do you speed
+up a programmer?  Unfortunately, Zope has accumulated layers and layer
+of idiosyncratic frameworks.  Some of this is hidden from the
+integrator and web designer, but some of it peeks through.
+
+Deliverance is a massive increase in UI productivity.  First and
+foremost, the entire UI can be developed outside of the CMS, using
+static models on disk.  As long as the CMS returns XML that looks the
+same as the sample documents and sample content map, everything should
+just work.
+
+Second, this approach gives multiple tools in the toolchain.  I like
+using Oxygen, a cheap but amazing XML/XSLT authoring environment.  I
+can edit the dynamic UI with files on disk, press a button, and see
+what it will look like when rendered.  If there is an error, I get a
+useful (non-ZPT!) error message, with the cursor sitting on the
+offending line.  I even get a stepwise debugger, where I can watch the
+output get rendered and set a breakpoint to see the evaluation
+context.
+
+Alternatively, someone can run an xsltproc command like this:
+
+xsltproc compiler.xsl blank-compiled.xml | xsltproc - ../tests/sampledoc1.xml
+
+...and see what the page will look like.  Finally, the simple Python
+scripts in Deliverance can be run from the command line to process
+real output in the map.  Each part of the process can be inspected to
+find the offending problem.
+
+More generally, the XML+XSLT approach is fundamentally easier.  In
+ZPT, the data model is exposed via baroque, undocumented APIs
+appearing in TAL expressions.  In XML, you just look at the file and
+visually see the data model.  XPath gives a wonderful, simple, but
+powerful way to manipulate the data model.  And although XSLT is
+baroque, so is the messy pile of deconstructed macros and slots
+appearing ad-hoc in most large-scale Zope apps.
+
+This approach gives other kinds of productivity.  For example, there
+are tons of books, and Google has an answer to every question you
+might have.  Why?  Because the installed base of XML and XSLT is four
+orders of magnitude higher than Zope+CMF+ZPT+[CPS/Plone/Silva].
+

Added: z3/deliverance/trunk/examples/plonenet/content/compiled-plonenettheme.xml
==============================================================================
--- (empty file)
+++ z3/deliverance/trunk/examples/plonenet/content/compiled-plonenettheme.xml	Wed May 18 18:42:30 2005
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output indent="yes" method="html"/>
+  <themerules xmlns="http://www.zope.org/deliverance" xml:base="../etc/themerules.xml">
+    <rule docxpath="/html:html/html:head/html:title/text()" themeid="title"/>
+    <rule docxpath="/html:html/html:head/html:title/text()" themeid="page-heading"/>
+    <rule docxpath="/html:html/html:body//html:div[@id='content-body']/*" themeid="content-body"/>
+  </themerules>
+  <xsl:template match="/">
+    <html xml:lang="en" lang="en" xml:base="../content/plonenettheme.xml">
+      <head>
+        <title id="title">
+          <xsl:copy-of select="/html:html/html:head/html:title/text()"/>
+        </title>
+<!-- compliance patch for microsoft browsers -->
+        <script src="/staticplone.net/ie7/ie7-standard.js" type="text/javascript">//</script>
+        <link type="text/css" rel="stylesheet" href="/staticplone.net/plonenet.css"/>
+      </head>
+      <body>
+        <div id="header">
+          <div id="masthead">
+            <img src="/staticplone.net/site_icon.gif" alt="menu"/>
+            <span id="page-heading">
+              <xsl:copy-of select="/html:html/html:head/html:title/text()"/>
+            </span>
+          </div>
+          <div id="menu">
+            <a href="/plone.net/index">home</a>
+            <a href="/plone.net/providers">providers</a>
+            <a href="/plone.net/casestudies">case studies</a>
+            <a href="/plone.net/links">links</a>
+            <a href="/plone.net/about">about</a>
+          </div>
+        </div>
+        <div id="content-body">
+          <xsl:copy-of select="/html:html/html:body//html:div[@id='content-body']/*"/>
+        </div>
+      </body>
+    </html>
+  </xsl:template>
+</xsl:stylesheet>

Added: z3/deliverance/trunk/examples/plonenet/content/echo123.xml
==============================================================================
--- (empty file)
+++ z3/deliverance/trunk/examples/plonenet/content/echo123.xml	Wed May 18 18:42:30 2005
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <title>plone.net Sample Site</title>
+    </head>
+    <body>
+        <div id="content-body">
+            <h1>echo123 Sample Document</h1>
+            <p>This is a test document to be used as input to test the 
+            theme filter for <em>Deliverance</em>.</p>
+        </div>
+    </body>
+</html>
\ No newline at end of file

Added: z3/deliverance/trunk/examples/plonenet/content/index.xsl
==============================================================================
--- (empty file)
+++ z3/deliverance/trunk/examples/plonenet/content/index.xsl	Wed May 18 18:42:30 2005
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta"
+    xmlns:office="http://openoffice.org/2000/office">
+    <xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.1//EN"
+        doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"/>
+    <xsl:variable name="viewname">providers</xsl:variable>
+    <xsl:variable name="viewarg">bycountry</xsl:variable>
+    <xsl:template match="/">
+        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+            <head>
+                <title>
+                    <xsl:value-of select="/workbook/office:meta/dc:title"/>
+                </title>
+            </head>
+            <body>
+                <div>
+                    <span id="page-heading">
+                        <xsl:value-of select="/workbook/office:meta/dc:title"/>
+                    </span>
+                </div>
+                <div id="content-body">
+                    <xsl:apply-templates select="workbook" mode="about"/>
+                </div>
+            </body>
+        </html>
+    </xsl:template>
+    <xsl:template match="workbook" mode="index">
+        <div id="news">
+            <h2>News</h2>
+            <ul>
+                <xsl:for-each select="tables/table[@id='News']/data/row">
+                    <li title="{cell[4]}">
+                        <xsl:value-of select="cell[3]"/>
+                    </li>
+                </xsl:for-each>
+            </ul>
+        </div>
+        <p>plone.net is some static information collects all the business information for Plone into a well-organized,
+            professional resource for decision-makers.</p>
+        <p>This Plone Foundation website ...</p>
+    </xsl:template>
+    <xsl:template match="workbook" mode="todo">
+        <h2>To Do Items</h2>
+        <xsl:for-each select="tables/table[@id='Todo']/data/row">
+            <div><xsl:value-of select="cell[2]"/></div>
+        </xsl:for-each>
+    </xsl:template>
+    <xsl:template match="workbook" mode="about">
+        <h2>About plone.net</h2>
+    </xsl:template>
+    <xsl:template match="workbook" mode="providers">
+        <xsl:choose>
+            <xsl:when test="$viewarg='bycountry'">
+                <h3>Providers sorted by country</h3>
+                <div>(sort <a href="/plone.net/providers">by company name</a>)</div>
+                <xsl:apply-templates select="tables/table[@id='Companies']/data/row" mode="provider">
+                    <xsl:sort select="cell[5]"/>
+                </xsl:apply-templates>
+            </xsl:when>
+            <xsl:otherwise>
+                <h3>Providers sorted alphabetically</h3>
+                <div>(sort <a href="/plone.net/providers/bycountry">by country</a>)</div>
+                <xsl:apply-templates select="tables/table[@id='Companies']/data/row" mode="provider"
+                />
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+    <xsl:template match="row" mode="provider">
+        <div class="provider">
+            <xsl:if test="cell[8]">
+                <!--<img src="{cell[8]}" alt="{cell[2]}"/>-->
+            </xsl:if>
+            <h4>
+                <xsl:value-of select="cell[2]"/>
+            </h4>
+            <div>Country: <xsl:value-of select="cell[5]"/>
+            </div>
+            <div>
+                <xsl:value-of select="cell[3]"/>
+            </div>
+        </div>
+    </xsl:template>
+    <xsl:template match="workbook" mode="casestudies">
+        <h2>Case Studies</h2>
+    </xsl:template>
+    <xsl:template match="workbook" mode="links">
+        <h2>Links</h2>
+    </xsl:template>
+    <xsl:template match="table">
+        <table>
+            <tr>
+                <xsl:for-each select="columns/column">
+                    <th>
+                        <xsl:value-of select="."/>
+                    </th>
+                </xsl:for-each>
+            </tr>
+            <xsl:for-each select="data/row">
+                <tr>
+                    <xsl:for-each select="cell">
+                        <td>
+                            <xsl:if test=".">
+                                <xsl:value-of select="."/>
+                            </xsl:if>
+                        </td>
+                    </xsl:for-each>
+                </tr>
+            </xsl:for-each>
+        </table>
+    </xsl:template>
+</xsl:stylesheet>

Added: z3/deliverance/trunk/examples/plonenet/content/pfdata.sxc
==============================================================================
Binary file. No diff available.

Added: z3/deliverance/trunk/examples/plonenet/content/plonenettheme.xml
==============================================================================
--- (empty file)
+++ z3/deliverance/trunk/examples/plonenet/content/plonenettheme.xml	Wed May 18 18:42:30 2005
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title id="title">plone.net Sample Title</title>
+        <!-- compliance patch for microsoft browsers -->
+        <script src="/staticplone.net/ie7/ie7-standard.js" type="text/javascript">//</script>
+        <link type="text/css" rel="stylesheet" href="/staticplone.net/plonenet.css"/>
+    </head>
+    <body>
+        <div id="header">
+            <div id="masthead">
+                <img src="/staticplone.net/site_icon.gif" alt="menu"/>
+                <span id="page-heading">
+                    This is a sample page heading.  It will be replaced.
+                </span>
+            </div>
+            <div id="menu">
+                <a href="/plone.net/index">home</a>
+                <a href="/plone.net/providers">providers</a>
+                <a href="/plone.net/casestudies">case studies</a>
+                <a href="/plone.net/links">links</a>
+                <a href="/plone.net/about">about</a>
+            </div>
+        </div>
+        <div id="content-body">
+            <p>This is sample content.  It will be replaced.</p>
+        </div>
+    </body>
+</html>

Added: z3/deliverance/trunk/examples/plonenet/content/tmp/content.xml
==============================================================================
--- (empty file)
+++ z3/deliverance/trunk/examples/plonenet/content/tmp/content.xml	Wed May 18 18:42:30 2005
@@ -0,0 +1,1925 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document-content xmlns:office="http://openoffice.org/2000/office"
+    xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text"
+    xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing"
+    xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink"
+    xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg"
+    xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d"
+    xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form"
+    xmlns:script="http://openoffice.org/2000/script" office:class="spreadsheet" office:version="1.0">
+    <office:script/>
+    <office:font-decls>
+        <style:font-decl style:name="Arial1" fo:font-family="Arial" style:font-pitch="variable"/>
+        <style:font-decl style:name="Lucida Grande"
+            fo:font-family="&apos;Lucida Grande&apos;" style:font-pitch="variable"/>
+        <style:font-decl style:name="Arial" fo:font-family="Arial" style:font-family-generic="swiss"
+            style:font-pitch="variable"/>
+    </office:font-decls>
+    <office:automatic-styles>
+        <style:style style:name="co1" style:family="table-column">
+            <style:properties fo:break-before="auto" style:column-width="1.0484inch"/>
+        </style:style>
+        <style:style style:name="co2" style:family="table-column">
+            <style:properties fo:break-before="auto" style:column-width="2.011inch"/>
+        </style:style>
+        <style:style style:name="co3" style:family="table-column">
+            <style:properties fo:break-before="auto" style:column-width="0.8925inch"/>
+        </style:style>
+        <style:style style:name="co4" style:family="table-column">
+            <style:properties fo:break-before="auto" style:column-width="1.7839inch"/>
+        </style:style>
+        <style:style style:name="co5" style:family="table-column">
+            <style:properties fo:break-before="auto" style:column-width="1.4382inch"/>
+        </style:style>
+        <style:style style:name="co6" style:family="table-column">
+            <style:properties fo:break-before="auto" style:column-width="2.5409inch"/>
+        </style:style>
+        <style:style style:name="co7" style:family="table-column">
+            <style:properties fo:break-before="auto" style:column-width="2.339inch"/>
+        </style:style>
+        <style:style style:name="co8" style:family="table-column">
+            <style:properties fo:break-before="auto" style:column-width="2.5543inch"/>
+        </style:style>
+        <style:style style:name="ro1" style:family="table-row">
+            <style:properties style:row-height="0.1783inch" fo:break-before="auto"
+                style:use-optimal-row-height="true"/>
+        </style:style>
+        <style:style style:name="ro2" style:family="table-row">
+            <style:properties style:row-height="0.1862inch" fo:break-before="auto"
+                style:use-optimal-row-height="true"/>
+        </style:style>
+        <style:style style:name="ta1" style:family="table" style:master-page-name="Default">
+            <style:properties table:display="true"/>
+        </style:style>
+        <style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default">
+            <style:properties fo:border="none"/>
+        </style:style>
+    </office:automatic-styles>
+    <office:body>
+        <table:table table:name="Companies" table:style-name="ta1">
+            <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
+            <table:table-column table:style-name="co2" table:default-cell-style-name="Default"/>
+            <table:table-column table:style-name="co3" table:default-cell-style-name="Default"/>
+            <table:table-column table:style-name="co4" table:default-cell-style-name="Default"/>
+            <table:table-column table:style-name="co3" table:default-cell-style-name="Default"/>
+            <table:table-column table:style-name="co5" table:default-cell-style-name="Default"/>
+            <table:table-column table:style-name="co3" table:number-columns-repeated="5"
+                table:default-cell-style-name="Default"/>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>id</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>title</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>description</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>contactName</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>country</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>contactEmail</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>url</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>logo</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>industry</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>rating</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>isSponsor</text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro2">
+                <table:table-cell table:number-columns-repeated="2">
+                    <text:p>Enfold</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>A US-based</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Alan Runyan</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>US</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="2" table:value-type="float"
+                    table:value="1">
+                    <text:p>1</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="4"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro2">
+                <table:table-cell>
+                    <text:p>Psol</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Plone Solutions</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Norwegian-based</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Alex Limi</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>NO</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="2"/>
+                <table:table-cell>
+                    <text:p>http://www.plonesolutions.com/logo.jpg</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="2"/>
+                <table:table-cell table:value-type="float" table:value="1">
+                    <text:p>1</text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro2">
+                <table:table-cell>
+                    <text:p>Struktur</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Struktur</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Stuttgart</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Niels Mache</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>DE</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Myemail</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Myurl</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Myindustry</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>1</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Ingeniweb</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Ingeniweb</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Olivier Deckmyn</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>FR</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Objectreamls</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>ObjectRealms</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Ben Saller</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>US</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Bd</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>BlueDynamics</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Robert Boulanger</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>AT</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Netalley</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>NetAlley Networks</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Michael Zeltner</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>UK</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Zopechina</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>ZopeChina Corporation</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell table:style-name="ce1">
+                    <text:p>Junyong Pan</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>China</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Telesis</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Telesis</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Jodok Batlogg</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>AT</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Bubblenet</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Bubblenet</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Godefroid Chapelle</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>BE</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Redchor</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Redchor</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Robert Rotterman</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>CH</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Pilot</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Pilot Systems</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>David Sapiro</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>FR</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Getfrank</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>GetFrank</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Seb Potter</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>UK</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell table:number-columns-repeated="2">
+                    <text:p>4teamwork</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Bernhard Buhlmann</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>CH</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Upfront</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Upfront Systems</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Joris Goudriaan</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>ZA</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Reflab</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Reflab</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Francesco Ciriaci</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>IT</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Zea</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Zope Europe Association</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Paul Everitt</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>BE</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Zopejapan</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Zope Japan</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Takeshi Yamamoto</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>JA</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Gocept</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Gocept</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Christian Theune</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>DE</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Netsight</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Netsight</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Matt Hamilton</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>UK</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Zest</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Zest Software</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Jean-Paul Ladage</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>NL</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Headnet</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Headnet Aps</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Sune Toft</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>DK</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Zopyx</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>ZOPYX</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Andreas Jung</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>DE</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Ca</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Computer Associates</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Marcel den Hartog</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>US</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Tyrell</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Tyrell Software</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Mark Murphy</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>US</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Klein</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Klein &amp; Partner KEG</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Jens Klein</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>DE</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Zeta</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Zeta Design and Development</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Chad Whitacre</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>US</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Csquared</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>C Squared Technologies</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Donna Snow</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="7"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Comloung</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>COM.lounge GbR</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Christian Heimes</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>DE</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Cignex</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>CIGNEX</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Amit Babaria</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>US</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Sixfeet</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Six Feet Up</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Calvin Hendryx-Parker</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="7"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Suveg</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>SUVEG IT</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Gabor Suveg</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="7"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Tomcom</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Tomcom GmbH</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Thomas Zeleny</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="7"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Quinta</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Quintagroup</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Myroslav Opyr</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="7"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Roepcke</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Roepcke Computing Solutions</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Jim Roepcke</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>US</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Weimar</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Weimar Consultoria</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Fabiano Weimar dos Santos</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="7"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Exoweb</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Exoweb</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Fernando Martins</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="7"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Pn</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Porter Novelli</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Barry Reicherter</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>US</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Refactor</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Refactor</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Leonard Norrgard</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="7"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Ldr</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>LDR informatics</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Laurence Rowe</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="7"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Svhs</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Systemvaruhuset</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Sasha Vincic</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="7"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Eis</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Extreme internet solutions</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Andrew Mleczko</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Poland</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Etria</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Etria, LLP</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Tom von Schwerdtner</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>US</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Simplistix</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Simplistix Ltd</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Chris Withers</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>UK</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Redomino</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Redomino</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Giuseppe Masili</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>IT</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Sagewerks</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Sagewerks Marketing Ltd.</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Andrew Coates</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>CA</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Spri</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>SPR Inc.</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Ken Wasetis</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="7"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Abstractedge</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Abstract Edge</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Scott Paley</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>US</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Nba</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>NB&amp;A srl</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Aldo Bergamini</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="7"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Faith</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Faith Online Ltd.</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Gerry Kirk</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="7"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Atreal</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Atreal</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Thierry Benita</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>FR</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Bmc</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>BMC</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Ricardo Mendes</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Portugal</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Eduplone</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>EduPlone</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Georg Pleger</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>AT</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Keysol</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Key Solutions</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Mikhail Kashkin</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>RU</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Aixtra</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>AixtraWare</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Joachim Schmitz</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>DE</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Sw</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Solution Workshops</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Russ Ferriday</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="7"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Acsr</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>ACSR industrialdesign</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Armin Stross-Radschinski</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>DE</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Mahiti</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Mahiti</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Sunil Abraham</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>India</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Noiza</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Noiza</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Enzo Cesanelli</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Italy</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Zeomega</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Zeomega</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Rangaswamy Sathya</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>US</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Openweb</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>OpenWeb Systems</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Mike Mathias</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>UK</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Arche</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>ARCHE AG</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Thorsten Harms</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>DE</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Binaryp</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>binaryPeople</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Gidon Friedman</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>CH</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Serpro</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>SERPRO</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Giuseppe Romagnoli</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>BR</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Starsky</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Starsky Consultants Ltd</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Ragnar Heil</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>DE</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell table:number-columns-repeated="2">
+                    <text:p>Amaze</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Ivo van der Wijk</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>NL</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Seventech</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>7 Tech Northwest</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Richard Amerman</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>US</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Lp</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Logical Progression Ltd</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Andrew Veitch</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>UK</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell table:number-columns-repeated="2">
+                    <text:p>Pareto</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Jan Murre</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>NL</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Zetwork</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>Zetwork</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Jens Vagelpohl</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>DE</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Bf</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>BlueFountain</text:p>
+                </table:table-cell>
+                <table:table-cell/>
+                <table:table-cell>
+                    <text:p>Aidan McGuire</text:p>
+                </table:table-cell>
+                <table:table-cell>
+                    <text:p>UK</text:p>
+                </table:table-cell>
+                <table:table-cell table:number-columns-repeated="6"/>
+            </table:table-row>
+        </table:table>
+        <table:table table:name="People" table:style-name="ta1">
+            <table:table-column table:style-name="co6" table:default-cell-style-name="ce1"/>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>alan runyan </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Alexander Limi </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Christian Heimes </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Sidnei da Silva </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Stefan H. Holek </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Simon Eisenmann </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Geoff Davis </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Helge Tesdal </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>P.-J. Grizel </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Andy McKay </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Daniel Nouri </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Lalo Martins </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Benjamin Saller </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Thenault Sylvain <text:s text:c="2"/>
+                    </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Philipp Auersperg </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Magnus Heino </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Geir Bækholt </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Dorneles Treméa </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Leonard Norrgard </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Michael Zeltner </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Jens Klein </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Andreas Jung </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Kapil Thangavelu </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Ronan Amicel </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Gerry Kirk </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Maik Röder </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>panjunyong </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Jodok Batlogg </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Godefroid Chapelle </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>J M Cerqueira Esteves</text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Vladimir Iliev </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Fabiano Weimar dos Santos </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>robert rottermann </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Lele Gaifax</text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Brent Hendricks </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>James Cooper </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Tom Croucher </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>André Ribeiro Camargo</text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Cyrille Lebeaupin</text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Bill Schindler </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Danny Bloemendaal </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Kamon Ayeva </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Dominik B. </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Pedro A. Gracia Fajardo</text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Anoush Najarian </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Mai Kozakai</text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Jim Roepcke </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Jochen Knuth </text:p>
+                </table:table-cell>
+            </table:table-row>
+            <table:table-row table:style-name="ro1">
+                <table:table-cell>
+                    <text:p>Joel Burton </text:p>
+