diff --git a/README b/README
index 8ab152e1c84469dd5c64a05b69b6c1171c85301b..5cdd6ebf2987d2683a6234140f0e9bc4d801dfb5 100644
--- a/README
+++ b/README
@@ -141,10 +141,14 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 Change history
 --------------
 
-Version 2.12g (09/03/2014)
+Version 2.13a (09/09/2014)
 - Minor fix to function generateToEtreeChildren.  Must generate
   call to get_valueOf only when defined (i.e. when element is
   simpleContent or isMixed).
+- Fix to generation of class name prefixes added with the "-p"
+  command line option.  This fix was added by Christian Ascheberg.
+  Thank you Christian.
+- Added unit test for class name prefixes command line option.
 
 Version 2.12f (08/12/2014)
 - Fix for substitutionGroup conflict with keyword name mapping.
diff --git a/generateDS.html b/generateDS.html
index 15ff8bd3e8998e1cd190a34d3b9044b7ad9fb700..4ed9fd4217980343a74581d3fa526cd0cf5da606 100644
--- a/generateDS.html
+++ b/generateDS.html
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13: http://docutils.sourceforge.net/" />
 <title>generateDS -- Generate Data Structures from XML Schema</title>
 <meta name="author" content="Dave Kuhlman" />
 <style type="text/css">
@@ -205,7 +205,7 @@ ul.auto-toc {
 <tr><th class="docinfo-name">Author:</th>
 <td>Dave Kuhlman</td></tr>
 <tr><th class="docinfo-name">Contact:</th>
-<td><a class="first last reference external" href="mailto:dkuhlman&#64;pacbell.net">dkuhlman&#64;pacbell.net</a></td></tr>
+<td><a class="first last reference external" href="mailto:dkuhlman&#64;davekuhlman.org">dkuhlman&#64;davekuhlman.org</a></td></tr>
 <tr><th class="docinfo-name">Address:</th>
 <td><pre class="address">
 <a class="first last reference external" href="http://www.davekuhlman.org">http://www.davekuhlman.org</a>
@@ -220,7 +220,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.12e</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.13a</td>
 </tr>
 </tbody>
 </table>
@@ -229,7 +229,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">May 30, 2014</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">September 09, 2014</td>
 </tr>
 </tbody>
 </table>
@@ -2886,7 +2886,7 @@ following among others:</p>
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateDS.txt">View document source</a>.
-Generated on: 2014-05-30 18:59 UTC.
+Generated on: 2014-09-09 20:05 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/generateDS.py b/generateDS.py
index 0bb303d4d0ca58980fe78d01fe2814ef708aeec1..7c32e5d61c9592623927b7131b0fd69f0a4f758b 100755
--- a/generateDS.py
+++ b/generateDS.py
@@ -179,7 +179,7 @@ logging.disable(logging.INFO)
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.12g'
+VERSION = '2.13a'
 ##VERSION##
 
 GenerateProperties = 0
@@ -4281,7 +4281,7 @@ def generateClasses(wrt, prefix, element, delayed, nameSpacesDef=''):
         generateExportLiteralFn(wrt, prefix, element)
     generateBuildFn(wrt, prefix, element, delayed)
     generateUserMethods(wrt, element)
-    wrt('# end class %s\n' % name)
+    wrt('# end class %s%s\n' % (prefix, name, ))
     wrt('\n\n')
 # end generateClasses
 
@@ -5957,7 +5957,7 @@ def parseAndGenerate(
         # can do a reasonably safe "from parser import *"
         if outfileName:
             exportableClassList = [
-                '"%s"' % name
+                '"%s%s"' % (prefix, name, )
                 for name in AlreadyGenerated]
             exportableClassList.sort()
             exportableClassNames = ',\n    '.join(exportableClassList)
@@ -6031,7 +6031,7 @@ def parseAndGenerate(
                 # to isolate important classes from internal ones. This way one
                 # can do a reasonably safe "from parser import *"
                 exportableClassList = [
-                    '"%s"' % name
+                    '"%s%s"' % (prefix, name, )
                     for name in AlreadyGenerated]
                 exportableClassList.sort()
                 exportableClassNames = ',\n    '.join(exportableClassList)
diff --git a/generateDS.txt b/generateDS.txt
index e831964708daf43c4dbd3d219cd8888c70503b7b..0cfa919835bdef2ffc20113e7c352df143e68d3b 100644
--- a/generateDS.txt
+++ b/generateDS.txt
@@ -3,7 +3,7 @@ generateDS -- Generate Data Structures from XML Schema
 ======================================================
 
 :author: Dave Kuhlman
-:contact: dkuhlman@pacbell.net
+:contact: dkuhlman@davekuhlman.org
 :address:
     http://www.davekuhlman.org
 
@@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema
 
 .. version
 
-:revision: 2.12g
+:revision: 2.13a
 
 .. version
 
diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py
index 60aef401a31da20ac781cb5df81c1e54f09b6647..8622d6837262a43dba0199147f3a73d51bbac5ef 100755
--- a/gui/generateds_gui.py
+++ b/gui/generateds_gui.py
@@ -31,7 +31,7 @@ from libgenerateDS.gui import generateds_gui_session
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.12g'
+VERSION = '2.13a'
 ##VERSION##
 
 
diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html
index 1a2df9d8067d4076366ba4b37ca3e6b01f294829..db0373e6e90e744f1717cc761f486d098c96ccf3 100644
--- a/librarytemplate_howto.html
+++ b/librarytemplate_howto.html
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13: http://docutils.sourceforge.net/" />
 <title>How to package a generateDS.py generated library</title>
 <meta name="author" content="Dave Kuhlman" />
 <style type="text/css">
@@ -217,7 +217,7 @@ ul.auto-toc {
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.12e</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.13a</td>
 </tr>
 </tbody>
 </table>
@@ -226,7 +226,7 @@ ul.auto-toc {
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">May 23, 2014</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">September 09, 2014</td>
 </tr>
 </tbody>
 </table>
@@ -380,7 +380,7 @@ this command for your needs.  For example, you may need to use
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="librarytemplate_howto.txt">View document source</a>.
-Generated on: 2014-05-23 16:00 UTC.
+Generated on: 2014-09-09 19:14 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/librarytemplate_howto.txt b/librarytemplate_howto.txt
index 32f3bf1679996dcf78bb28dedabb48b9bdd4726a..51928ab43686dc7bef909d3135a7977bfee57143 100644
--- a/librarytemplate_howto.txt
+++ b/librarytemplate_howto.txt
@@ -8,7 +8,7 @@ How to package a generateDS.py generated library
 
 .. version
 
-:revision: 2.12g
+:revision: 2.13a
 
 .. version
 
diff --git a/process_includes.py b/process_includes.py
index 6bb534769a2e999fc34acc1e50dfb710fe045009..31ba6af72a602f4f5548ad7633939b3eb26d16d7 100755
--- a/process_includes.py
+++ b/process_includes.py
@@ -30,7 +30,7 @@ from lxml import etree
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.12g'
+VERSION = '2.13a'
 ##VERSION##
 
 CatalogDict = {}
diff --git a/setup.py b/setup.py
index 515df70aa63d8f56158f2106b7450a8e45d1e48c..0bdcc977ce36e0a6b07742dd7790b1b36a14996f 100644
--- a/setup.py
+++ b/setup.py
@@ -7,7 +7,7 @@ setup(name="generateDS",
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-    version="2.12g",
+    version="2.13a",
 ##VERSION##
     author="Dave Kuhlman",
     author_email="dkuhlman@davekuhlman.org",
diff --git a/tests/prefix_classname.xml b/tests/prefix_classname.xml
new file mode 100644
index 0000000000000000000000000000000000000000..322414c322bab1e5fae502fda39e23b25bc929ce
--- /dev/null
+++ b/tests/prefix_classname.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0"?>
+<people>
+
+    <comments>1. This is a <emp>foolish</emp> comment.  It is <emp>really</emp> important.</comments>
+    <comments>2. This is a <emp>silly</emp> comment.  It is <emp>very</emp> significant.</comments>
+
+
+    <person id="1" value="abcd" ratio="3.2" extraattr="aaa">
+        <name>Alberta</name>
+        <interest>gardening</interest>
+        <interest>reading</interest>
+        <category>5</category>
+        <hot  />
+        <hot.agent oneattr="bbb" twoattr="ccc">
+            <firstname>Paula</firstname>
+            <lastname>Peterson</lastname>
+            <priority>4.3</priority>
+        </hot.agent>
+    </person> 
+
+    <person id="2">
+        <name>Bernardo</name>
+        <interest>programming</interest>
+        <category>0</category>
+        <agent>
+            <firstname>Darren</firstname>
+            <lastname>Diddly</lastname>
+            <priority>4.5</priority>
+            <info name="Albert Abasinian" type="321" rating="5.33">
+            Albert is a test for attributes + character content +
+            *no* element content.
+            </info>
+        </agent>
+    </person>
+
+    <programmer id="2" language="python" area="xml">
+        <name>Charles Carlson</name>
+        <interest>programming</interest>
+        <category>2233</category>
+        <description>A very happy programmer</description>
+        <email>charles@happyprogrammers.com</email>
+        <agent>
+            <firstname>Ernest</firstname>
+            <lastname>Echo</lastname>
+            <priority>3.8</priority>
+            <info name="George Gregory" type="321" rating="5.33" />
+        </agent>
+        <elposint>14</elposint>
+        <elnegint>-12</elnegint>
+        <elnonnegint>4</elnonnegint>
+        <elnonposint>0</elnonposint>
+        <eldate>2005-04-26</eldate>
+        <eldatetime>2005-04-26T10:11:12</eldatetime>
+        <eltoken>aa bb    cc
+            dd</eltoken>
+        <elshort>123</elshort>
+        <ellong>13241234123412341234</ellong>
+        <elparam id="id001" name="Davy" semantic="a big    semantic"/>
+    </programmer>
+
+    <person id="3">
+        <name>Charlie</name>
+        <interest>people</interest>
+        <interest>cats</interest>
+        <interest>dogs</interest>
+        <category>8</category>
+        <promoter>
+            <firstname>David</firstname>
+            <lastname>Donaldson</lastname>
+            <client>
+                <fullname>Arnold Applebee</fullname>
+                <refid>10001</refid>
+            </client>
+        </promoter>
+        <promoter>
+            <firstname>Edward</firstname>
+            <lastname>Eddleberry</lastname>
+            <client>
+                <fullname>Arnold Applebee</fullname>
+                <refid>10001</refid>
+            </client>
+        </promoter>
+    </person>
+
+    <person id="4" />
+
+    <python-programmer vegetable="tomato" fruit="peach" language="python" area="xml" nick-name="davy" id="232" ratio="8.7" value="abcd">
+        <favorite-editor>jed</favorite-editor>
+        <name>Darrel Dawson</name>
+        <interest>hang gliding</interest>
+        <category>3344</category>
+        <description>An object-orientated programmer</description>
+        <email>darrel@happyprogrammers.com</email>
+        <agent>
+            <firstname>Harvey</firstname>
+            <lastname>Hippolite</lastname>
+            <priority>5.2</priority>
+            <info name="Harvey Hippolite" type="543" rating="6.55" />
+        </agent>
+    </python-programmer>
+
+    <java-programmer vegetable="tomato" fruit="peach" language="python" area="xml" nick-name="davy" id="232" ratio="8.7" value="abcd">
+        <favorite-editor>jed</favorite-editor>
+        <name>Darrel Dawson</name>
+        <interest>hang gliding</interest>
+        <category>3344</category>
+        <description>An object-orientated programmer</description>
+        <email>darrel@happyprogrammers.com</email>
+        <agent>
+            <firstname>Harvey</firstname>
+            <lastname>Hippolite</lastname>
+            <priority>5.2</priority>
+            <info name="Harvey Hippolite" type="543" rating="6.55" />
+        </agent>
+    </java-programmer>
+
+</people>
+
diff --git a/tests/prefix_classname.xsd b/tests/prefix_classname.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..a8520250a82b5efafb1d4c28db656a0baed518fb
--- /dev/null
+++ b/tests/prefix_classname.xsd
@@ -0,0 +1,203 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+    <xs:element name="people">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="comments" type="comments" maxOccurs="unbounded"/>
+                <xs:element name="person" maxOccurs="unbounded" type="person"/>
+                <xs:element name="programmer" maxOccurs="unbounded" type="programmer"/>
+                <xs:element name="python-programmer" maxOccurs="unbounded" type="python-programmer"/>
+                <xs:element name="java-programmer" maxOccurs="unbounded" type="java-programmer"/>
+			</xs:sequence>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="comments">
+        <xs:complexType mixed="true">
+            <xs:sequence>
+                <!-- 
+                <xs:element name="emp" type="xs:string" />
+                -->
+                <xs:element name="emp" type="xs:string" maxOccurs="unbounded"/>
+			</xs:sequence>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="person">
+        <xs:complexType mixed="0">
+            <xs:sequence>
+                <xs:element name="name" type="xs:string"/>
+                <xs:element name="interest" type="xs:string" maxOccurs="unbounded" />
+				<xs:element name="category" type="xs:integer"/>
+                <xs:element name="agent" type="agent" maxOccurs="unbounded" />
+                <xs:element name="promoter" type="booster" maxOccurs="unbounded" />
+                <xs:element name="description" type="xs:string"/>
+			</xs:sequence>
+            <xs:attribute name="value" type="xs:ID" />
+            <xs:attribute name="id" type="xs:integer" />
+            <xs:attribute name="ratio" type="xs:float" />
+            <xs:attributeGroup ref="favorites" />
+        </xs:complexType>
+    </xs:element>
+
+    <!--
+    <xs:element name="description-a" type="xs:string" substitutionGroup="description" />
+    -->
+
+    <xs:element name="programmer">
+        <xs:complexType mixed="0">
+            <xs:complexContent>
+                <xs:extension base="person">
+                    <xs:sequence>
+                        <!--
+                        <xs:element name="description" type="xs:string"/>
+                        -->
+                        <xs:element name="email" type="xs:string"/>
+                        <xs:element name="elposint" type="xs:positiveInteger"/>
+                        <xs:element name="elnonposint" type="xs:nonPositiveInteger"/>
+                        <xs:element name="elnegint" type="xs:negativeInteger"/>
+                        <xs:element name="elnonnegint" type="xs:nonNegativeInteger"/>
+                        <xs:element name="eldate" type="xs:date"/>
+                        <xs:element name="eldatetime" type="xs:dateTime"/>
+                        <xs:element name="eltoken" type="xs:token"/>
+                        <xs:element name="elshort" type="xs:short"/>
+                        <xs:element name="ellong" type="xs:long"/>
+                        <xs:element name="elparam" type="param"/>
+                        <xs:element name="elarraytypes" type="ArrayTypes"/>
+                        
+                    </xs:sequence>
+                    <xs:attribute name="language" type="xs:string" />
+                    <xs:attribute name="area"/>
+                    <xs:attribute name="attrposint" type="xs:positiveInteger"/>
+                    <xs:attribute name="attrnonposint" type="xs:nonPositiveInteger"/>
+                    <xs:attribute name="attrnegint" type="xs:negativeInteger"/>
+                    <xs:attribute name="attrnonnegint" type="xs:nonNegativeInteger"/>
+                </xs:extension>
+            </xs:complexContent>
+        </xs:complexType>
+    </xs:element>
+
+
+    <xs:element name="param">
+        <xs:annotation>
+            <xs:documentation>Finding flow attribute unneccesary in practice. A unnamed parameter is unbound/skipped.</xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+            <xs:simpleContent>
+                <xs:extension base="xs:string">
+                    <xs:attribute name="id" type="xs:ID" />
+                    <xs:attribute name="name" type="xs:NCName" />
+                    <xs:attribute name="sid" type="xs:NCName" />
+                    <xs:attribute name="flow" type="FlowType" />
+                    <xs:attribute name="semantic" type="xs:token" />
+                    <xs:attribute name="type" type="xs:NMTOKEN" use="required" />
+                </xs:extension>
+            </xs:simpleContent>
+        </xs:complexType>
+    </xs:element>
+
+
+    <xs:simpleType name="ArrayTypes">
+        <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="float" />
+            <xs:enumeration value="int" />
+            <xs:enumeration value="Name" />
+            <xs:enumeration value="token" />
+        </xs:restriction>
+    </xs:simpleType>
+
+
+
+    <xs:element name="python-programmer">
+        <xs:complexType mixed="0">
+            <xs:complexContent>
+                <xs:extension base="programmer">
+                    <xs:sequence>
+                        <xs:element name="favorite-editor" type="xs:string"/>
+                    </xs:sequence>
+                    <xs:attribute name="nick-name"/>
+                </xs:extension>
+            </xs:complexContent>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="java-programmer">
+        <xs:complexType mixed="0">
+            <xs:complexContent>
+                <xs:extension base="programmer">
+                    <xs:sequence>
+                        <xs:element name="favorite-editor" type="xs:string"/>
+                    </xs:sequence>
+                    <xs:attribute name="nick-name"/>
+                    <xs:attribute name="status"/>
+                </xs:extension>
+            </xs:complexContent>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="agent">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="firstname" type="xs:string"/>
+                <xs:element name="lastname" type="xs:string"/>
+                <xs:element name="priority" type="xs:float"/>
+                <xs:element name="info" type="info"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="special-agent" substitutionGroup="agent">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="firstname" type="xs:string"/>
+                <xs:element name="lastname" type="xs:string"/>
+                <xs:element name="priority" type="xs:float"/>
+                <xs:element name="info" type="info"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:element name="booster">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="firstname" type="xs:string"/>
+                <xs:element name="lastname" type="xs:string"/>
+                <xs:element name="other-name" type="xs:float"/>
+                <xs:element name="class" type="xs:float"/>
+                <xs:element name="other-value" type="xs:float" maxOccurs="unbounded" />
+                <xs:element name="type" type="xs:float" maxOccurs="unbounded" />
+                <xs:element name="client-handler" maxOccurs="unbounded">
+                    <xs:complexType>
+                        <xs:sequence>
+                            <xs:element name="fullname" type="xs:string"/>
+                            <xs:element name="refid" type="xs:integer"/>
+                        </xs:sequence>
+                    </xs:complexType>
+                </xs:element>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+
+    <!-- Test for element with attributes but no children.
+         Should use valueOf.
+    -->
+    <xs:element name="info">
+        <xs:complexType>
+            <xs:sequence>
+			</xs:sequence>
+            <xs:attribute name="name" type="xs:string" />
+            <xs:attribute name="type" type="xs:integer" />
+            <xs:attribute name="rating" type="xs:float" />
+        </xs:complexType>
+    </xs:element>
+
+
+  <xs:attributeGroup name="favorites">
+    <xs:attribute name="fruit" />
+    <xs:attribute name="vegetable" />
+  </xs:attributeGroup>
+
+ 
+</xs:schema>
+
diff --git a/tests/prefix_classname1_out.xml b/tests/prefix_classname1_out.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c2e2e7ebf4af40a823bf7e24b8b0e9e7cfb9b86f
--- /dev/null
+++ b/tests/prefix_classname1_out.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" ?>
+<people>
+    <comments>
+1. This is a <emp>foolish</emp> comment.  It is <emp>really</emp> important.    </comments>
+    <comments>
+2. This is a <emp>silly</emp> comment.  It is <emp>very</emp> significant.    </comments>
+    <person ratio="3.2" id="1" value="abcd">
+        <name>Alberta</name>
+        <interest>gardening</interest>
+        <interest>reading</interest>
+        <category>5</category>
+    </person>
+    <person id="2">
+        <name>Bernardo</name>
+        <interest>programming</interest>
+        <category>0</category>
+        <agent>
+            <firstname>Darren</firstname>
+            <lastname>Diddly</lastname>
+            <priority>4.5</priority>
+            <info rating="5.33" type="321" name="Albert Abasinian"/>
+        </agent>
+    </person>
+    <person id="3">
+        <name>Charlie</name>
+        <interest>people</interest>
+        <interest>cats</interest>
+        <interest>dogs</interest>
+        <category>8</category>
+        <promoter>
+            <firstname>David</firstname>
+            <lastname>Donaldson</lastname>
+        </promoter>
+        <promoter>
+            <firstname>Edward</firstname>
+            <lastname>Eddleberry</lastname>
+        </promoter>
+    </person>
+    <person id="4"/>
+    <programmer id="2" language="python" area="xml">
+        <name>Charles Carlson</name>
+        <interest>programming</interest>
+        <category>2233</category>
+        <agent>
+            <firstname>Ernest</firstname>
+            <lastname>Echo</lastname>
+            <priority>3.8</priority>
+            <info rating="5.33" type="321" name="George Gregory"/>
+        </agent>
+        <description>A very happy programmer</description>
+        <email>charles@happyprogrammers.com</email>
+        <elposint>14</elposint>
+        <elnonposint>0</elnonposint>
+        <elnegint>-12</elnegint>
+        <elnonnegint>4</elnonnegint>
+        <eldate>2005-04-26</eldate>
+        <eldatetime>2005-04-26T10:11:12</eldatetime>
+        <eltoken>aa bb cc dd</eltoken>
+        <elshort>123</elshort>
+        <ellong>13241234123412341234</ellong>
+        <elparam semantic="a big semantic" name="Davy" id="id001"/>
+    </programmer>
+    <python-programmer vegetable="tomato" fruit="peach" ratio="8.699999999999999" id="232" value="abcd" language="python" area="xml" nick-name="davy">
+        <name>Darrel Dawson</name>
+        <interest>hang gliding</interest>
+        <category>3344</category>
+        <agent>
+            <firstname>Harvey</firstname>
+            <lastname>Hippolite</lastname>
+            <priority>5.2</priority>
+            <info rating="6.55" type="543" name="Harvey Hippolite"/>
+        </agent>
+        <description>An object-orientated programmer</description>
+        <email>darrel@happyprogrammers.com</email>
+        <favorite-editor>jed</favorite-editor>
+    </python-programmer>
+    <java-programmer vegetable="tomato" fruit="peach" ratio="8.699999999999999" id="232" value="abcd" language="python" area="xml" nick-name="davy">
+        <name>Darrel Dawson</name>
+        <interest>hang gliding</interest>
+        <category>3344</category>
+        <agent>
+            <firstname>Harvey</firstname>
+            <lastname>Hippolite</lastname>
+            <priority>5.2</priority>
+            <info rating="6.55" type="543" name="Harvey Hippolite"/>
+        </agent>
+        <description>An object-orientated programmer</description>
+        <email>darrel@happyprogrammers.com</email>
+        <favorite-editor>jed</favorite-editor>
+    </java-programmer>
+</people>
diff --git a/tests/prefix_classname1_sub.py b/tests/prefix_classname1_sub.py
new file mode 100644
index 0000000000000000000000000000000000000000..a196947cf8ce05793a34dbac19687a5db1ef9537
--- /dev/null
+++ b/tests/prefix_classname1_sub.py
@@ -0,0 +1,292 @@
+#!/usr/bin/env python
+
+#
+# Generated  by generateDS.py.
+#
+# Command line options:
+#   ('--no-dates', '')
+#   ('--no-versions', '')
+#   ('-p', 'tomato_')
+#   ('--member-specs', 'list')
+#   ('-f', '')
+#   ('-o', 'tests/prefix_classname2_sup.py')
+#   ('-s', 'tests/prefix_classname2_sub.py')
+#   ('--super', 'prefix_classname2_sup')
+#
+# Command line arguments:
+#   tests/prefix_classname.xsd
+#
+# Command line:
+#   generateDS.py --no-dates --no-versions -p "tomato_" --member-specs="list" -f -o "tests/prefix_classname2_sup.py" -s "tests/prefix_classname2_sub.py" --super="prefix_classname2_sup" tests/prefix_classname.xsd
+#
+# Current working directory (os.getcwd()):
+#   generateds
+#
+
+import sys
+
+import prefix_classname2_sup as supermod
+
+etree_ = None
+Verbose_import_ = False
+(
+    XMLParser_import_none, XMLParser_import_lxml,
+    XMLParser_import_elementtree
+) = range(3)
+XMLParser_import_library = None
+try:
+    # lxml
+    from lxml import etree as etree_
+    XMLParser_import_library = XMLParser_import_lxml
+    if Verbose_import_:
+        print("running with lxml.etree")
+except ImportError:
+    try:
+        # cElementTree from Python 2.5+
+        import xml.etree.cElementTree as etree_
+        XMLParser_import_library = XMLParser_import_elementtree
+        if Verbose_import_:
+            print("running with cElementTree on Python 2.5+")
+    except ImportError:
+        try:
+            # ElementTree from Python 2.5+
+            import xml.etree.ElementTree as etree_
+            XMLParser_import_library = XMLParser_import_elementtree
+            if Verbose_import_:
+                print("running with ElementTree on Python 2.5+")
+        except ImportError:
+            try:
+                # normal cElementTree install
+                import cElementTree as etree_
+                XMLParser_import_library = XMLParser_import_elementtree
+                if Verbose_import_:
+                    print("running with cElementTree")
+            except ImportError:
+                try:
+                    # normal ElementTree install
+                    import elementtree.ElementTree as etree_
+                    XMLParser_import_library = XMLParser_import_elementtree
+                    if Verbose_import_:
+                        print("running with ElementTree")
+                except ImportError:
+                    raise ImportError(
+                        "Failed to import ElementTree from any known place")
+
+
+def parsexml_(*args, **kwargs):
+    if (XMLParser_import_library == XMLParser_import_lxml and
+            'parser' not in kwargs):
+        # Use the lxml ElementTree compatible parser so that, e.g.,
+        #   we ignore comments.
+        kwargs['parser'] = etree_.ETCompatXMLParser()
+    doc = etree_.parse(*args, **kwargs)
+    return doc
+
+#
+# Globals
+#
+
+ExternalEncoding = 'ascii'
+
+#
+# Data representation classes
+#
+
+
+class tomato_peopleSub(supermod.tomato_people):
+    def __init__(self, comments=None, person=None, programmer=None, python_programmer=None, java_programmer=None):
+        super(tomato_peopleSub, self).__init__(comments, person, programmer, python_programmer, java_programmer, )
+supermod.tomato_people.subclass = tomato_peopleSub
+# end class tomato_peopleSub
+
+
+class tomato_commentsSub(supermod.tomato_comments):
+    def __init__(self, emp=None, valueOf_=None, mixedclass_=None, content_=None):
+        super(tomato_commentsSub, self).__init__(emp, valueOf_, mixedclass_, content_, )
+supermod.tomato_comments.subclass = tomato_commentsSub
+# end class tomato_commentsSub
+
+
+class tomato_personSub(supermod.tomato_person):
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, extensiontype_=None):
+        super(tomato_personSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, extensiontype_, )
+supermod.tomato_person.subclass = tomato_personSub
+# end class tomato_personSub
+
+
+class tomato_programmerSub(supermod.tomato_programmer):
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, extensiontype_=None):
+        super(tomato_programmerSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, extensiontype_, )
+supermod.tomato_programmer.subclass = tomato_programmerSub
+# end class tomato_programmerSub
+
+
+class tomato_paramSub(supermod.tomato_param):
+    def __init__(self, semantic=None, name=None, flow=None, sid=None, type_=None, id=None, valueOf_=None):
+        super(tomato_paramSub, self).__init__(semantic, name, flow, sid, type_, id, valueOf_, )
+supermod.tomato_param.subclass = tomato_paramSub
+# end class tomato_paramSub
+
+
+class tomato_python_programmerSub(supermod.tomato_python_programmer):
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, nick_name=None, favorite_editor=None):
+        super(tomato_python_programmerSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, nick_name, favorite_editor, )
+supermod.tomato_python_programmer.subclass = tomato_python_programmerSub
+# end class tomato_python_programmerSub
+
+
+class tomato_java_programmerSub(supermod.tomato_java_programmer):
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, status=None, nick_name=None, favorite_editor=None):
+        super(tomato_java_programmerSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, status, nick_name, favorite_editor, )
+supermod.tomato_java_programmer.subclass = tomato_java_programmerSub
+# end class tomato_java_programmerSub
+
+
+class tomato_agentSub(supermod.tomato_agent):
+    def __init__(self, firstname=None, lastname=None, priority=None, info=None):
+        super(tomato_agentSub, self).__init__(firstname, lastname, priority, info, )
+supermod.tomato_agent.subclass = tomato_agentSub
+# end class tomato_agentSub
+
+
+class tomato_special_agentSub(supermod.tomato_special_agent):
+    def __init__(self, firstname=None, lastname=None, priority=None, info=None):
+        super(tomato_special_agentSub, self).__init__(firstname, lastname, priority, info, )
+supermod.tomato_special_agent.subclass = tomato_special_agentSub
+# end class tomato_special_agentSub
+
+
+class tomato_boosterSub(supermod.tomato_booster):
+    def __init__(self, firstname=None, lastname=None, other_name=None, class_=None, other_value=None, type_=None, client_handler=None):
+        super(tomato_boosterSub, self).__init__(firstname, lastname, other_name, class_, other_value, type_, client_handler, )
+supermod.tomato_booster.subclass = tomato_boosterSub
+# end class tomato_boosterSub
+
+
+class tomato_infoSub(supermod.tomato_info):
+    def __init__(self, rating=None, type_=None, name=None):
+        super(tomato_infoSub, self).__init__(rating, type_, name, )
+supermod.tomato_info.subclass = tomato_infoSub
+# end class tomato_infoSub
+
+
+class tomato_client_handlerTypeSub(supermod.tomato_client_handlerType):
+    def __init__(self, fullname=None, refid=None):
+        super(tomato_client_handlerTypeSub, self).__init__(fullname, refid, )
+supermod.tomato_client_handlerType.subclass = tomato_client_handlerTypeSub
+# end class tomato_client_handlerTypeSub
+
+
+def get_root_tag(node):
+    tag = supermod.Tag_pattern_.match(node.tag).groups()[-1]
+    rootClass = None
+    rootClass = supermod.GDSClassesMapping.get(tag)
+    if rootClass is None and hasattr(supermod, tag):
+        rootClass = getattr(supermod, tag)
+    return tag, rootClass
+
+
+def parse(inFilename, silence=False):
+    doc = parsexml_(inFilename)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = supermod.tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    if not silence:
+        sys.stdout.write('<?xml version="1.0" ?>\n')
+        rootObj.export(
+            sys.stdout, 0, name_=rootTag,
+            namespacedef_='',
+            pretty_print=True)
+    return rootObj
+
+
+def parseEtree(inFilename, silence=False):
+    doc = parsexml_(inFilename)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = supermod.tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    mapping = {}
+    rootElement = rootObj.to_etree(None, name_=rootTag, mapping_=mapping)
+    reverse_mapping = rootObj.gds_reverse_node_mapping(mapping)
+    if not silence:
+        content = etree_.tostring(
+            rootElement, pretty_print=True,
+            xml_declaration=True, encoding="utf-8")
+        sys.stdout.write(content)
+        sys.stdout.write('\n')
+    return rootObj, rootElement, mapping, reverse_mapping
+
+
+def parseString(inString, silence=False):
+    from StringIO import StringIO
+    doc = parsexml_(StringIO(inString))
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = supermod.tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    if not silence:
+        sys.stdout.write('<?xml version="1.0" ?>\n')
+        rootObj.export(
+            sys.stdout, 0, name_=rootTag,
+            namespacedef_='')
+    return rootObj
+
+
+def parseLiteral(inFilename, silence=False):
+    doc = parsexml_(inFilename)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = supermod.tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    if not silence:
+        sys.stdout.write('#from prefix_classname2_sup import *\n\n')
+        sys.stdout.write('import prefix_classname2_sup as model_\n\n')
+        sys.stdout.write('rootObj = model_.rootClass(\n')
+        rootObj.exportLiteral(sys.stdout, 0, name_=rootTag)
+        sys.stdout.write(')\n')
+    return rootObj
+
+
+USAGE_TEXT = """
+Usage: python ???.py <infilename>
+"""
+
+
+def usage():
+    print USAGE_TEXT
+    sys.exit(1)
+
+
+def main():
+    args = sys.argv[1:]
+    if len(args) != 1:
+        usage()
+    infilename = args[0]
+    parse(infilename)
+
+
+if __name__ == '__main__':
+    #import pdb; pdb.set_trace()
+    main()
diff --git a/tests/prefix_classname1_sup.py b/tests/prefix_classname1_sup.py
new file mode 100644
index 0000000000000000000000000000000000000000..5f2ebd0ef75074325a48d8d749e64c03c366efbf
--- /dev/null
+++ b/tests/prefix_classname1_sup.py
@@ -0,0 +1,2897 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+#
+# Generated  by generateDS.py.
+#
+# Command line options:
+#   ('--no-dates', '')
+#   ('--no-versions', '')
+#   ('-p', 'tomato_')
+#   ('--member-specs', 'list')
+#   ('-f', '')
+#   ('-o', 'tests/prefix_classname2_sup.py')
+#   ('-s', 'tests/prefix_classname2_sub.py')
+#   ('--super', 'prefix_classname2_sup')
+#
+# Command line arguments:
+#   tests/prefix_classname.xsd
+#
+# Command line:
+#   generateDS.py --no-dates --no-versions -p "tomato_" --member-specs="list" -f -o "tests/prefix_classname2_sup.py" -s "tests/prefix_classname2_sub.py" --super="prefix_classname2_sup" tests/prefix_classname.xsd
+#
+# Current working directory (os.getcwd()):
+#   generateds
+#
+
+import sys
+import getopt
+import re as re_
+import base64
+import datetime as datetime_
+
+etree_ = None
+Verbose_import_ = False
+(
+    XMLParser_import_none, XMLParser_import_lxml,
+    XMLParser_import_elementtree
+) = range(3)
+XMLParser_import_library = None
+try:
+    # lxml
+    from lxml import etree as etree_
+    XMLParser_import_library = XMLParser_import_lxml
+    if Verbose_import_:
+        print("running with lxml.etree")
+except ImportError:
+    try:
+        # cElementTree from Python 2.5+
+        import xml.etree.cElementTree as etree_
+        XMLParser_import_library = XMLParser_import_elementtree
+        if Verbose_import_:
+            print("running with cElementTree on Python 2.5+")
+    except ImportError:
+        try:
+            # ElementTree from Python 2.5+
+            import xml.etree.ElementTree as etree_
+            XMLParser_import_library = XMLParser_import_elementtree
+            if Verbose_import_:
+                print("running with ElementTree on Python 2.5+")
+        except ImportError:
+            try:
+                # normal cElementTree install
+                import cElementTree as etree_
+                XMLParser_import_library = XMLParser_import_elementtree
+                if Verbose_import_:
+                    print("running with cElementTree")
+            except ImportError:
+                try:
+                    # normal ElementTree install
+                    import elementtree.ElementTree as etree_
+                    XMLParser_import_library = XMLParser_import_elementtree
+                    if Verbose_import_:
+                        print("running with ElementTree")
+                except ImportError:
+                    raise ImportError(
+                        "Failed to import ElementTree from any known place")
+
+
+def parsexml_(*args, **kwargs):
+    if (XMLParser_import_library == XMLParser_import_lxml and
+            'parser' not in kwargs):
+        # Use the lxml ElementTree compatible parser so that, e.g.,
+        #   we ignore comments.
+        kwargs['parser'] = etree_.ETCompatXMLParser()
+    doc = etree_.parse(*args, **kwargs)
+    return doc
+
+#
+# User methods
+#
+# Calls to the methods in these classes are generated by generateDS.py.
+# You can replace these methods by re-implementing the following class
+#   in a module named generatedssuper.py.
+
+try:
+    from generatedssuper import GeneratedsSuper
+except ImportError, exp:
+
+    class GeneratedsSuper(object):
+        tzoff_pattern = re_.compile(r'(\+|-)((0\d|1[0-3]):[0-5]\d|14:00)$')
+        class _FixedOffsetTZ(datetime_.tzinfo):
+            def __init__(self, offset, name):
+                self.__offset = datetime_.timedelta(minutes=offset)
+                self.__name = name
+            def utcoffset(self, dt):
+                return self.__offset
+            def tzname(self, dt):
+                return self.__name
+            def dst(self, dt):
+                return None
+        def gds_format_string(self, input_data, input_name=''):
+            return input_data
+        def gds_validate_string(self, input_data, node, input_name=''):
+            if not input_data:
+                return ''
+            else:
+                return input_data
+        def gds_format_base64(self, input_data, input_name=''):
+            return base64.b64encode(input_data)
+        def gds_validate_base64(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_integer(self, input_data, input_name=''):
+            return '%d' % input_data
+        def gds_validate_integer(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_integer_list(self, input_data, input_name=''):
+            return '%s' % input_data
+        def gds_validate_integer_list(self, input_data, node, input_name=''):
+            values = input_data.split()
+            for value in values:
+                try:
+                    float(value)
+                except (TypeError, ValueError):
+                    raise_parse_error(node, 'Requires sequence of integers')
+            return input_data
+        def gds_format_float(self, input_data, input_name=''):
+            return ('%.15f' % input_data).rstrip('0')
+        def gds_validate_float(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_float_list(self, input_data, input_name=''):
+            return '%s' % input_data
+        def gds_validate_float_list(self, input_data, node, input_name=''):
+            values = input_data.split()
+            for value in values:
+                try:
+                    float(value)
+                except (TypeError, ValueError):
+                    raise_parse_error(node, 'Requires sequence of floats')
+            return input_data
+        def gds_format_double(self, input_data, input_name=''):
+            return '%e' % input_data
+        def gds_validate_double(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_double_list(self, input_data, input_name=''):
+            return '%s' % input_data
+        def gds_validate_double_list(self, input_data, node, input_name=''):
+            values = input_data.split()
+            for value in values:
+                try:
+                    float(value)
+                except (TypeError, ValueError):
+                    raise_parse_error(node, 'Requires sequence of doubles')
+            return input_data
+        def gds_format_boolean(self, input_data, input_name=''):
+            return ('%s' % input_data).lower()
+        def gds_validate_boolean(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_boolean_list(self, input_data, input_name=''):
+            return '%s' % input_data
+        def gds_validate_boolean_list(self, input_data, node, input_name=''):
+            values = input_data.split()
+            for value in values:
+                if value not in ('true', '1', 'false', '0', ):
+                    raise_parse_error(
+                        node,
+                        'Requires sequence of booleans '
+                        '("true", "1", "false", "0")')
+            return input_data
+        def gds_validate_datetime(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_datetime(self, input_data, input_name=''):
+            if input_data.microsecond == 0:
+                _svalue = '%04d-%02d-%02dT%02d:%02d:%02d' % (
+                    input_data.year,
+                    input_data.month,
+                    input_data.day,
+                    input_data.hour,
+                    input_data.minute,
+                    input_data.second,
+                )
+            else:
+                _svalue = '%04d-%02d-%02dT%02d:%02d:%02d.%s' % (
+                    input_data.year,
+                    input_data.month,
+                    input_data.day,
+                    input_data.hour,
+                    input_data.minute,
+                    input_data.second,
+                    ('%f' % (float(input_data.microsecond) / 1000000))[2:],
+                )
+            if input_data.tzinfo is not None:
+                tzoff = input_data.tzinfo.utcoffset(input_data)
+                if tzoff is not None:
+                    total_seconds = tzoff.seconds + (86400 * tzoff.days)
+                    if total_seconds == 0:
+                        _svalue += 'Z'
+                    else:
+                        if total_seconds < 0:
+                            _svalue += '-'
+                            total_seconds *= -1
+                        else:
+                            _svalue += '+'
+                        hours = total_seconds // 3600
+                        minutes = (total_seconds - (hours * 3600)) // 60
+                        _svalue += '{0:02d}:{1:02d}'.format(hours, minutes)
+            return _svalue
+        @classmethod
+        def gds_parse_datetime(cls, input_data):
+            tz = None
+            if input_data[-1] == 'Z':
+                tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')
+                input_data = input_data[:-1]
+            else:
+                results = GeneratedsSuper.tzoff_pattern.search(input_data)
+                if results is not None:
+                    tzoff_parts = results.group(2).split(':')
+                    tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])
+                    if results.group(1) == '-':
+                        tzoff *= -1
+                    tz = GeneratedsSuper._FixedOffsetTZ(
+                        tzoff, results.group(0))
+                    input_data = input_data[:-6]
+            time_parts = input_data.split('.')
+            if len(time_parts) > 1:
+                micro_seconds = int(float('0.' + time_parts[1]) * 1000000)
+                input_data = '%s.%s' % (time_parts[0], micro_seconds, )
+                dt = datetime_.datetime.strptime(
+                    input_data, '%Y-%m-%dT%H:%M:%S.%f')
+            else:
+                dt = datetime_.datetime.strptime(
+                    input_data, '%Y-%m-%dT%H:%M:%S')
+            dt = dt.replace(tzinfo=tz)
+            return dt
+        def gds_validate_date(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_date(self, input_data, input_name=''):
+            _svalue = '%04d-%02d-%02d' % (
+                input_data.year,
+                input_data.month,
+                input_data.day,
+            )
+            try:
+                if input_data.tzinfo is not None:
+                    tzoff = input_data.tzinfo.utcoffset(input_data)
+                    if tzoff is not None:
+                        total_seconds = tzoff.seconds + (86400 * tzoff.days)
+                        if total_seconds == 0:
+                            _svalue += 'Z'
+                        else:
+                            if total_seconds < 0:
+                                _svalue += '-'
+                                total_seconds *= -1
+                            else:
+                                _svalue += '+'
+                            hours = total_seconds // 3600
+                            minutes = (total_seconds - (hours * 3600)) // 60
+                            _svalue += '{0:02d}:{1:02d}'.format(hours, minutes)
+            except AttributeError:
+                pass
+            return _svalue
+        @classmethod
+        def gds_parse_date(cls, input_data):
+            tz = None
+            if input_data[-1] == 'Z':
+                tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')
+                input_data = input_data[:-1]
+            else:
+                results = GeneratedsSuper.tzoff_pattern.search(input_data)
+                if results is not None:
+                    tzoff_parts = results.group(2).split(':')
+                    tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])
+                    if results.group(1) == '-':
+                        tzoff *= -1
+                    tz = GeneratedsSuper._FixedOffsetTZ(
+                        tzoff, results.group(0))
+                    input_data = input_data[:-6]
+            dt = datetime_.datetime.strptime(input_data, '%Y-%m-%d')
+            dt = dt.replace(tzinfo=tz)
+            return dt.date()
+        def gds_validate_time(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_time(self, input_data, input_name=''):
+            if input_data.microsecond == 0:
+                _svalue = '%02d:%02d:%02d' % (
+                    input_data.hour,
+                    input_data.minute,
+                    input_data.second,
+                )
+            else:
+                _svalue = '%02d:%02d:%02d.%s' % (
+                    input_data.hour,
+                    input_data.minute,
+                    input_data.second,
+                    ('%f' % (float(input_data.microsecond) / 1000000))[2:],
+                )
+            if input_data.tzinfo is not None:
+                tzoff = input_data.tzinfo.utcoffset(input_data)
+                if tzoff is not None:
+                    total_seconds = tzoff.seconds + (86400 * tzoff.days)
+                    if total_seconds == 0:
+                        _svalue += 'Z'
+                    else:
+                        if total_seconds < 0:
+                            _svalue += '-'
+                            total_seconds *= -1
+                        else:
+                            _svalue += '+'
+                        hours = total_seconds // 3600
+                        minutes = (total_seconds - (hours * 3600)) // 60
+                        _svalue += '{0:02d}:{1:02d}'.format(hours, minutes)
+            return _svalue
+        @classmethod
+        def gds_parse_time(cls, input_data):
+            tz = None
+            if input_data[-1] == 'Z':
+                tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')
+                input_data = input_data[:-1]
+            else:
+                results = GeneratedsSuper.tzoff_pattern.search(input_data)
+                if results is not None:
+                    tzoff_parts = results.group(2).split(':')
+                    tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])
+                    if results.group(1) == '-':
+                        tzoff *= -1
+                    tz = GeneratedsSuper._FixedOffsetTZ(
+                        tzoff, results.group(0))
+                    input_data = input_data[:-6]
+            if len(input_data.split('.')) > 1:
+                dt = datetime_.datetime.strptime(input_data, '%H:%M:%S.%f')
+            else:
+                dt = datetime_.datetime.strptime(input_data, '%H:%M:%S')
+            dt = dt.replace(tzinfo=tz)
+            return dt.time()
+        def gds_str_lower(self, instring):
+            return instring.lower()
+        def get_path_(self, node):
+            path_list = []
+            self.get_path_list_(node, path_list)
+            path_list.reverse()
+            path = '/'.join(path_list)
+            return path
+        Tag_strip_pattern_ = re_.compile(r'\{.*\}')
+        def get_path_list_(self, node, path_list):
+            if node is None:
+                return
+            tag = GeneratedsSuper.Tag_strip_pattern_.sub('', node.tag)
+            if tag:
+                path_list.append(tag)
+            self.get_path_list_(node.getparent(), path_list)
+        def get_class_obj_(self, node, default_class=None):
+            class_obj1 = default_class
+            if 'xsi' in node.nsmap:
+                classname = node.get('{%s}type' % node.nsmap['xsi'])
+                if classname is not None:
+                    names = classname.split(':')
+                    if len(names) == 2:
+                        classname = names[1]
+                    class_obj2 = globals().get(classname)
+                    if class_obj2 is not None:
+                        class_obj1 = class_obj2
+            return class_obj1
+        def gds_build_any(self, node, type_name=None):
+            return None
+        @classmethod
+        def gds_reverse_node_mapping(cls, mapping):
+            return dict(((v, k) for k, v in mapping.iteritems()))
+
+
+#
+# If you have installed IPython you can uncomment and use the following.
+# IPython is available from http://ipython.scipy.org/.
+#
+
+## from IPython.Shell import IPShellEmbed
+## args = ''
+## ipshell = IPShellEmbed(args,
+##     banner = 'Dropping into IPython',
+##     exit_msg = 'Leaving Interpreter, back to program.')
+
+# Then use the following line where and when you want to drop into the
+# IPython shell:
+#    ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit')
+
+#
+# Globals
+#
+
+ExternalEncoding = 'ascii'
+Tag_pattern_ = re_.compile(r'({.*})?(.*)')
+String_cleanup_pat_ = re_.compile(r"[\n\r\s]+")
+Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)')
+
+#
+# Support/utility functions.
+#
+
+
+def showIndent(outfile, level, pretty_print=True):
+    if pretty_print:
+        for idx in range(level):
+            outfile.write('    ')
+
+
+def quote_xml(inStr):
+    if not inStr:
+        return ''
+    s1 = (isinstance(inStr, basestring) and inStr or
+          '%s' % inStr)
+    s1 = s1.replace('&', '&amp;')
+    s1 = s1.replace('<', '&lt;')
+    s1 = s1.replace('>', '&gt;')
+    return s1
+
+
+def quote_attrib(inStr):
+    s1 = (isinstance(inStr, basestring) and inStr or
+          '%s' % inStr)
+    s1 = s1.replace('&', '&amp;')
+    s1 = s1.replace('<', '&lt;')
+    s1 = s1.replace('>', '&gt;')
+    if '"' in s1:
+        if "'" in s1:
+            s1 = '"%s"' % s1.replace('"', "&quot;")
+        else:
+            s1 = "'%s'" % s1
+    else:
+        s1 = '"%s"' % s1
+    return s1
+
+
+def quote_python(inStr):
+    s1 = inStr
+    if s1.find("'") == -1:
+        if s1.find('\n') == -1:
+            return "'%s'" % s1
+        else:
+            return "'''%s'''" % s1
+    else:
+        if s1.find('"') != -1:
+            s1 = s1.replace('"', '\\"')
+        if s1.find('\n') == -1:
+            return '"%s"' % s1
+        else:
+            return '"""%s"""' % s1
+
+
+def get_all_text_(node):
+    if node.text is not None:
+        text = node.text
+    else:
+        text = ''
+    for child in node:
+        if child.tail is not None:
+            text += child.tail
+    return text
+
+
+def find_attr_value_(attr_name, node):
+    attrs = node.attrib
+    attr_parts = attr_name.split(':')
+    value = None
+    if len(attr_parts) == 1:
+        value = attrs.get(attr_name)
+    elif len(attr_parts) == 2:
+        prefix, name = attr_parts
+        namespace = node.nsmap.get(prefix)
+        if namespace is not None:
+            value = attrs.get('{%s}%s' % (namespace, name, ))
+    return value
+
+
+class GDSParseError(Exception):
+    pass
+
+
+def raise_parse_error(node, msg):
+    if XMLParser_import_library == XMLParser_import_lxml:
+        msg = '%s (element %s/line %d)' % (
+            msg, node.tag, node.sourceline, )
+    else:
+        msg = '%s (element %s)' % (msg, node.tag, )
+    raise GDSParseError(msg)
+
+
+class MixedContainer:
+    # Constants for category:
+    CategoryNone = 0
+    CategoryText = 1
+    CategorySimple = 2
+    CategoryComplex = 3
+    # Constants for content_type:
+    TypeNone = 0
+    TypeText = 1
+    TypeString = 2
+    TypeInteger = 3
+    TypeFloat = 4
+    TypeDecimal = 5
+    TypeDouble = 6
+    TypeBoolean = 7
+    TypeBase64 = 8
+    def __init__(self, category, content_type, name, value):
+        self.category = category
+        self.content_type = content_type
+        self.name = name
+        self.value = value
+    def getCategory(self):
+        return self.category
+    def getContenttype(self, content_type):
+        return self.content_type
+    def getValue(self):
+        return self.value
+    def getName(self):
+        return self.name
+    def export(self, outfile, level, name, namespace, pretty_print=True):
+        if self.category == MixedContainer.CategoryText:
+            # Prevent exporting empty content as empty lines.
+            if self.value.strip():
+                outfile.write(self.value)
+        elif self.category == MixedContainer.CategorySimple:
+            self.exportSimple(outfile, level, name)
+        else:    # category == MixedContainer.CategoryComplex
+            self.value.export(outfile, level, namespace, name, pretty_print)
+    def exportSimple(self, outfile, level, name):
+        if self.content_type == MixedContainer.TypeString:
+            outfile.write('<%s>%s</%s>' % (
+                self.name, self.value, self.name))
+        elif self.content_type == MixedContainer.TypeInteger or \
+                self.content_type == MixedContainer.TypeBoolean:
+            outfile.write('<%s>%d</%s>' % (
+                self.name, self.value, self.name))
+        elif self.content_type == MixedContainer.TypeFloat or \
+                self.content_type == MixedContainer.TypeDecimal:
+            outfile.write('<%s>%f</%s>' % (
+                self.name, self.value, self.name))
+        elif self.content_type == MixedContainer.TypeDouble:
+            outfile.write('<%s>%g</%s>' % (
+                self.name, self.value, self.name))
+        elif self.content_type == MixedContainer.TypeBase64:
+            outfile.write('<%s>%s</%s>' % (
+                self.name, base64.b64encode(self.value), self.name))
+    def to_etree(self, element):
+        if self.category == MixedContainer.CategoryText:
+            # Prevent exporting empty content as empty lines.
+            if self.value.strip():
+                if len(element) > 0:
+                    if element[-1].tail is None:
+                        element[-1].tail = self.value
+                    else:
+                        element[-1].tail += self.value
+                else:
+                    if element.text is None:
+                        element.text = self.value
+                    else:
+                        element.text += self.value
+        elif self.category == MixedContainer.CategorySimple:
+            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement.text = self.to_etree_simple()
+        else:    # category == MixedContainer.CategoryComplex
+            self.value.to_etree(element)
+    def to_etree_simple(self):
+        if self.content_type == MixedContainer.TypeString:
+            text = self.value
+        elif (self.content_type == MixedContainer.TypeInteger or
+                self.content_type == MixedContainer.TypeBoolean):
+            text = '%d' % self.value
+        elif (self.content_type == MixedContainer.TypeFloat or
+                self.content_type == MixedContainer.TypeDecimal):
+            text = '%f' % self.value
+        elif self.content_type == MixedContainer.TypeDouble:
+            text = '%g' % self.value
+        elif self.content_type == MixedContainer.TypeBase64:
+            text = '%s' % base64.b64encode(self.value)
+        return text
+    def exportLiteral(self, outfile, level, name):
+        if self.category == MixedContainer.CategoryText:
+            showIndent(outfile, level)
+            outfile.write(
+                'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
+                    self.category, self.content_type, self.name, self.value))
+        elif self.category == MixedContainer.CategorySimple:
+            showIndent(outfile, level)
+            outfile.write(
+                'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
+                    self.category, self.content_type, self.name, self.value))
+        else:    # category == MixedContainer.CategoryComplex
+            showIndent(outfile, level)
+            outfile.write(
+                'model_.MixedContainer(%d, %d, "%s",\n' % (
+                    self.category, self.content_type, self.name,))
+            self.value.exportLiteral(outfile, level + 1)
+            showIndent(outfile, level)
+            outfile.write(')\n')
+
+
+class MemberSpec_(object):
+    def __init__(self, name='', data_type='', container=0):
+        self.name = name
+        self.data_type = data_type
+        self.container = container
+    def set_name(self, name): self.name = name
+    def get_name(self): return self.name
+    def set_data_type(self, data_type): self.data_type = data_type
+    def get_data_type_chain(self): return self.data_type
+    def get_data_type(self):
+        if isinstance(self.data_type, list):
+            if len(self.data_type) > 0:
+                return self.data_type[-1]
+            else:
+                return 'xs:string'
+        else:
+            return self.data_type
+    def set_container(self, container): self.container = container
+    def get_container(self): return self.container
+
+
+def _cast(typ, value):
+    if typ is None or value is None:
+        return value
+    return typ(value)
+
+#
+# Data representation classes.
+#
+
+
+class tomato_people(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('comments', 'comments', 1),
+        MemberSpec_('person', 'person', 1),
+        MemberSpec_('programmer', 'programmer', 1),
+        MemberSpec_('python_programmer', 'python-programmer', 1),
+        MemberSpec_('java_programmer', 'java-programmer', 1),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, comments=None, person=None, programmer=None, python_programmer=None, java_programmer=None):
+        self.original_tagname_ = None
+        if comments is None:
+            self.comments = []
+        else:
+            self.comments = comments
+        if person is None:
+            self.person = []
+        else:
+            self.person = person
+        if programmer is None:
+            self.programmer = []
+        else:
+            self.programmer = programmer
+        if python_programmer is None:
+            self.python_programmer = []
+        else:
+            self.python_programmer = python_programmer
+        if java_programmer is None:
+            self.java_programmer = []
+        else:
+            self.java_programmer = java_programmer
+    def factory(*args_, **kwargs_):
+        if tomato_people.subclass:
+            return tomato_people.subclass(*args_, **kwargs_)
+        else:
+            return tomato_people(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_comments(self): return self.comments
+    def set_comments(self, comments): self.comments = comments
+    def add_comments(self, value): self.comments.append(value)
+    def insert_comments_at(self, index, value): self.comments.insert(index, value)
+    def replace_comments_at(self, index, value): self.comments[index] = value
+    def get_person(self): return self.person
+    def set_person(self, person): self.person = person
+    def add_person(self, value): self.person.append(value)
+    def insert_person_at(self, index, value): self.person.insert(index, value)
+    def replace_person_at(self, index, value): self.person[index] = value
+    def get_programmer(self): return self.programmer
+    def set_programmer(self, programmer): self.programmer = programmer
+    def add_programmer(self, value): self.programmer.append(value)
+    def insert_programmer_at(self, index, value): self.programmer.insert(index, value)
+    def replace_programmer_at(self, index, value): self.programmer[index] = value
+    def get_python_programmer(self): return self.python_programmer
+    def set_python_programmer(self, python_programmer): self.python_programmer = python_programmer
+    def add_python_programmer(self, value): self.python_programmer.append(value)
+    def insert_python_programmer_at(self, index, value): self.python_programmer.insert(index, value)
+    def replace_python_programmer_at(self, index, value): self.python_programmer[index] = value
+    def get_java_programmer(self): return self.java_programmer
+    def set_java_programmer(self, java_programmer): self.java_programmer = java_programmer
+    def add_java_programmer(self, value): self.java_programmer.append(value)
+    def insert_java_programmer_at(self, index, value): self.java_programmer.insert(index, value)
+    def replace_java_programmer_at(self, index, value): self.java_programmer[index] = value
+    def hasContent_(self):
+        if (
+            self.comments or
+            self.person or
+            self.programmer or
+            self.python_programmer or
+            self.java_programmer
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='people', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='people')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='people', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='people'):
+        pass
+    def exportChildren(self, outfile, level, namespace_='', name_='people', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for comments_ in self.comments:
+            comments_.export(outfile, level, namespace_, name_='comments', pretty_print=pretty_print)
+        for person_ in self.person:
+            person_.export(outfile, level, namespace_, name_='person', pretty_print=pretty_print)
+        for programmer_ in self.programmer:
+            programmer_.export(outfile, level, namespace_, name_='programmer', pretty_print=pretty_print)
+        for python_programmer_ in self.python_programmer:
+            python_programmer_.export(outfile, level, namespace_, name_='python-programmer', pretty_print=pretty_print)
+        for java_programmer_ in self.java_programmer:
+            java_programmer_.export(outfile, level, namespace_, name_='java-programmer', pretty_print=pretty_print)
+    def exportLiteral(self, outfile, level, name_='people'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        pass
+    def exportLiteralChildren(self, outfile, level, name_):
+        showIndent(outfile, level)
+        outfile.write('comments=[\n')
+        level += 1
+        for comments_ in self.comments:
+            showIndent(outfile, level)
+            outfile.write('model_.comments(\n')
+            comments_.exportLiteral(outfile, level)
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        showIndent(outfile, level)
+        outfile.write('person=[\n')
+        level += 1
+        for person_ in self.person:
+            showIndent(outfile, level)
+            outfile.write('model_.person(\n')
+            person_.exportLiteral(outfile, level)
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        showIndent(outfile, level)
+        outfile.write('programmer=[\n')
+        level += 1
+        for programmer_ in self.programmer:
+            showIndent(outfile, level)
+            outfile.write('model_.programmer(\n')
+            programmer_.exportLiteral(outfile, level)
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        showIndent(outfile, level)
+        outfile.write('python_programmer=[\n')
+        level += 1
+        for python_programmer_ in self.python_programmer:
+            showIndent(outfile, level)
+            outfile.write('model_.python_programmer(\n')
+            python_programmer_.exportLiteral(outfile, level, name_='python-programmer')
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        showIndent(outfile, level)
+        outfile.write('java_programmer=[\n')
+        level += 1
+        for java_programmer_ in self.java_programmer:
+            showIndent(outfile, level)
+            outfile.write('model_.java_programmer(\n')
+            java_programmer_.exportLiteral(outfile, level, name_='java-programmer')
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        pass
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'comments':
+            obj_ = tomato_comments.factory()
+            obj_.build(child_)
+            self.comments.append(obj_)
+            obj_.original_tagname_ = 'comments'
+        elif nodeName_ == 'person':
+            class_obj_ = self.get_class_obj_(child_, tomato_person)
+            obj_ = class_obj_.factory()
+            obj_.build(child_)
+            self.person.append(obj_)
+            obj_.original_tagname_ = 'person'
+        elif nodeName_ == 'programmer':
+            class_obj_ = self.get_class_obj_(child_, tomato_programmer)
+            obj_ = class_obj_.factory()
+            obj_.build(child_)
+            self.programmer.append(obj_)
+            obj_.original_tagname_ = 'programmer'
+        elif nodeName_ == 'python-programmer':
+            obj_ = tomato_python_programmer.factory()
+            obj_.build(child_)
+            self.python_programmer.append(obj_)
+            obj_.original_tagname_ = 'python-programmer'
+        elif nodeName_ == 'java-programmer':
+            obj_ = tomato_java_programmer.factory()
+            obj_.build(child_)
+            self.java_programmer.append(obj_)
+            obj_.original_tagname_ = 'java-programmer'
+# end class tomato_people
+
+
+class tomato_comments(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('emp', 'xs:string', 1),
+        MemberSpec_('valueOf_', [], 0),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, emp=None, valueOf_=None, mixedclass_=None, content_=None):
+        self.original_tagname_ = None
+        if emp is None:
+            self.emp = []
+        else:
+            self.emp = emp
+        self.valueOf_ = valueOf_
+        if mixedclass_ is None:
+            self.mixedclass_ = MixedContainer
+        else:
+            self.mixedclass_ = mixedclass_
+        if content_ is None:
+            self.content_ = []
+        else:
+            self.content_ = content_
+        self.valueOf_ = valueOf_
+    def factory(*args_, **kwargs_):
+        if tomato_comments.subclass:
+            return tomato_comments.subclass(*args_, **kwargs_)
+        else:
+            return tomato_comments(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_emp(self): return self.emp
+    def set_emp(self, emp): self.emp = emp
+    def add_emp(self, value): self.emp.append(value)
+    def insert_emp_at(self, index, value): self.emp.insert(index, value)
+    def replace_emp_at(self, index, value): self.emp[index] = value
+    def get_valueOf_(self): return self.valueOf_
+    def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
+    def hasContent_(self):
+        if (
+            self.emp or
+            self.valueOf_
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='comments', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='comments')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='comments', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='comments'):
+        pass
+    def exportChildren(self, outfile, level, namespace_='', name_='comments', fromsubclass_=False, pretty_print=True):
+        if not fromsubclass_:
+            for item_ in self.content_:
+                item_.export(outfile, level, item_.name, namespace_, pretty_print=pretty_print)
+    def exportLiteral(self, outfile, level, name_='comments'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+        showIndent(outfile, level)
+        outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        pass
+    def exportLiteralChildren(self, outfile, level, name_):
+        showIndent(outfile, level)
+        outfile.write('content_ = [\n')
+        for item_ in self.content_:
+            item_.exportLiteral(outfile, level, name_)
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        pass
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        self.valueOf_ = get_all_text_(node)
+        if node.text is not None:
+            obj_ = self.mixedclass_(MixedContainer.CategoryText,
+                MixedContainer.TypeNone, '', node.text)
+            self.content_.append(obj_)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        pass
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'emp' and child_.text is not None:
+            valuestr_ = child_.text
+            obj_ = self.mixedclass_(MixedContainer.CategorySimple,
+                MixedContainer.TypeString, 'emp', valuestr_)
+            self.content_.append(obj_)
+        if not fromsubclass_ and child_.tail is not None:
+            obj_ = self.mixedclass_(MixedContainer.CategoryText,
+                MixedContainer.TypeNone, '', child_.tail)
+            self.content_.append(obj_)
+# end class tomato_comments
+
+
+class tomato_person(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('vegetable', 'xs:string', 0),
+        MemberSpec_('fruit', 'xs:string', 0),
+        MemberSpec_('ratio', 'xs:float', 0),
+        MemberSpec_('id', 'xs:integer', 0),
+        MemberSpec_('value', 'xs:string', 0),
+        MemberSpec_('name', 'xs:string', 0),
+        MemberSpec_('interest', 'xs:string', 1),
+        MemberSpec_('category', 'xs:integer', 0),
+        MemberSpec_('agent', 'agent', 1),
+        MemberSpec_('promoter', 'booster', 1),
+        MemberSpec_('description', 'xs:string', 0),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, extensiontype_=None):
+        self.original_tagname_ = None
+        self.vegetable = _cast(None, vegetable)
+        self.fruit = _cast(None, fruit)
+        self.ratio = _cast(float, ratio)
+        self.id = _cast(int, id)
+        self.value = _cast(None, value)
+        self.name = name
+        if interest is None:
+            self.interest = []
+        else:
+            self.interest = interest
+        self.category = category
+        if agent is None:
+            self.agent = []
+        else:
+            self.agent = agent
+        if promoter is None:
+            self.promoter = []
+        else:
+            self.promoter = promoter
+        self.description = description
+        self.extensiontype_ = extensiontype_
+    def factory(*args_, **kwargs_):
+        if tomato_person.subclass:
+            return tomato_person.subclass(*args_, **kwargs_)
+        else:
+            return tomato_person(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_name(self): return self.name
+    def set_name(self, name): self.name = name
+    def get_interest(self): return self.interest
+    def set_interest(self, interest): self.interest = interest
+    def add_interest(self, value): self.interest.append(value)
+    def insert_interest_at(self, index, value): self.interest.insert(index, value)
+    def replace_interest_at(self, index, value): self.interest[index] = value
+    def get_category(self): return self.category
+    def set_category(self, category): self.category = category
+    def get_agent(self): return self.agent
+    def set_agent(self, agent): self.agent = agent
+    def add_agent(self, value): self.agent.append(value)
+    def insert_agent_at(self, index, value): self.agent.insert(index, value)
+    def replace_agent_at(self, index, value): self.agent[index] = value
+    def get_promoter(self): return self.promoter
+    def set_promoter(self, promoter): self.promoter = promoter
+    def add_promoter(self, value): self.promoter.append(value)
+    def insert_promoter_at(self, index, value): self.promoter.insert(index, value)
+    def replace_promoter_at(self, index, value): self.promoter[index] = value
+    def get_description(self): return self.description
+    def set_description(self, description): self.description = description
+    def get_vegetable(self): return self.vegetable
+    def set_vegetable(self, vegetable): self.vegetable = vegetable
+    def get_fruit(self): return self.fruit
+    def set_fruit(self, fruit): self.fruit = fruit
+    def get_ratio(self): return self.ratio
+    def set_ratio(self, ratio): self.ratio = ratio
+    def get_id(self): return self.id
+    def set_id(self, id): self.id = id
+    def get_value(self): return self.value
+    def set_value(self, value): self.value = value
+    def get_extensiontype_(self): return self.extensiontype_
+    def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_
+    def hasContent_(self):
+        if (
+            self.name is not None or
+            self.interest or
+            self.category is not None or
+            self.agent or
+            self.promoter or
+            self.description is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='person', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='person')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='person', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='person'):
+        if self.vegetable is not None and 'vegetable' not in already_processed:
+            already_processed.add('vegetable')
+            outfile.write(' vegetable=%s' % (self.gds_format_string(quote_attrib(self.vegetable).encode(ExternalEncoding), input_name='vegetable'), ))
+        if self.fruit is not None and 'fruit' not in already_processed:
+            already_processed.add('fruit')
+            outfile.write(' fruit=%s' % (self.gds_format_string(quote_attrib(self.fruit).encode(ExternalEncoding), input_name='fruit'), ))
+        if self.ratio is not None and 'ratio' not in already_processed:
+            already_processed.add('ratio')
+            outfile.write(' ratio="%s"' % self.gds_format_float(self.ratio, input_name='ratio'))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id'))
+        if self.value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            outfile.write(' value=%s' % (self.gds_format_string(quote_attrib(self.value).encode(ExternalEncoding), input_name='value'), ))
+        if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
+            already_processed.add('xsi:type')
+            outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
+            outfile.write(' xsi:type="%s"' % self.extensiontype_)
+    def exportChildren(self, outfile, level, namespace_='', name_='person', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.name is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sname>%s</%sname>%s' % (namespace_, self.gds_format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_, eol_))
+        for interest_ in self.interest:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sinterest>%s</%sinterest>%s' % (namespace_, self.gds_format_string(quote_xml(interest_).encode(ExternalEncoding), input_name='interest'), namespace_, eol_))
+        if self.category is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%scategory>%s</%scategory>%s' % (namespace_, self.gds_format_integer(self.category, input_name='category'), namespace_, eol_))
+        for agent_ in self.agent:
+            agent_.export(outfile, level, namespace_, name_='agent', pretty_print=pretty_print)
+        for promoter_ in self.promoter:
+            promoter_.export(outfile, level, namespace_, name_='promoter', pretty_print=pretty_print)
+        if self.description is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sdescription>%s</%sdescription>%s' % (namespace_, self.gds_format_string(quote_xml(self.description).encode(ExternalEncoding), input_name='description'), namespace_, eol_))
+    def exportLiteral(self, outfile, level, name_='person'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        if self.vegetable is not None and 'vegetable' not in already_processed:
+            already_processed.add('vegetable')
+            showIndent(outfile, level)
+            outfile.write('vegetable="%s",\n' % (self.vegetable,))
+        if self.fruit is not None and 'fruit' not in already_processed:
+            already_processed.add('fruit')
+            showIndent(outfile, level)
+            outfile.write('fruit="%s",\n' % (self.fruit,))
+        if self.ratio is not None and 'ratio' not in already_processed:
+            already_processed.add('ratio')
+            showIndent(outfile, level)
+            outfile.write('ratio=%f,\n' % (self.ratio,))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            showIndent(outfile, level)
+            outfile.write('id=%d,\n' % (self.id,))
+        if self.value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            showIndent(outfile, level)
+            outfile.write('value="%s",\n' % (self.value,))
+    def exportLiteralChildren(self, outfile, level, name_):
+        if self.name is not None:
+            showIndent(outfile, level)
+            outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding))
+        showIndent(outfile, level)
+        outfile.write('interest=[\n')
+        level += 1
+        for interest_ in self.interest:
+            showIndent(outfile, level)
+            outfile.write('%s,\n' % quote_python(interest_).encode(ExternalEncoding))
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        if self.category is not None:
+            showIndent(outfile, level)
+            outfile.write('category=%d,\n' % self.category)
+        showIndent(outfile, level)
+        outfile.write('agent=[\n')
+        level += 1
+        for agent_ in self.agent:
+            showIndent(outfile, level)
+            outfile.write('model_.agent(\n')
+            agent_.exportLiteral(outfile, level)
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        showIndent(outfile, level)
+        outfile.write('promoter=[\n')
+        level += 1
+        for promoter_ in self.promoter:
+            showIndent(outfile, level)
+            outfile.write('model_.booster(\n')
+            promoter_.exportLiteral(outfile, level, name_='booster')
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        if self.description is not None:
+            showIndent(outfile, level)
+            outfile.write('description=%s,\n' % quote_python(self.description).encode(ExternalEncoding))
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('vegetable', node)
+        if value is not None and 'vegetable' not in already_processed:
+            already_processed.add('vegetable')
+            self.vegetable = value
+        value = find_attr_value_('fruit', node)
+        if value is not None and 'fruit' not in already_processed:
+            already_processed.add('fruit')
+            self.fruit = value
+        value = find_attr_value_('ratio', node)
+        if value is not None and 'ratio' not in already_processed:
+            already_processed.add('ratio')
+            try:
+                self.ratio = float(value)
+            except ValueError, exp:
+                raise ValueError('Bad float/double attribute (ratio): %s' % exp)
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            try:
+                self.id = int(value)
+            except ValueError, exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+        value = find_attr_value_('value', node)
+        if value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            self.value = value
+        value = find_attr_value_('xsi:type', node)
+        if value is not None and 'xsi:type' not in already_processed:
+            already_processed.add('xsi:type')
+            self.extensiontype_ = value
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'name':
+            name_ = child_.text
+            name_ = self.gds_validate_string(name_, node, 'name')
+            self.name = name_
+        elif nodeName_ == 'interest':
+            interest_ = child_.text
+            interest_ = self.gds_validate_string(interest_, node, 'interest')
+            self.interest.append(interest_)
+        elif nodeName_ == 'category':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            ival_ = self.gds_validate_integer(ival_, node, 'category')
+            self.category = ival_
+        elif nodeName_ == 'agent':
+            obj_ = tomato_agent.factory()
+            obj_.build(child_)
+            self.agent.append(obj_)
+            obj_.original_tagname_ = 'agent'
+        elif nodeName_ == 'promoter':
+            obj_ = tomato_booster.factory()
+            obj_.build(child_)
+            self.promoter.append(obj_)
+            obj_.original_tagname_ = 'promoter'
+        elif nodeName_ == 'description':
+            description_ = child_.text
+            description_ = self.gds_validate_string(description_, node, 'description')
+            self.description = description_
+# end class tomato_person
+
+
+class tomato_programmer(tomato_person):
+    member_data_items_ = [
+        MemberSpec_('language', 'xs:string', 0),
+        MemberSpec_('area', 'xs:string', 0),
+        MemberSpec_('attrnegint', 'xs:negativeInteger', 0),
+        MemberSpec_('attrposint', 'xs:positiveInteger', 0),
+        MemberSpec_('attrnonnegint', 'xs:nonNegativeInteger', 0),
+        MemberSpec_('attrnonposint', 'xs:nonPositiveInteger', 0),
+        MemberSpec_('email', 'xs:string', 0),
+        MemberSpec_('elposint', 'xs:positiveInteger', 0),
+        MemberSpec_('elnonposint', 'xs:nonPositiveInteger', 0),
+        MemberSpec_('elnegint', 'xs:negativeInteger', 0),
+        MemberSpec_('elnonnegint', 'xs:nonNegativeInteger', 0),
+        MemberSpec_('eldate', 'xs:date', 0),
+        MemberSpec_('eldatetime', 'xs:dateTime', 0),
+        MemberSpec_('eltoken', 'xs:token', 0),
+        MemberSpec_('elshort', 'xs:short', 0),
+        MemberSpec_('ellong', 'xs:long', 0),
+        MemberSpec_('elparam', 'param', 0),
+        MemberSpec_('elarraytypes', ['ArrayTypes', 'xs:NMTOKEN'], 0),
+    ]
+    subclass = None
+    superclass = tomato_person
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, extensiontype_=None):
+        self.original_tagname_ = None
+        super(tomato_programmer, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, extensiontype_, )
+        self.language = _cast(None, language)
+        self.area = _cast(None, area)
+        self.attrnegint = _cast(int, attrnegint)
+        self.attrposint = _cast(int, attrposint)
+        self.attrnonnegint = _cast(int, attrnonnegint)
+        self.attrnonposint = _cast(int, attrnonposint)
+        self.email = email
+        self.elposint = elposint
+        self.elnonposint = elnonposint
+        self.elnegint = elnegint
+        self.elnonnegint = elnonnegint
+        if isinstance(eldate, basestring):
+            initvalue_ = datetime_.datetime.strptime(eldate, '%Y-%m-%d').date()
+        else:
+            initvalue_ = eldate
+        self.eldate = initvalue_
+        if isinstance(eldatetime, basestring):
+            initvalue_ = datetime_.datetime.strptime(eldatetime, '%Y-%m-%dT%H:%M:%S')
+        else:
+            initvalue_ = eldatetime
+        self.eldatetime = initvalue_
+        self.eltoken = eltoken
+        self.elshort = elshort
+        self.ellong = ellong
+        self.elparam = elparam
+        self.elarraytypes = elarraytypes
+        self.extensiontype_ = extensiontype_
+    def factory(*args_, **kwargs_):
+        if tomato_programmer.subclass:
+            return tomato_programmer.subclass(*args_, **kwargs_)
+        else:
+            return tomato_programmer(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_email(self): return self.email
+    def set_email(self, email): self.email = email
+    def get_elposint(self): return self.elposint
+    def set_elposint(self, elposint): self.elposint = elposint
+    def get_elnonposint(self): return self.elnonposint
+    def set_elnonposint(self, elnonposint): self.elnonposint = elnonposint
+    def get_elnegint(self): return self.elnegint
+    def set_elnegint(self, elnegint): self.elnegint = elnegint
+    def get_elnonnegint(self): return self.elnonnegint
+    def set_elnonnegint(self, elnonnegint): self.elnonnegint = elnonnegint
+    def get_eldate(self): return self.eldate
+    def set_eldate(self, eldate): self.eldate = eldate
+    def get_eldatetime(self): return self.eldatetime
+    def set_eldatetime(self, eldatetime): self.eldatetime = eldatetime
+    def get_eltoken(self): return self.eltoken
+    def set_eltoken(self, eltoken): self.eltoken = eltoken
+    def get_elshort(self): return self.elshort
+    def set_elshort(self, elshort): self.elshort = elshort
+    def get_ellong(self): return self.ellong
+    def set_ellong(self, ellong): self.ellong = ellong
+    def get_elparam(self): return self.elparam
+    def set_elparam(self, elparam): self.elparam = elparam
+    def get_elarraytypes(self): return self.elarraytypes
+    def set_elarraytypes(self, elarraytypes): self.elarraytypes = elarraytypes
+    def get_language(self): return self.language
+    def set_language(self, language): self.language = language
+    def get_area(self): return self.area
+    def set_area(self, area): self.area = area
+    def get_attrnegint(self): return self.attrnegint
+    def set_attrnegint(self, attrnegint): self.attrnegint = attrnegint
+    def get_attrposint(self): return self.attrposint
+    def set_attrposint(self, attrposint): self.attrposint = attrposint
+    def get_attrnonnegint(self): return self.attrnonnegint
+    def set_attrnonnegint(self, attrnonnegint): self.attrnonnegint = attrnonnegint
+    def get_attrnonposint(self): return self.attrnonposint
+    def set_attrnonposint(self, attrnonposint): self.attrnonposint = attrnonposint
+    def get_extensiontype_(self): return self.extensiontype_
+    def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_
+    def validate_ArrayTypes(self, value):
+        # Validate type ArrayTypes, a restriction on xs:NMTOKEN.
+        pass
+    def hasContent_(self):
+        if (
+            self.email is not None or
+            self.elposint is not None or
+            self.elnonposint is not None or
+            self.elnegint is not None or
+            self.elnonnegint is not None or
+            self.eldate is not None or
+            self.eldatetime is not None or
+            self.eltoken is not None or
+            self.elshort is not None or
+            self.ellong is not None or
+            self.elparam is not None or
+            self.elarraytypes is not None or
+            super(tomato_programmer, self).hasContent_()
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='programmer', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='programmer')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='programmer', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='programmer'):
+        super(tomato_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='programmer')
+        if self.language is not None and 'language' not in already_processed:
+            already_processed.add('language')
+            outfile.write(' language=%s' % (self.gds_format_string(quote_attrib(self.language).encode(ExternalEncoding), input_name='language'), ))
+        if self.area is not None and 'area' not in already_processed:
+            already_processed.add('area')
+            outfile.write(' area=%s' % (self.gds_format_string(quote_attrib(self.area).encode(ExternalEncoding), input_name='area'), ))
+        if self.attrnegint is not None and 'attrnegint' not in already_processed:
+            already_processed.add('attrnegint')
+            outfile.write(' attrnegint="%s"' % self.gds_format_integer(self.attrnegint, input_name='attrnegint'))
+        if self.attrposint is not None and 'attrposint' not in already_processed:
+            already_processed.add('attrposint')
+            outfile.write(' attrposint="%s"' % self.gds_format_integer(self.attrposint, input_name='attrposint'))
+        if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed:
+            already_processed.add('attrnonnegint')
+            outfile.write(' attrnonnegint="%s"' % self.gds_format_integer(self.attrnonnegint, input_name='attrnonnegint'))
+        if self.attrnonposint is not None and 'attrnonposint' not in already_processed:
+            already_processed.add('attrnonposint')
+            outfile.write(' attrnonposint="%s"' % self.gds_format_integer(self.attrnonposint, input_name='attrnonposint'))
+        if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
+            already_processed.add('xsi:type')
+            outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
+            outfile.write(' xsi:type="%s"' % self.extensiontype_)
+    def exportChildren(self, outfile, level, namespace_='', name_='programmer', fromsubclass_=False, pretty_print=True):
+        super(tomato_programmer, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.email is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%semail>%s</%semail>%s' % (namespace_, self.gds_format_string(quote_xml(self.email).encode(ExternalEncoding), input_name='email'), namespace_, eol_))
+        if self.elposint is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%selposint>%s</%selposint>%s' % (namespace_, self.gds_format_integer(self.elposint, input_name='elposint'), namespace_, eol_))
+        if self.elnonposint is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%selnonposint>%s</%selnonposint>%s' % (namespace_, self.gds_format_integer(self.elnonposint, input_name='elnonposint'), namespace_, eol_))
+        if self.elnegint is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%selnegint>%s</%selnegint>%s' % (namespace_, self.gds_format_integer(self.elnegint, input_name='elnegint'), namespace_, eol_))
+        if self.elnonnegint is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%selnonnegint>%s</%selnonnegint>%s' % (namespace_, self.gds_format_integer(self.elnonnegint, input_name='elnonnegint'), namespace_, eol_))
+        if self.eldate is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%seldate>%s</%seldate>%s' % (namespace_, self.gds_format_date(self.eldate, input_name='eldate'), namespace_, eol_))
+        if self.eldatetime is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%seldatetime>%s</%seldatetime>%s' % (namespace_, self.gds_format_datetime(self.eldatetime, input_name='eldatetime'), namespace_, eol_))
+        if self.eltoken is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%seltoken>%s</%seltoken>%s' % (namespace_, self.gds_format_string(quote_xml(self.eltoken).encode(ExternalEncoding), input_name='eltoken'), namespace_, eol_))
+        if self.elshort is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%selshort>%s</%selshort>%s' % (namespace_, self.gds_format_integer(self.elshort, input_name='elshort'), namespace_, eol_))
+        if self.ellong is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sellong>%s</%sellong>%s' % (namespace_, self.gds_format_integer(self.ellong, input_name='ellong'), namespace_, eol_))
+        if self.elparam is not None:
+            self.elparam.export(outfile, level, namespace_, name_='elparam', pretty_print=pretty_print)
+        if self.elarraytypes is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%selarraytypes>%s</%selarraytypes>%s' % (namespace_, self.gds_format_string(quote_xml(self.elarraytypes).encode(ExternalEncoding), input_name='elarraytypes'), namespace_, eol_))
+    def exportLiteral(self, outfile, level, name_='programmer'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        if self.language is not None and 'language' not in already_processed:
+            already_processed.add('language')
+            showIndent(outfile, level)
+            outfile.write('language="%s",\n' % (self.language,))
+        if self.area is not None and 'area' not in already_processed:
+            already_processed.add('area')
+            showIndent(outfile, level)
+            outfile.write('area="%s",\n' % (self.area,))
+        if self.attrnegint is not None and 'attrnegint' not in already_processed:
+            already_processed.add('attrnegint')
+            showIndent(outfile, level)
+            outfile.write('attrnegint=%d,\n' % (self.attrnegint,))
+        if self.attrposint is not None and 'attrposint' not in already_processed:
+            already_processed.add('attrposint')
+            showIndent(outfile, level)
+            outfile.write('attrposint=%d,\n' % (self.attrposint,))
+        if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed:
+            already_processed.add('attrnonnegint')
+            showIndent(outfile, level)
+            outfile.write('attrnonnegint=%d,\n' % (self.attrnonnegint,))
+        if self.attrnonposint is not None and 'attrnonposint' not in already_processed:
+            already_processed.add('attrnonposint')
+            showIndent(outfile, level)
+            outfile.write('attrnonposint=%d,\n' % (self.attrnonposint,))
+        super(tomato_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
+    def exportLiteralChildren(self, outfile, level, name_):
+        super(tomato_programmer, self).exportLiteralChildren(outfile, level, name_)
+        if self.email is not None:
+            showIndent(outfile, level)
+            outfile.write('email=%s,\n' % quote_python(self.email).encode(ExternalEncoding))
+        if self.elposint is not None:
+            showIndent(outfile, level)
+            outfile.write('elposint=%d,\n' % self.elposint)
+        if self.elnonposint is not None:
+            showIndent(outfile, level)
+            outfile.write('elnonposint=%d,\n' % self.elnonposint)
+        if self.elnegint is not None:
+            showIndent(outfile, level)
+            outfile.write('elnegint=%d,\n' % self.elnegint)
+        if self.elnonnegint is not None:
+            showIndent(outfile, level)
+            outfile.write('elnonnegint=%d,\n' % self.elnonnegint)
+        if self.eldate is not None:
+            showIndent(outfile, level)
+            outfile.write('eldate=model_.GeneratedsSuper.gds_parse_date("%s"),\n' % self.gds_format_date(self.eldate, input_name='eldate'))
+        if self.eldatetime is not None:
+            showIndent(outfile, level)
+            outfile.write('eldatetime=model_.GeneratedsSuper.gds_parse_datetime("%s"),\n' % self.gds_format_datetime(self.eldatetime, input_name='eldatetime'))
+        if self.eltoken is not None:
+            showIndent(outfile, level)
+            outfile.write('eltoken=%s,\n' % quote_python(self.eltoken).encode(ExternalEncoding))
+        if self.elshort is not None:
+            showIndent(outfile, level)
+            outfile.write('elshort=%d,\n' % self.elshort)
+        if self.ellong is not None:
+            showIndent(outfile, level)
+            outfile.write('ellong=%d,\n' % self.ellong)
+        if self.elparam is not None:
+            showIndent(outfile, level)
+            outfile.write('elparam=model_.param(\n')
+            self.elparam.exportLiteral(outfile, level, name_='elparam')
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        if self.elarraytypes is not None:
+            showIndent(outfile, level)
+            outfile.write('elarraytypes=%s,\n' % quote_python(self.elarraytypes).encode(ExternalEncoding))
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('language', node)
+        if value is not None and 'language' not in already_processed:
+            already_processed.add('language')
+            self.language = value
+        value = find_attr_value_('area', node)
+        if value is not None and 'area' not in already_processed:
+            already_processed.add('area')
+            self.area = value
+        value = find_attr_value_('attrnegint', node)
+        if value is not None and 'attrnegint' not in already_processed:
+            already_processed.add('attrnegint')
+            try:
+                self.attrnegint = int(value)
+            except ValueError, exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.attrnegint >= 0:
+                raise_parse_error(node, 'Invalid NegativeInteger')
+        value = find_attr_value_('attrposint', node)
+        if value is not None and 'attrposint' not in already_processed:
+            already_processed.add('attrposint')
+            try:
+                self.attrposint = int(value)
+            except ValueError, exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.attrposint <= 0:
+                raise_parse_error(node, 'Invalid PositiveInteger')
+        value = find_attr_value_('attrnonnegint', node)
+        if value is not None and 'attrnonnegint' not in already_processed:
+            already_processed.add('attrnonnegint')
+            try:
+                self.attrnonnegint = int(value)
+            except ValueError, exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.attrnonnegint < 0:
+                raise_parse_error(node, 'Invalid NonNegativeInteger')
+        value = find_attr_value_('attrnonposint', node)
+        if value is not None and 'attrnonposint' not in already_processed:
+            already_processed.add('attrnonposint')
+            try:
+                self.attrnonposint = int(value)
+            except ValueError, exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.attrnonposint > 0:
+                raise_parse_error(node, 'Invalid NonPositiveInteger')
+        value = find_attr_value_('xsi:type', node)
+        if value is not None and 'xsi:type' not in already_processed:
+            already_processed.add('xsi:type')
+            self.extensiontype_ = value
+        super(tomato_programmer, self).buildAttributes(node, attrs, already_processed)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'email':
+            email_ = child_.text
+            email_ = self.gds_validate_string(email_, node, 'email')
+            self.email = email_
+        elif nodeName_ == 'elposint':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            if ival_ <= 0:
+                raise_parse_error(child_, 'requires positiveInteger')
+            ival_ = self.gds_validate_integer(ival_, node, 'elposint')
+            self.elposint = ival_
+        elif nodeName_ == 'elnonposint':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            if ival_ > 0:
+                raise_parse_error(child_, 'requires nonPositiveInteger')
+            ival_ = self.gds_validate_integer(ival_, node, 'elnonposint')
+            self.elnonposint = ival_
+        elif nodeName_ == 'elnegint':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            if ival_ >= 0:
+                raise_parse_error(child_, 'requires negativeInteger')
+            ival_ = self.gds_validate_integer(ival_, node, 'elnegint')
+            self.elnegint = ival_
+        elif nodeName_ == 'elnonnegint':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            if ival_ < 0:
+                raise_parse_error(child_, 'requires nonNegativeInteger')
+            ival_ = self.gds_validate_integer(ival_, node, 'elnonnegint')
+            self.elnonnegint = ival_
+        elif nodeName_ == 'eldate':
+            sval_ = child_.text
+            dval_ = self.gds_parse_date(sval_)
+            self.eldate = dval_
+        elif nodeName_ == 'eldatetime':
+            sval_ = child_.text
+            dval_ = self.gds_parse_datetime(sval_)
+            self.eldatetime = dval_
+        elif nodeName_ == 'eltoken':
+            eltoken_ = child_.text
+            eltoken_ = re_.sub(String_cleanup_pat_, " ", eltoken_).strip()
+            eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken')
+            self.eltoken = eltoken_
+        elif nodeName_ == 'elshort':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            ival_ = self.gds_validate_integer(ival_, node, 'elshort')
+            self.elshort = ival_
+        elif nodeName_ == 'ellong':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            ival_ = self.gds_validate_integer(ival_, node, 'ellong')
+            self.ellong = ival_
+        elif nodeName_ == 'elparam':
+            obj_ = tomato_param.factory()
+            obj_.build(child_)
+            self.elparam = obj_
+            obj_.original_tagname_ = 'elparam'
+        elif nodeName_ == 'elarraytypes':
+            elarraytypes_ = child_.text
+            elarraytypes_ = self.gds_validate_string(elarraytypes_, node, 'elarraytypes')
+            self.elarraytypes = elarraytypes_
+            self.validate_ArrayTypes(self.elarraytypes)    # validate type ArrayTypes
+        super(tomato_programmer, self).buildChildren(child_, node, nodeName_, True)
+# end class tomato_programmer
+
+
+class tomato_param(GeneratedsSuper):
+    """Finding flow attribute unneccesary in practice. A unnamed parameter
+    is unbound/skipped."""
+    member_data_items_ = [
+        MemberSpec_('semantic', 'xs:token', 0),
+        MemberSpec_('name', 'xs:NCName', 0),
+        MemberSpec_('flow', 'FlowType', 0),
+        MemberSpec_('sid', 'xs:NCName', 0),
+        MemberSpec_('type', 'xs:NMTOKEN', 0),
+        MemberSpec_('id', 'xs:string', 0),
+        MemberSpec_('valueOf_', 'xs:string', 0),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, semantic=None, name=None, flow=None, sid=None, type_=None, id=None, valueOf_=None):
+        self.original_tagname_ = None
+        self.semantic = _cast(None, semantic)
+        self.name = _cast(None, name)
+        self.flow = _cast(None, flow)
+        self.sid = _cast(None, sid)
+        self.type_ = _cast(None, type_)
+        self.id = _cast(None, id)
+        self.valueOf_ = valueOf_
+    def factory(*args_, **kwargs_):
+        if tomato_param.subclass:
+            return tomato_param.subclass(*args_, **kwargs_)
+        else:
+            return tomato_param(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_semantic(self): return self.semantic
+    def set_semantic(self, semantic): self.semantic = semantic
+    def get_name(self): return self.name
+    def set_name(self, name): self.name = name
+    def get_flow(self): return self.flow
+    def set_flow(self, flow): self.flow = flow
+    def get_sid(self): return self.sid
+    def set_sid(self, sid): self.sid = sid
+    def get_type(self): return self.type_
+    def set_type(self, type_): self.type_ = type_
+    def get_id(self): return self.id
+    def set_id(self, id): self.id = id
+    def get_valueOf_(self): return self.valueOf_
+    def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
+    def hasContent_(self):
+        if (
+            self.valueOf_
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='param', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='param')
+        if self.hasContent_():
+            outfile.write('>')
+            outfile.write(str(self.valueOf_).encode(ExternalEncoding))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='param', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='param'):
+        if self.semantic is not None and 'semantic' not in already_processed:
+            already_processed.add('semantic')
+            outfile.write(' semantic=%s' % (self.gds_format_string(quote_attrib(self.semantic).encode(ExternalEncoding), input_name='semantic'), ))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (quote_attrib(self.name), ))
+        if self.flow is not None and 'flow' not in already_processed:
+            already_processed.add('flow')
+            outfile.write(' flow=%s' % (quote_attrib(self.flow), ))
+        if self.sid is not None and 'sid' not in already_processed:
+            already_processed.add('sid')
+            outfile.write(' sid=%s' % (quote_attrib(self.sid), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_format_string(quote_attrib(self.type_).encode(ExternalEncoding), input_name='type'), ))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), ))
+    def exportChildren(self, outfile, level, namespace_='', name_='param', fromsubclass_=False, pretty_print=True):
+        pass
+    def exportLiteral(self, outfile, level, name_='param'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+        showIndent(outfile, level)
+        outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        if self.semantic is not None and 'semantic' not in already_processed:
+            already_processed.add('semantic')
+            showIndent(outfile, level)
+            outfile.write('semantic="%s",\n' % (self.semantic,))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            showIndent(outfile, level)
+            outfile.write('name="%s",\n' % (self.name,))
+        if self.flow is not None and 'flow' not in already_processed:
+            already_processed.add('flow')
+            showIndent(outfile, level)
+            outfile.write('flow=%s,\n' % (self.flow,))
+        if self.sid is not None and 'sid' not in already_processed:
+            already_processed.add('sid')
+            showIndent(outfile, level)
+            outfile.write('sid="%s",\n' % (self.sid,))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            showIndent(outfile, level)
+            outfile.write('type_="%s",\n' % (self.type_,))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            showIndent(outfile, level)
+            outfile.write('id="%s",\n' % (self.id,))
+    def exportLiteralChildren(self, outfile, level, name_):
+        pass
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        self.valueOf_ = get_all_text_(node)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('semantic', node)
+        if value is not None and 'semantic' not in already_processed:
+            already_processed.add('semantic')
+            self.semantic = value
+            self.semantic = ' '.join(self.semantic.split())
+        value = find_attr_value_('name', node)
+        if value is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            self.name = value
+        value = find_attr_value_('flow', node)
+        if value is not None and 'flow' not in already_processed:
+            already_processed.add('flow')
+            self.flow = value
+        value = find_attr_value_('sid', node)
+        if value is not None and 'sid' not in already_processed:
+            already_processed.add('sid')
+            self.sid = value
+        value = find_attr_value_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            self.type_ = value
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        pass
+# end class tomato_param
+
+
+class tomato_python_programmer(tomato_programmer):
+    member_data_items_ = [
+        MemberSpec_('nick-name', 'xs:string', 0),
+        MemberSpec_('favorite_editor', 'xs:string', 0),
+    ]
+    subclass = None
+    superclass = tomato_programmer
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, nick_name=None, favorite_editor=None):
+        self.original_tagname_ = None
+        super(tomato_python_programmer, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, )
+        self.nick_name = _cast(None, nick_name)
+        self.favorite_editor = favorite_editor
+    def factory(*args_, **kwargs_):
+        if tomato_python_programmer.subclass:
+            return tomato_python_programmer.subclass(*args_, **kwargs_)
+        else:
+            return tomato_python_programmer(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_favorite_editor(self): return self.favorite_editor
+    def set_favorite_editor(self, favorite_editor): self.favorite_editor = favorite_editor
+    def get_nick_name(self): return self.nick_name
+    def set_nick_name(self, nick_name): self.nick_name = nick_name
+    def hasContent_(self):
+        if (
+            self.favorite_editor is not None or
+            super(tomato_python_programmer, self).hasContent_()
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='python-programmer', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmer')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='python-programmer', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='python-programmer'):
+        super(tomato_python_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmer')
+        if self.nick_name is not None and 'nick_name' not in already_processed:
+            already_processed.add('nick_name')
+            outfile.write(' nick-name=%s' % (self.gds_format_string(quote_attrib(self.nick_name).encode(ExternalEncoding), input_name='nick-name'), ))
+    def exportChildren(self, outfile, level, namespace_='', name_='python-programmer', fromsubclass_=False, pretty_print=True):
+        super(tomato_python_programmer, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.favorite_editor is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sfavorite-editor>%s</%sfavorite-editor>%s' % (namespace_, self.gds_format_string(quote_xml(self.favorite_editor).encode(ExternalEncoding), input_name='favorite-editor'), namespace_, eol_))
+    def exportLiteral(self, outfile, level, name_='python-programmer'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        if self.nick_name is not None and 'nick_name' not in already_processed:
+            already_processed.add('nick_name')
+            showIndent(outfile, level)
+            outfile.write('nick_name="%s",\n' % (self.nick_name,))
+        super(tomato_python_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
+    def exportLiteralChildren(self, outfile, level, name_):
+        super(tomato_python_programmer, self).exportLiteralChildren(outfile, level, name_)
+        if self.favorite_editor is not None:
+            showIndent(outfile, level)
+            outfile.write('favorite_editor=%s,\n' % quote_python(self.favorite_editor).encode(ExternalEncoding))
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('nick-name', node)
+        if value is not None and 'nick-name' not in already_processed:
+            already_processed.add('nick-name')
+            self.nick_name = value
+        super(tomato_python_programmer, self).buildAttributes(node, attrs, already_processed)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'favorite-editor':
+            favorite_editor_ = child_.text
+            favorite_editor_ = self.gds_validate_string(favorite_editor_, node, 'favorite_editor')
+            self.favorite_editor = favorite_editor_
+        super(tomato_python_programmer, self).buildChildren(child_, node, nodeName_, True)
+# end class tomato_python_programmer
+
+
+class tomato_java_programmer(tomato_programmer):
+    member_data_items_ = [
+        MemberSpec_('status', 'xs:string', 0),
+        MemberSpec_('nick-name', 'xs:string', 0),
+        MemberSpec_('favorite_editor', 'xs:string', 0),
+    ]
+    subclass = None
+    superclass = tomato_programmer
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, status=None, nick_name=None, favorite_editor=None):
+        self.original_tagname_ = None
+        super(tomato_java_programmer, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, )
+        self.status = _cast(None, status)
+        self.nick_name = _cast(None, nick_name)
+        self.favorite_editor = favorite_editor
+    def factory(*args_, **kwargs_):
+        if tomato_java_programmer.subclass:
+            return tomato_java_programmer.subclass(*args_, **kwargs_)
+        else:
+            return tomato_java_programmer(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_favorite_editor(self): return self.favorite_editor
+    def set_favorite_editor(self, favorite_editor): self.favorite_editor = favorite_editor
+    def get_status(self): return self.status
+    def set_status(self, status): self.status = status
+    def get_nick_name(self): return self.nick_name
+    def set_nick_name(self, nick_name): self.nick_name = nick_name
+    def hasContent_(self):
+        if (
+            self.favorite_editor is not None or
+            super(tomato_java_programmer, self).hasContent_()
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='java-programmer', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmer')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='java-programmer', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='java-programmer'):
+        super(tomato_java_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmer')
+        if self.status is not None and 'status' not in already_processed:
+            already_processed.add('status')
+            outfile.write(' status=%s' % (self.gds_format_string(quote_attrib(self.status).encode(ExternalEncoding), input_name='status'), ))
+        if self.nick_name is not None and 'nick_name' not in already_processed:
+            already_processed.add('nick_name')
+            outfile.write(' nick-name=%s' % (self.gds_format_string(quote_attrib(self.nick_name).encode(ExternalEncoding), input_name='nick-name'), ))
+    def exportChildren(self, outfile, level, namespace_='', name_='java-programmer', fromsubclass_=False, pretty_print=True):
+        super(tomato_java_programmer, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.favorite_editor is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sfavorite-editor>%s</%sfavorite-editor>%s' % (namespace_, self.gds_format_string(quote_xml(self.favorite_editor).encode(ExternalEncoding), input_name='favorite-editor'), namespace_, eol_))
+    def exportLiteral(self, outfile, level, name_='java-programmer'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        if self.status is not None and 'status' not in already_processed:
+            already_processed.add('status')
+            showIndent(outfile, level)
+            outfile.write('status="%s",\n' % (self.status,))
+        if self.nick_name is not None and 'nick_name' not in already_processed:
+            already_processed.add('nick_name')
+            showIndent(outfile, level)
+            outfile.write('nick_name="%s",\n' % (self.nick_name,))
+        super(tomato_java_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
+    def exportLiteralChildren(self, outfile, level, name_):
+        super(tomato_java_programmer, self).exportLiteralChildren(outfile, level, name_)
+        if self.favorite_editor is not None:
+            showIndent(outfile, level)
+            outfile.write('favorite_editor=%s,\n' % quote_python(self.favorite_editor).encode(ExternalEncoding))
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('status', node)
+        if value is not None and 'status' not in already_processed:
+            already_processed.add('status')
+            self.status = value
+        value = find_attr_value_('nick-name', node)
+        if value is not None and 'nick-name' not in already_processed:
+            already_processed.add('nick-name')
+            self.nick_name = value
+        super(tomato_java_programmer, self).buildAttributes(node, attrs, already_processed)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'favorite-editor':
+            favorite_editor_ = child_.text
+            favorite_editor_ = self.gds_validate_string(favorite_editor_, node, 'favorite_editor')
+            self.favorite_editor = favorite_editor_
+        super(tomato_java_programmer, self).buildChildren(child_, node, nodeName_, True)
+# end class tomato_java_programmer
+
+
+class tomato_agent(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('firstname', 'xs:string', 0),
+        MemberSpec_('lastname', 'xs:string', 0),
+        MemberSpec_('priority', 'xs:float', 0),
+        MemberSpec_('info', 'info', 0),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, firstname=None, lastname=None, priority=None, info=None):
+        self.original_tagname_ = None
+        self.firstname = firstname
+        self.lastname = lastname
+        self.priority = priority
+        self.info = info
+    def factory(*args_, **kwargs_):
+        if tomato_agent.subclass:
+            return tomato_agent.subclass(*args_, **kwargs_)
+        else:
+            return tomato_agent(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_firstname(self): return self.firstname
+    def set_firstname(self, firstname): self.firstname = firstname
+    def get_lastname(self): return self.lastname
+    def set_lastname(self, lastname): self.lastname = lastname
+    def get_priority(self): return self.priority
+    def set_priority(self, priority): self.priority = priority
+    def get_info(self): return self.info
+    def set_info(self, info): self.info = info
+    def hasContent_(self):
+        if (
+            self.firstname is not None or
+            self.lastname is not None or
+            self.priority is not None or
+            self.info is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='agent', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='agent')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='agent', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='agent'):
+        pass
+    def exportChildren(self, outfile, level, namespace_='', name_='agent', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.firstname is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sfirstname>%s</%sfirstname>%s' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_, eol_))
+        if self.lastname is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%slastname>%s</%slastname>%s' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_, eol_))
+        if self.priority is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%spriority>%s</%spriority>%s' % (namespace_, self.gds_format_float(self.priority, input_name='priority'), namespace_, eol_))
+        if self.info is not None:
+            self.info.export(outfile, level, namespace_, name_='info', pretty_print=pretty_print)
+    def exportLiteral(self, outfile, level, name_='agent'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        pass
+    def exportLiteralChildren(self, outfile, level, name_):
+        if self.firstname is not None:
+            showIndent(outfile, level)
+            outfile.write('firstname=%s,\n' % quote_python(self.firstname).encode(ExternalEncoding))
+        if self.lastname is not None:
+            showIndent(outfile, level)
+            outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding))
+        if self.priority is not None:
+            showIndent(outfile, level)
+            outfile.write('priority=%f,\n' % self.priority)
+        if self.info is not None:
+            showIndent(outfile, level)
+            outfile.write('info=model_.info(\n')
+            self.info.exportLiteral(outfile, level)
+            showIndent(outfile, level)
+            outfile.write('),\n')
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        pass
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'firstname':
+            firstname_ = child_.text
+            firstname_ = self.gds_validate_string(firstname_, node, 'firstname')
+            self.firstname = firstname_
+        elif nodeName_ == 'lastname':
+            lastname_ = child_.text
+            lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
+            self.lastname = lastname_
+        elif nodeName_ == 'priority':
+            sval_ = child_.text
+            try:
+                fval_ = float(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires float or double: %s' % exp)
+            fval_ = self.gds_validate_float(fval_, node, 'priority')
+            self.priority = fval_
+        elif nodeName_ == 'info':
+            obj_ = tomato_info.factory()
+            obj_.build(child_)
+            self.info = obj_
+            obj_.original_tagname_ = 'info'
+# end class tomato_agent
+
+
+class tomato_special_agent(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('firstname', 'xs:string', 0),
+        MemberSpec_('lastname', 'xs:string', 0),
+        MemberSpec_('priority', 'xs:float', 0),
+        MemberSpec_('info', 'info', 0),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, firstname=None, lastname=None, priority=None, info=None):
+        self.original_tagname_ = None
+        self.firstname = firstname
+        self.lastname = lastname
+        self.priority = priority
+        self.info = info
+    def factory(*args_, **kwargs_):
+        if tomato_special_agent.subclass:
+            return tomato_special_agent.subclass(*args_, **kwargs_)
+        else:
+            return tomato_special_agent(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_firstname(self): return self.firstname
+    def set_firstname(self, firstname): self.firstname = firstname
+    def get_lastname(self): return self.lastname
+    def set_lastname(self, lastname): self.lastname = lastname
+    def get_priority(self): return self.priority
+    def set_priority(self, priority): self.priority = priority
+    def get_info(self): return self.info
+    def set_info(self, info): self.info = info
+    def hasContent_(self):
+        if (
+            self.firstname is not None or
+            self.lastname is not None or
+            self.priority is not None or
+            self.info is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='special-agent', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='special-agent')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='special-agent', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='special-agent'):
+        pass
+    def exportChildren(self, outfile, level, namespace_='', name_='special-agent', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.firstname is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sfirstname>%s</%sfirstname>%s' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_, eol_))
+        if self.lastname is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%slastname>%s</%slastname>%s' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_, eol_))
+        if self.priority is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%spriority>%s</%spriority>%s' % (namespace_, self.gds_format_float(self.priority, input_name='priority'), namespace_, eol_))
+        if self.info is not None:
+            self.info.export(outfile, level, namespace_, name_='info', pretty_print=pretty_print)
+    def exportLiteral(self, outfile, level, name_='special-agent'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        pass
+    def exportLiteralChildren(self, outfile, level, name_):
+        if self.firstname is not None:
+            showIndent(outfile, level)
+            outfile.write('firstname=%s,\n' % quote_python(self.firstname).encode(ExternalEncoding))
+        if self.lastname is not None:
+            showIndent(outfile, level)
+            outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding))
+        if self.priority is not None:
+            showIndent(outfile, level)
+            outfile.write('priority=%f,\n' % self.priority)
+        if self.info is not None:
+            showIndent(outfile, level)
+            outfile.write('info=model_.info(\n')
+            self.info.exportLiteral(outfile, level)
+            showIndent(outfile, level)
+            outfile.write('),\n')
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        pass
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'firstname':
+            firstname_ = child_.text
+            firstname_ = self.gds_validate_string(firstname_, node, 'firstname')
+            self.firstname = firstname_
+        elif nodeName_ == 'lastname':
+            lastname_ = child_.text
+            lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
+            self.lastname = lastname_
+        elif nodeName_ == 'priority':
+            sval_ = child_.text
+            try:
+                fval_ = float(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires float or double: %s' % exp)
+            fval_ = self.gds_validate_float(fval_, node, 'priority')
+            self.priority = fval_
+        elif nodeName_ == 'info':
+            obj_ = tomato_info.factory()
+            obj_.build(child_)
+            self.info = obj_
+            obj_.original_tagname_ = 'info'
+# end class tomato_special_agent
+
+
+class tomato_booster(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('firstname', 'xs:string', 0),
+        MemberSpec_('lastname', 'xs:string', 0),
+        MemberSpec_('other_name', 'xs:float', 0),
+        MemberSpec_('class_', 'xs:float', 0),
+        MemberSpec_('other_value', 'xs:float', 1),
+        MemberSpec_('type_', 'xs:float', 1),
+        MemberSpec_('client_handler', 'client-handlerType', 1),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, firstname=None, lastname=None, other_name=None, class_=None, other_value=None, type_=None, client_handler=None):
+        self.original_tagname_ = None
+        self.firstname = firstname
+        self.lastname = lastname
+        self.other_name = other_name
+        self.class_ = class_
+        if other_value is None:
+            self.other_value = []
+        else:
+            self.other_value = other_value
+        if type_ is None:
+            self.type_ = []
+        else:
+            self.type_ = type_
+        if client_handler is None:
+            self.client_handler = []
+        else:
+            self.client_handler = client_handler
+    def factory(*args_, **kwargs_):
+        if tomato_booster.subclass:
+            return tomato_booster.subclass(*args_, **kwargs_)
+        else:
+            return tomato_booster(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_firstname(self): return self.firstname
+    def set_firstname(self, firstname): self.firstname = firstname
+    def get_lastname(self): return self.lastname
+    def set_lastname(self, lastname): self.lastname = lastname
+    def get_other_name(self): return self.other_name
+    def set_other_name(self, other_name): self.other_name = other_name
+    def get_class(self): return self.class_
+    def set_class(self, class_): self.class_ = class_
+    def get_other_value(self): return self.other_value
+    def set_other_value(self, other_value): self.other_value = other_value
+    def add_other_value(self, value): self.other_value.append(value)
+    def insert_other_value_at(self, index, value): self.other_value.insert(index, value)
+    def replace_other_value_at(self, index, value): self.other_value[index] = value
+    def get_type(self): return self.type_
+    def set_type(self, type_): self.type_ = type_
+    def add_type(self, value): self.type_.append(value)
+    def insert_type_at(self, index, value): self.type_.insert(index, value)
+    def replace_type_at(self, index, value): self.type_[index] = value
+    def get_client_handler(self): return self.client_handler
+    def set_client_handler(self, client_handler): self.client_handler = client_handler
+    def add_client_handler(self, value): self.client_handler.append(value)
+    def insert_client_handler_at(self, index, value): self.client_handler.insert(index, value)
+    def replace_client_handler_at(self, index, value): self.client_handler[index] = value
+    def hasContent_(self):
+        if (
+            self.firstname is not None or
+            self.lastname is not None or
+            self.other_name is not None or
+            self.class_ is not None or
+            self.other_value or
+            self.type_ or
+            self.client_handler
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='booster', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='booster')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='booster', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='booster'):
+        pass
+    def exportChildren(self, outfile, level, namespace_='', name_='booster', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.firstname is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sfirstname>%s</%sfirstname>%s' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_, eol_))
+        if self.lastname is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%slastname>%s</%slastname>%s' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_, eol_))
+        if self.other_name is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sother-name>%s</%sother-name>%s' % (namespace_, self.gds_format_float(self.other_name, input_name='other-name'), namespace_, eol_))
+        if self.class_ is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sclass>%s</%sclass>%s' % (namespace_, self.gds_format_float(self.class_, input_name='class'), namespace_, eol_))
+        for other_value_ in self.other_value:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sother-value>%s</%sother-value>%s' % (namespace_, self.gds_format_float(other_value_, input_name='other-value'), namespace_, eol_))
+        for type_ in self.type_:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%stype>%s</%stype>%s' % (namespace_, self.gds_format_float(type_, input_name='type'), namespace_, eol_))
+        for client_handler_ in self.client_handler:
+            client_handler_.export(outfile, level, namespace_, name_='client-handler', pretty_print=pretty_print)
+    def exportLiteral(self, outfile, level, name_='booster'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        pass
+    def exportLiteralChildren(self, outfile, level, name_):
+        if self.firstname is not None:
+            showIndent(outfile, level)
+            outfile.write('firstname=%s,\n' % quote_python(self.firstname).encode(ExternalEncoding))
+        if self.lastname is not None:
+            showIndent(outfile, level)
+            outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding))
+        if self.other_name is not None:
+            showIndent(outfile, level)
+            outfile.write('other_name=%f,\n' % self.other_name)
+        if self.class_ is not None:
+            showIndent(outfile, level)
+            outfile.write('class_=%f,\n' % self.class_)
+        showIndent(outfile, level)
+        outfile.write('other_value=[\n')
+        level += 1
+        for other_value_ in self.other_value:
+            showIndent(outfile, level)
+            outfile.write('%f,\n' % other_value_)
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        showIndent(outfile, level)
+        outfile.write('type_=[\n')
+        level += 1
+        for type_ in self.type_:
+            showIndent(outfile, level)
+            outfile.write('%f,\n' % type_)
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        showIndent(outfile, level)
+        outfile.write('client_handler=[\n')
+        level += 1
+        for client_handler_ in self.client_handler:
+            showIndent(outfile, level)
+            outfile.write('model_.client_handlerType(\n')
+            client_handler_.exportLiteral(outfile, level, name_='client-handlerType')
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        pass
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'firstname':
+            firstname_ = child_.text
+            firstname_ = self.gds_validate_string(firstname_, node, 'firstname')
+            self.firstname = firstname_
+        elif nodeName_ == 'lastname':
+            lastname_ = child_.text
+            lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
+            self.lastname = lastname_
+        elif nodeName_ == 'other-name':
+            sval_ = child_.text
+            try:
+                fval_ = float(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires float or double: %s' % exp)
+            fval_ = self.gds_validate_float(fval_, node, 'other_name')
+            self.other_name = fval_
+        elif nodeName_ == 'class':
+            sval_ = child_.text
+            try:
+                fval_ = float(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires float or double: %s' % exp)
+            fval_ = self.gds_validate_float(fval_, node, 'class')
+            self.class_ = fval_
+        elif nodeName_ == 'other-value':
+            sval_ = child_.text
+            try:
+                fval_ = float(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires float or double: %s' % exp)
+            fval_ = self.gds_validate_float(fval_, node, 'other_value')
+            self.other_value.append(fval_)
+        elif nodeName_ == 'type':
+            sval_ = child_.text
+            try:
+                fval_ = float(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires float or double: %s' % exp)
+            fval_ = self.gds_validate_float(fval_, node, 'type')
+            self.type_.append(fval_)
+        elif nodeName_ == 'client-handler':
+            obj_ = tomato_client_handlerType.factory()
+            obj_.build(child_)
+            self.client_handler.append(obj_)
+            obj_.original_tagname_ = 'client-handler'
+# end class tomato_booster
+
+
+class tomato_info(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('rating', 'xs:float', 0),
+        MemberSpec_('type', 'xs:integer', 0),
+        MemberSpec_('name', 'xs:string', 0),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, rating=None, type_=None, name=None):
+        self.original_tagname_ = None
+        self.rating = _cast(float, rating)
+        self.type_ = _cast(int, type_)
+        self.name = _cast(None, name)
+    def factory(*args_, **kwargs_):
+        if tomato_info.subclass:
+            return tomato_info.subclass(*args_, **kwargs_)
+        else:
+            return tomato_info(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_rating(self): return self.rating
+    def set_rating(self, rating): self.rating = rating
+    def get_type(self): return self.type_
+    def set_type(self, type_): self.type_ = type_
+    def get_name(self): return self.name
+    def set_name(self, name): self.name = name
+    def hasContent_(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='info', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='info')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='info', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='info'):
+        if self.rating is not None and 'rating' not in already_processed:
+            already_processed.add('rating')
+            outfile.write(' rating="%s"' % self.gds_format_float(self.rating, input_name='rating'))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type="%s"' % self.gds_format_integer(self.type_, input_name='type'))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), ))
+    def exportChildren(self, outfile, level, namespace_='', name_='info', fromsubclass_=False, pretty_print=True):
+        pass
+    def exportLiteral(self, outfile, level, name_='info'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        if self.rating is not None and 'rating' not in already_processed:
+            already_processed.add('rating')
+            showIndent(outfile, level)
+            outfile.write('rating=%f,\n' % (self.rating,))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            showIndent(outfile, level)
+            outfile.write('type_=%d,\n' % (self.type_,))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            showIndent(outfile, level)
+            outfile.write('name="%s",\n' % (self.name,))
+    def exportLiteralChildren(self, outfile, level, name_):
+        pass
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('rating', node)
+        if value is not None and 'rating' not in already_processed:
+            already_processed.add('rating')
+            try:
+                self.rating = float(value)
+            except ValueError, exp:
+                raise ValueError('Bad float/double attribute (rating): %s' % exp)
+        value = find_attr_value_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            try:
+                self.type_ = int(value)
+            except ValueError, exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+        value = find_attr_value_('name', node)
+        if value is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            self.name = value
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        pass
+# end class tomato_info
+
+
+class tomato_client_handlerType(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('fullname', 'xs:string', 0),
+        MemberSpec_('refid', 'xs:integer', 0),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, fullname=None, refid=None):
+        self.original_tagname_ = None
+        self.fullname = fullname
+        self.refid = refid
+    def factory(*args_, **kwargs_):
+        if tomato_client_handlerType.subclass:
+            return tomato_client_handlerType.subclass(*args_, **kwargs_)
+        else:
+            return tomato_client_handlerType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_fullname(self): return self.fullname
+    def set_fullname(self, fullname): self.fullname = fullname
+    def get_refid(self): return self.refid
+    def set_refid(self, refid): self.refid = refid
+    def hasContent_(self):
+        if (
+            self.fullname is not None or
+            self.refid is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='client-handlerType', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='client-handlerType')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='client-handlerType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='client-handlerType'):
+        pass
+    def exportChildren(self, outfile, level, namespace_='', name_='client-handlerType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.fullname is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sfullname>%s</%sfullname>%s' % (namespace_, self.gds_format_string(quote_xml(self.fullname).encode(ExternalEncoding), input_name='fullname'), namespace_, eol_))
+        if self.refid is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%srefid>%s</%srefid>%s' % (namespace_, self.gds_format_integer(self.refid, input_name='refid'), namespace_, eol_))
+    def exportLiteral(self, outfile, level, name_='client-handlerType'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        pass
+    def exportLiteralChildren(self, outfile, level, name_):
+        if self.fullname is not None:
+            showIndent(outfile, level)
+            outfile.write('fullname=%s,\n' % quote_python(self.fullname).encode(ExternalEncoding))
+        if self.refid is not None:
+            showIndent(outfile, level)
+            outfile.write('refid=%d,\n' % self.refid)
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        pass
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'fullname':
+            fullname_ = child_.text
+            fullname_ = self.gds_validate_string(fullname_, node, 'fullname')
+            self.fullname = fullname_
+        elif nodeName_ == 'refid':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            ival_ = self.gds_validate_integer(ival_, node, 'refid')
+            self.refid = ival_
+# end class tomato_client_handlerType
+
+
+GDSClassesMapping = {
+    'client-handler': tomato_client_handlerType,
+    'elparam': tomato_param,
+    'promoter': tomato_booster,
+}
+
+
+USAGE_TEXT = """
+Usage: python <tomato_Parser>.py [ -s ] <in_xml_file>
+"""
+
+
+def usage():
+    print USAGE_TEXT
+    sys.exit(1)
+
+
+def get_root_tag(node):
+    tag = Tag_pattern_.match(node.tag).groups()[-1]
+    rootClass = GDSClassesMapping.get(tag)
+    if rootClass is None:
+        rootClass = globals().get(tag)
+    return tag, rootClass
+
+
+def parse(inFileName, silence=False):
+    doc = parsexml_(inFileName)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    if not silence:
+        sys.stdout.write('<?xml version="1.0" ?>\n')
+        rootObj.export(
+            sys.stdout, 0, name_=rootTag,
+            namespacedef_='',
+            pretty_print=True)
+    return rootObj
+
+
+def parseEtree(inFileName, silence=False):
+    doc = parsexml_(inFileName)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    mapping = {}
+    rootElement = rootObj.to_etree(None, name_=rootTag, mapping_=mapping)
+    reverse_mapping = rootObj.gds_reverse_node_mapping(mapping)
+    if not silence:
+        content = etree_.tostring(
+            rootElement, pretty_print=True,
+            xml_declaration=True, encoding="utf-8")
+        sys.stdout.write(content)
+        sys.stdout.write('\n')
+    return rootObj, rootElement, mapping, reverse_mapping
+
+
+def parseString(inString, silence=False):
+    from StringIO import StringIO
+    doc = parsexml_(StringIO(inString))
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    if not silence:
+        sys.stdout.write('<?xml version="1.0" ?>\n')
+        rootObj.export(
+            sys.stdout, 0, name_=rootTag,
+            namespacedef_='')
+    return rootObj
+
+
+def parseLiteral(inFileName, silence=False):
+    doc = parsexml_(inFileName)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    if not silence:
+        sys.stdout.write('#from prefix_classname2_sup import *\n\n')
+        sys.stdout.write('import prefix_classname2_sup as model_\n\n')
+        sys.stdout.write('rootObj = model_.rootClass(\n')
+        rootObj.exportLiteral(sys.stdout, 0, name_=rootTag)
+        sys.stdout.write(')\n')
+    return rootObj
+
+
+def main():
+    args = sys.argv[1:]
+    if len(args) == 1:
+        parse(args[0])
+    else:
+        usage()
+
+
+if __name__ == '__main__':
+    #import pdb; pdb.set_trace()
+    main()
+
+
+__all__ = [
+    "tomato_agent",
+    "tomato_booster",
+    "tomato_client_handlerType",
+    "tomato_comments",
+    "tomato_info",
+    "tomato_java_programmer",
+    "tomato_param",
+    "tomato_people",
+    "tomato_person",
+    "tomato_programmer",
+    "tomato_python_programmer",
+    "tomato_special_agent"
+]
diff --git a/tests/prefix_classname2_out.xml b/tests/prefix_classname2_out.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c2e2e7ebf4af40a823bf7e24b8b0e9e7cfb9b86f
--- /dev/null
+++ b/tests/prefix_classname2_out.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" ?>
+<people>
+    <comments>
+1. This is a <emp>foolish</emp> comment.  It is <emp>really</emp> important.    </comments>
+    <comments>
+2. This is a <emp>silly</emp> comment.  It is <emp>very</emp> significant.    </comments>
+    <person ratio="3.2" id="1" value="abcd">
+        <name>Alberta</name>
+        <interest>gardening</interest>
+        <interest>reading</interest>
+        <category>5</category>
+    </person>
+    <person id="2">
+        <name>Bernardo</name>
+        <interest>programming</interest>
+        <category>0</category>
+        <agent>
+            <firstname>Darren</firstname>
+            <lastname>Diddly</lastname>
+            <priority>4.5</priority>
+            <info rating="5.33" type="321" name="Albert Abasinian"/>
+        </agent>
+    </person>
+    <person id="3">
+        <name>Charlie</name>
+        <interest>people</interest>
+        <interest>cats</interest>
+        <interest>dogs</interest>
+        <category>8</category>
+        <promoter>
+            <firstname>David</firstname>
+            <lastname>Donaldson</lastname>
+        </promoter>
+        <promoter>
+            <firstname>Edward</firstname>
+            <lastname>Eddleberry</lastname>
+        </promoter>
+    </person>
+    <person id="4"/>
+    <programmer id="2" language="python" area="xml">
+        <name>Charles Carlson</name>
+        <interest>programming</interest>
+        <category>2233</category>
+        <agent>
+            <firstname>Ernest</firstname>
+            <lastname>Echo</lastname>
+            <priority>3.8</priority>
+            <info rating="5.33" type="321" name="George Gregory"/>
+        </agent>
+        <description>A very happy programmer</description>
+        <email>charles@happyprogrammers.com</email>
+        <elposint>14</elposint>
+        <elnonposint>0</elnonposint>
+        <elnegint>-12</elnegint>
+        <elnonnegint>4</elnonnegint>
+        <eldate>2005-04-26</eldate>
+        <eldatetime>2005-04-26T10:11:12</eldatetime>
+        <eltoken>aa bb cc dd</eltoken>
+        <elshort>123</elshort>
+        <ellong>13241234123412341234</ellong>
+        <elparam semantic="a big semantic" name="Davy" id="id001"/>
+    </programmer>
+    <python-programmer vegetable="tomato" fruit="peach" ratio="8.699999999999999" id="232" value="abcd" language="python" area="xml" nick-name="davy">
+        <name>Darrel Dawson</name>
+        <interest>hang gliding</interest>
+        <category>3344</category>
+        <agent>
+            <firstname>Harvey</firstname>
+            <lastname>Hippolite</lastname>
+            <priority>5.2</priority>
+            <info rating="6.55" type="543" name="Harvey Hippolite"/>
+        </agent>
+        <description>An object-orientated programmer</description>
+        <email>darrel@happyprogrammers.com</email>
+        <favorite-editor>jed</favorite-editor>
+    </python-programmer>
+    <java-programmer vegetable="tomato" fruit="peach" ratio="8.699999999999999" id="232" value="abcd" language="python" area="xml" nick-name="davy">
+        <name>Darrel Dawson</name>
+        <interest>hang gliding</interest>
+        <category>3344</category>
+        <agent>
+            <firstname>Harvey</firstname>
+            <lastname>Hippolite</lastname>
+            <priority>5.2</priority>
+            <info rating="6.55" type="543" name="Harvey Hippolite"/>
+        </agent>
+        <description>An object-orientated programmer</description>
+        <email>darrel@happyprogrammers.com</email>
+        <favorite-editor>jed</favorite-editor>
+    </java-programmer>
+</people>
diff --git a/tests/prefix_classname2_sub.py b/tests/prefix_classname2_sub.py
new file mode 100644
index 0000000000000000000000000000000000000000..a196947cf8ce05793a34dbac19687a5db1ef9537
--- /dev/null
+++ b/tests/prefix_classname2_sub.py
@@ -0,0 +1,292 @@
+#!/usr/bin/env python
+
+#
+# Generated  by generateDS.py.
+#
+# Command line options:
+#   ('--no-dates', '')
+#   ('--no-versions', '')
+#   ('-p', 'tomato_')
+#   ('--member-specs', 'list')
+#   ('-f', '')
+#   ('-o', 'tests/prefix_classname2_sup.py')
+#   ('-s', 'tests/prefix_classname2_sub.py')
+#   ('--super', 'prefix_classname2_sup')
+#
+# Command line arguments:
+#   tests/prefix_classname.xsd
+#
+# Command line:
+#   generateDS.py --no-dates --no-versions -p "tomato_" --member-specs="list" -f -o "tests/prefix_classname2_sup.py" -s "tests/prefix_classname2_sub.py" --super="prefix_classname2_sup" tests/prefix_classname.xsd
+#
+# Current working directory (os.getcwd()):
+#   generateds
+#
+
+import sys
+
+import prefix_classname2_sup as supermod
+
+etree_ = None
+Verbose_import_ = False
+(
+    XMLParser_import_none, XMLParser_import_lxml,
+    XMLParser_import_elementtree
+) = range(3)
+XMLParser_import_library = None
+try:
+    # lxml
+    from lxml import etree as etree_
+    XMLParser_import_library = XMLParser_import_lxml
+    if Verbose_import_:
+        print("running with lxml.etree")
+except ImportError:
+    try:
+        # cElementTree from Python 2.5+
+        import xml.etree.cElementTree as etree_
+        XMLParser_import_library = XMLParser_import_elementtree
+        if Verbose_import_:
+            print("running with cElementTree on Python 2.5+")
+    except ImportError:
+        try:
+            # ElementTree from Python 2.5+
+            import xml.etree.ElementTree as etree_
+            XMLParser_import_library = XMLParser_import_elementtree
+            if Verbose_import_:
+                print("running with ElementTree on Python 2.5+")
+        except ImportError:
+            try:
+                # normal cElementTree install
+                import cElementTree as etree_
+                XMLParser_import_library = XMLParser_import_elementtree
+                if Verbose_import_:
+                    print("running with cElementTree")
+            except ImportError:
+                try:
+                    # normal ElementTree install
+                    import elementtree.ElementTree as etree_
+                    XMLParser_import_library = XMLParser_import_elementtree
+                    if Verbose_import_:
+                        print("running with ElementTree")
+                except ImportError:
+                    raise ImportError(
+                        "Failed to import ElementTree from any known place")
+
+
+def parsexml_(*args, **kwargs):
+    if (XMLParser_import_library == XMLParser_import_lxml and
+            'parser' not in kwargs):
+        # Use the lxml ElementTree compatible parser so that, e.g.,
+        #   we ignore comments.
+        kwargs['parser'] = etree_.ETCompatXMLParser()
+    doc = etree_.parse(*args, **kwargs)
+    return doc
+
+#
+# Globals
+#
+
+ExternalEncoding = 'ascii'
+
+#
+# Data representation classes
+#
+
+
+class tomato_peopleSub(supermod.tomato_people):
+    def __init__(self, comments=None, person=None, programmer=None, python_programmer=None, java_programmer=None):
+        super(tomato_peopleSub, self).__init__(comments, person, programmer, python_programmer, java_programmer, )
+supermod.tomato_people.subclass = tomato_peopleSub
+# end class tomato_peopleSub
+
+
+class tomato_commentsSub(supermod.tomato_comments):
+    def __init__(self, emp=None, valueOf_=None, mixedclass_=None, content_=None):
+        super(tomato_commentsSub, self).__init__(emp, valueOf_, mixedclass_, content_, )
+supermod.tomato_comments.subclass = tomato_commentsSub
+# end class tomato_commentsSub
+
+
+class tomato_personSub(supermod.tomato_person):
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, extensiontype_=None):
+        super(tomato_personSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, extensiontype_, )
+supermod.tomato_person.subclass = tomato_personSub
+# end class tomato_personSub
+
+
+class tomato_programmerSub(supermod.tomato_programmer):
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, extensiontype_=None):
+        super(tomato_programmerSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, extensiontype_, )
+supermod.tomato_programmer.subclass = tomato_programmerSub
+# end class tomato_programmerSub
+
+
+class tomato_paramSub(supermod.tomato_param):
+    def __init__(self, semantic=None, name=None, flow=None, sid=None, type_=None, id=None, valueOf_=None):
+        super(tomato_paramSub, self).__init__(semantic, name, flow, sid, type_, id, valueOf_, )
+supermod.tomato_param.subclass = tomato_paramSub
+# end class tomato_paramSub
+
+
+class tomato_python_programmerSub(supermod.tomato_python_programmer):
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, nick_name=None, favorite_editor=None):
+        super(tomato_python_programmerSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, nick_name, favorite_editor, )
+supermod.tomato_python_programmer.subclass = tomato_python_programmerSub
+# end class tomato_python_programmerSub
+
+
+class tomato_java_programmerSub(supermod.tomato_java_programmer):
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, status=None, nick_name=None, favorite_editor=None):
+        super(tomato_java_programmerSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, status, nick_name, favorite_editor, )
+supermod.tomato_java_programmer.subclass = tomato_java_programmerSub
+# end class tomato_java_programmerSub
+
+
+class tomato_agentSub(supermod.tomato_agent):
+    def __init__(self, firstname=None, lastname=None, priority=None, info=None):
+        super(tomato_agentSub, self).__init__(firstname, lastname, priority, info, )
+supermod.tomato_agent.subclass = tomato_agentSub
+# end class tomato_agentSub
+
+
+class tomato_special_agentSub(supermod.tomato_special_agent):
+    def __init__(self, firstname=None, lastname=None, priority=None, info=None):
+        super(tomato_special_agentSub, self).__init__(firstname, lastname, priority, info, )
+supermod.tomato_special_agent.subclass = tomato_special_agentSub
+# end class tomato_special_agentSub
+
+
+class tomato_boosterSub(supermod.tomato_booster):
+    def __init__(self, firstname=None, lastname=None, other_name=None, class_=None, other_value=None, type_=None, client_handler=None):
+        super(tomato_boosterSub, self).__init__(firstname, lastname, other_name, class_, other_value, type_, client_handler, )
+supermod.tomato_booster.subclass = tomato_boosterSub
+# end class tomato_boosterSub
+
+
+class tomato_infoSub(supermod.tomato_info):
+    def __init__(self, rating=None, type_=None, name=None):
+        super(tomato_infoSub, self).__init__(rating, type_, name, )
+supermod.tomato_info.subclass = tomato_infoSub
+# end class tomato_infoSub
+
+
+class tomato_client_handlerTypeSub(supermod.tomato_client_handlerType):
+    def __init__(self, fullname=None, refid=None):
+        super(tomato_client_handlerTypeSub, self).__init__(fullname, refid, )
+supermod.tomato_client_handlerType.subclass = tomato_client_handlerTypeSub
+# end class tomato_client_handlerTypeSub
+
+
+def get_root_tag(node):
+    tag = supermod.Tag_pattern_.match(node.tag).groups()[-1]
+    rootClass = None
+    rootClass = supermod.GDSClassesMapping.get(tag)
+    if rootClass is None and hasattr(supermod, tag):
+        rootClass = getattr(supermod, tag)
+    return tag, rootClass
+
+
+def parse(inFilename, silence=False):
+    doc = parsexml_(inFilename)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = supermod.tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    if not silence:
+        sys.stdout.write('<?xml version="1.0" ?>\n')
+        rootObj.export(
+            sys.stdout, 0, name_=rootTag,
+            namespacedef_='',
+            pretty_print=True)
+    return rootObj
+
+
+def parseEtree(inFilename, silence=False):
+    doc = parsexml_(inFilename)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = supermod.tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    mapping = {}
+    rootElement = rootObj.to_etree(None, name_=rootTag, mapping_=mapping)
+    reverse_mapping = rootObj.gds_reverse_node_mapping(mapping)
+    if not silence:
+        content = etree_.tostring(
+            rootElement, pretty_print=True,
+            xml_declaration=True, encoding="utf-8")
+        sys.stdout.write(content)
+        sys.stdout.write('\n')
+    return rootObj, rootElement, mapping, reverse_mapping
+
+
+def parseString(inString, silence=False):
+    from StringIO import StringIO
+    doc = parsexml_(StringIO(inString))
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = supermod.tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    if not silence:
+        sys.stdout.write('<?xml version="1.0" ?>\n')
+        rootObj.export(
+            sys.stdout, 0, name_=rootTag,
+            namespacedef_='')
+    return rootObj
+
+
+def parseLiteral(inFilename, silence=False):
+    doc = parsexml_(inFilename)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = supermod.tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    if not silence:
+        sys.stdout.write('#from prefix_classname2_sup import *\n\n')
+        sys.stdout.write('import prefix_classname2_sup as model_\n\n')
+        sys.stdout.write('rootObj = model_.rootClass(\n')
+        rootObj.exportLiteral(sys.stdout, 0, name_=rootTag)
+        sys.stdout.write(')\n')
+    return rootObj
+
+
+USAGE_TEXT = """
+Usage: python ???.py <infilename>
+"""
+
+
+def usage():
+    print USAGE_TEXT
+    sys.exit(1)
+
+
+def main():
+    args = sys.argv[1:]
+    if len(args) != 1:
+        usage()
+    infilename = args[0]
+    parse(infilename)
+
+
+if __name__ == '__main__':
+    #import pdb; pdb.set_trace()
+    main()
diff --git a/tests/prefix_classname2_sup.py b/tests/prefix_classname2_sup.py
new file mode 100644
index 0000000000000000000000000000000000000000..5f2ebd0ef75074325a48d8d749e64c03c366efbf
--- /dev/null
+++ b/tests/prefix_classname2_sup.py
@@ -0,0 +1,2897 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+#
+# Generated  by generateDS.py.
+#
+# Command line options:
+#   ('--no-dates', '')
+#   ('--no-versions', '')
+#   ('-p', 'tomato_')
+#   ('--member-specs', 'list')
+#   ('-f', '')
+#   ('-o', 'tests/prefix_classname2_sup.py')
+#   ('-s', 'tests/prefix_classname2_sub.py')
+#   ('--super', 'prefix_classname2_sup')
+#
+# Command line arguments:
+#   tests/prefix_classname.xsd
+#
+# Command line:
+#   generateDS.py --no-dates --no-versions -p "tomato_" --member-specs="list" -f -o "tests/prefix_classname2_sup.py" -s "tests/prefix_classname2_sub.py" --super="prefix_classname2_sup" tests/prefix_classname.xsd
+#
+# Current working directory (os.getcwd()):
+#   generateds
+#
+
+import sys
+import getopt
+import re as re_
+import base64
+import datetime as datetime_
+
+etree_ = None
+Verbose_import_ = False
+(
+    XMLParser_import_none, XMLParser_import_lxml,
+    XMLParser_import_elementtree
+) = range(3)
+XMLParser_import_library = None
+try:
+    # lxml
+    from lxml import etree as etree_
+    XMLParser_import_library = XMLParser_import_lxml
+    if Verbose_import_:
+        print("running with lxml.etree")
+except ImportError:
+    try:
+        # cElementTree from Python 2.5+
+        import xml.etree.cElementTree as etree_
+        XMLParser_import_library = XMLParser_import_elementtree
+        if Verbose_import_:
+            print("running with cElementTree on Python 2.5+")
+    except ImportError:
+        try:
+            # ElementTree from Python 2.5+
+            import xml.etree.ElementTree as etree_
+            XMLParser_import_library = XMLParser_import_elementtree
+            if Verbose_import_:
+                print("running with ElementTree on Python 2.5+")
+        except ImportError:
+            try:
+                # normal cElementTree install
+                import cElementTree as etree_
+                XMLParser_import_library = XMLParser_import_elementtree
+                if Verbose_import_:
+                    print("running with cElementTree")
+            except ImportError:
+                try:
+                    # normal ElementTree install
+                    import elementtree.ElementTree as etree_
+                    XMLParser_import_library = XMLParser_import_elementtree
+                    if Verbose_import_:
+                        print("running with ElementTree")
+                except ImportError:
+                    raise ImportError(
+                        "Failed to import ElementTree from any known place")
+
+
+def parsexml_(*args, **kwargs):
+    if (XMLParser_import_library == XMLParser_import_lxml and
+            'parser' not in kwargs):
+        # Use the lxml ElementTree compatible parser so that, e.g.,
+        #   we ignore comments.
+        kwargs['parser'] = etree_.ETCompatXMLParser()
+    doc = etree_.parse(*args, **kwargs)
+    return doc
+
+#
+# User methods
+#
+# Calls to the methods in these classes are generated by generateDS.py.
+# You can replace these methods by re-implementing the following class
+#   in a module named generatedssuper.py.
+
+try:
+    from generatedssuper import GeneratedsSuper
+except ImportError, exp:
+
+    class GeneratedsSuper(object):
+        tzoff_pattern = re_.compile(r'(\+|-)((0\d|1[0-3]):[0-5]\d|14:00)$')
+        class _FixedOffsetTZ(datetime_.tzinfo):
+            def __init__(self, offset, name):
+                self.__offset = datetime_.timedelta(minutes=offset)
+                self.__name = name
+            def utcoffset(self, dt):
+                return self.__offset
+            def tzname(self, dt):
+                return self.__name
+            def dst(self, dt):
+                return None
+        def gds_format_string(self, input_data, input_name=''):
+            return input_data
+        def gds_validate_string(self, input_data, node, input_name=''):
+            if not input_data:
+                return ''
+            else:
+                return input_data
+        def gds_format_base64(self, input_data, input_name=''):
+            return base64.b64encode(input_data)
+        def gds_validate_base64(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_integer(self, input_data, input_name=''):
+            return '%d' % input_data
+        def gds_validate_integer(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_integer_list(self, input_data, input_name=''):
+            return '%s' % input_data
+        def gds_validate_integer_list(self, input_data, node, input_name=''):
+            values = input_data.split()
+            for value in values:
+                try:
+                    float(value)
+                except (TypeError, ValueError):
+                    raise_parse_error(node, 'Requires sequence of integers')
+            return input_data
+        def gds_format_float(self, input_data, input_name=''):
+            return ('%.15f' % input_data).rstrip('0')
+        def gds_validate_float(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_float_list(self, input_data, input_name=''):
+            return '%s' % input_data
+        def gds_validate_float_list(self, input_data, node, input_name=''):
+            values = input_data.split()
+            for value in values:
+                try:
+                    float(value)
+                except (TypeError, ValueError):
+                    raise_parse_error(node, 'Requires sequence of floats')
+            return input_data
+        def gds_format_double(self, input_data, input_name=''):
+            return '%e' % input_data
+        def gds_validate_double(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_double_list(self, input_data, input_name=''):
+            return '%s' % input_data
+        def gds_validate_double_list(self, input_data, node, input_name=''):
+            values = input_data.split()
+            for value in values:
+                try:
+                    float(value)
+                except (TypeError, ValueError):
+                    raise_parse_error(node, 'Requires sequence of doubles')
+            return input_data
+        def gds_format_boolean(self, input_data, input_name=''):
+            return ('%s' % input_data).lower()
+        def gds_validate_boolean(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_boolean_list(self, input_data, input_name=''):
+            return '%s' % input_data
+        def gds_validate_boolean_list(self, input_data, node, input_name=''):
+            values = input_data.split()
+            for value in values:
+                if value not in ('true', '1', 'false', '0', ):
+                    raise_parse_error(
+                        node,
+                        'Requires sequence of booleans '
+                        '("true", "1", "false", "0")')
+            return input_data
+        def gds_validate_datetime(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_datetime(self, input_data, input_name=''):
+            if input_data.microsecond == 0:
+                _svalue = '%04d-%02d-%02dT%02d:%02d:%02d' % (
+                    input_data.year,
+                    input_data.month,
+                    input_data.day,
+                    input_data.hour,
+                    input_data.minute,
+                    input_data.second,
+                )
+            else:
+                _svalue = '%04d-%02d-%02dT%02d:%02d:%02d.%s' % (
+                    input_data.year,
+                    input_data.month,
+                    input_data.day,
+                    input_data.hour,
+                    input_data.minute,
+                    input_data.second,
+                    ('%f' % (float(input_data.microsecond) / 1000000))[2:],
+                )
+            if input_data.tzinfo is not None:
+                tzoff = input_data.tzinfo.utcoffset(input_data)
+                if tzoff is not None:
+                    total_seconds = tzoff.seconds + (86400 * tzoff.days)
+                    if total_seconds == 0:
+                        _svalue += 'Z'
+                    else:
+                        if total_seconds < 0:
+                            _svalue += '-'
+                            total_seconds *= -1
+                        else:
+                            _svalue += '+'
+                        hours = total_seconds // 3600
+                        minutes = (total_seconds - (hours * 3600)) // 60
+                        _svalue += '{0:02d}:{1:02d}'.format(hours, minutes)
+            return _svalue
+        @classmethod
+        def gds_parse_datetime(cls, input_data):
+            tz = None
+            if input_data[-1] == 'Z':
+                tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')
+                input_data = input_data[:-1]
+            else:
+                results = GeneratedsSuper.tzoff_pattern.search(input_data)
+                if results is not None:
+                    tzoff_parts = results.group(2).split(':')
+                    tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])
+                    if results.group(1) == '-':
+                        tzoff *= -1
+                    tz = GeneratedsSuper._FixedOffsetTZ(
+                        tzoff, results.group(0))
+                    input_data = input_data[:-6]
+            time_parts = input_data.split('.')
+            if len(time_parts) > 1:
+                micro_seconds = int(float('0.' + time_parts[1]) * 1000000)
+                input_data = '%s.%s' % (time_parts[0], micro_seconds, )
+                dt = datetime_.datetime.strptime(
+                    input_data, '%Y-%m-%dT%H:%M:%S.%f')
+            else:
+                dt = datetime_.datetime.strptime(
+                    input_data, '%Y-%m-%dT%H:%M:%S')
+            dt = dt.replace(tzinfo=tz)
+            return dt
+        def gds_validate_date(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_date(self, input_data, input_name=''):
+            _svalue = '%04d-%02d-%02d' % (
+                input_data.year,
+                input_data.month,
+                input_data.day,
+            )
+            try:
+                if input_data.tzinfo is not None:
+                    tzoff = input_data.tzinfo.utcoffset(input_data)
+                    if tzoff is not None:
+                        total_seconds = tzoff.seconds + (86400 * tzoff.days)
+                        if total_seconds == 0:
+                            _svalue += 'Z'
+                        else:
+                            if total_seconds < 0:
+                                _svalue += '-'
+                                total_seconds *= -1
+                            else:
+                                _svalue += '+'
+                            hours = total_seconds // 3600
+                            minutes = (total_seconds - (hours * 3600)) // 60
+                            _svalue += '{0:02d}:{1:02d}'.format(hours, minutes)
+            except AttributeError:
+                pass
+            return _svalue
+        @classmethod
+        def gds_parse_date(cls, input_data):
+            tz = None
+            if input_data[-1] == 'Z':
+                tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')
+                input_data = input_data[:-1]
+            else:
+                results = GeneratedsSuper.tzoff_pattern.search(input_data)
+                if results is not None:
+                    tzoff_parts = results.group(2).split(':')
+                    tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])
+                    if results.group(1) == '-':
+                        tzoff *= -1
+                    tz = GeneratedsSuper._FixedOffsetTZ(
+                        tzoff, results.group(0))
+                    input_data = input_data[:-6]
+            dt = datetime_.datetime.strptime(input_data, '%Y-%m-%d')
+            dt = dt.replace(tzinfo=tz)
+            return dt.date()
+        def gds_validate_time(self, input_data, node, input_name=''):
+            return input_data
+        def gds_format_time(self, input_data, input_name=''):
+            if input_data.microsecond == 0:
+                _svalue = '%02d:%02d:%02d' % (
+                    input_data.hour,
+                    input_data.minute,
+                    input_data.second,
+                )
+            else:
+                _svalue = '%02d:%02d:%02d.%s' % (
+                    input_data.hour,
+                    input_data.minute,
+                    input_data.second,
+                    ('%f' % (float(input_data.microsecond) / 1000000))[2:],
+                )
+            if input_data.tzinfo is not None:
+                tzoff = input_data.tzinfo.utcoffset(input_data)
+                if tzoff is not None:
+                    total_seconds = tzoff.seconds + (86400 * tzoff.days)
+                    if total_seconds == 0:
+                        _svalue += 'Z'
+                    else:
+                        if total_seconds < 0:
+                            _svalue += '-'
+                            total_seconds *= -1
+                        else:
+                            _svalue += '+'
+                        hours = total_seconds // 3600
+                        minutes = (total_seconds - (hours * 3600)) // 60
+                        _svalue += '{0:02d}:{1:02d}'.format(hours, minutes)
+            return _svalue
+        @classmethod
+        def gds_parse_time(cls, input_data):
+            tz = None
+            if input_data[-1] == 'Z':
+                tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')
+                input_data = input_data[:-1]
+            else:
+                results = GeneratedsSuper.tzoff_pattern.search(input_data)
+                if results is not None:
+                    tzoff_parts = results.group(2).split(':')
+                    tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])
+                    if results.group(1) == '-':
+                        tzoff *= -1
+                    tz = GeneratedsSuper._FixedOffsetTZ(
+                        tzoff, results.group(0))
+                    input_data = input_data[:-6]
+            if len(input_data.split('.')) > 1:
+                dt = datetime_.datetime.strptime(input_data, '%H:%M:%S.%f')
+            else:
+                dt = datetime_.datetime.strptime(input_data, '%H:%M:%S')
+            dt = dt.replace(tzinfo=tz)
+            return dt.time()
+        def gds_str_lower(self, instring):
+            return instring.lower()
+        def get_path_(self, node):
+            path_list = []
+            self.get_path_list_(node, path_list)
+            path_list.reverse()
+            path = '/'.join(path_list)
+            return path
+        Tag_strip_pattern_ = re_.compile(r'\{.*\}')
+        def get_path_list_(self, node, path_list):
+            if node is None:
+                return
+            tag = GeneratedsSuper.Tag_strip_pattern_.sub('', node.tag)
+            if tag:
+                path_list.append(tag)
+            self.get_path_list_(node.getparent(), path_list)
+        def get_class_obj_(self, node, default_class=None):
+            class_obj1 = default_class
+            if 'xsi' in node.nsmap:
+                classname = node.get('{%s}type' % node.nsmap['xsi'])
+                if classname is not None:
+                    names = classname.split(':')
+                    if len(names) == 2:
+                        classname = names[1]
+                    class_obj2 = globals().get(classname)
+                    if class_obj2 is not None:
+                        class_obj1 = class_obj2
+            return class_obj1
+        def gds_build_any(self, node, type_name=None):
+            return None
+        @classmethod
+        def gds_reverse_node_mapping(cls, mapping):
+            return dict(((v, k) for k, v in mapping.iteritems()))
+
+
+#
+# If you have installed IPython you can uncomment and use the following.
+# IPython is available from http://ipython.scipy.org/.
+#
+
+## from IPython.Shell import IPShellEmbed
+## args = ''
+## ipshell = IPShellEmbed(args,
+##     banner = 'Dropping into IPython',
+##     exit_msg = 'Leaving Interpreter, back to program.')
+
+# Then use the following line where and when you want to drop into the
+# IPython shell:
+#    ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit')
+
+#
+# Globals
+#
+
+ExternalEncoding = 'ascii'
+Tag_pattern_ = re_.compile(r'({.*})?(.*)')
+String_cleanup_pat_ = re_.compile(r"[\n\r\s]+")
+Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)')
+
+#
+# Support/utility functions.
+#
+
+
+def showIndent(outfile, level, pretty_print=True):
+    if pretty_print:
+        for idx in range(level):
+            outfile.write('    ')
+
+
+def quote_xml(inStr):
+    if not inStr:
+        return ''
+    s1 = (isinstance(inStr, basestring) and inStr or
+          '%s' % inStr)
+    s1 = s1.replace('&', '&amp;')
+    s1 = s1.replace('<', '&lt;')
+    s1 = s1.replace('>', '&gt;')
+    return s1
+
+
+def quote_attrib(inStr):
+    s1 = (isinstance(inStr, basestring) and inStr or
+          '%s' % inStr)
+    s1 = s1.replace('&', '&amp;')
+    s1 = s1.replace('<', '&lt;')
+    s1 = s1.replace('>', '&gt;')
+    if '"' in s1:
+        if "'" in s1:
+            s1 = '"%s"' % s1.replace('"', "&quot;")
+        else:
+            s1 = "'%s'" % s1
+    else:
+        s1 = '"%s"' % s1
+    return s1
+
+
+def quote_python(inStr):
+    s1 = inStr
+    if s1.find("'") == -1:
+        if s1.find('\n') == -1:
+            return "'%s'" % s1
+        else:
+            return "'''%s'''" % s1
+    else:
+        if s1.find('"') != -1:
+            s1 = s1.replace('"', '\\"')
+        if s1.find('\n') == -1:
+            return '"%s"' % s1
+        else:
+            return '"""%s"""' % s1
+
+
+def get_all_text_(node):
+    if node.text is not None:
+        text = node.text
+    else:
+        text = ''
+    for child in node:
+        if child.tail is not None:
+            text += child.tail
+    return text
+
+
+def find_attr_value_(attr_name, node):
+    attrs = node.attrib
+    attr_parts = attr_name.split(':')
+    value = None
+    if len(attr_parts) == 1:
+        value = attrs.get(attr_name)
+    elif len(attr_parts) == 2:
+        prefix, name = attr_parts
+        namespace = node.nsmap.get(prefix)
+        if namespace is not None:
+            value = attrs.get('{%s}%s' % (namespace, name, ))
+    return value
+
+
+class GDSParseError(Exception):
+    pass
+
+
+def raise_parse_error(node, msg):
+    if XMLParser_import_library == XMLParser_import_lxml:
+        msg = '%s (element %s/line %d)' % (
+            msg, node.tag, node.sourceline, )
+    else:
+        msg = '%s (element %s)' % (msg, node.tag, )
+    raise GDSParseError(msg)
+
+
+class MixedContainer:
+    # Constants for category:
+    CategoryNone = 0
+    CategoryText = 1
+    CategorySimple = 2
+    CategoryComplex = 3
+    # Constants for content_type:
+    TypeNone = 0
+    TypeText = 1
+    TypeString = 2
+    TypeInteger = 3
+    TypeFloat = 4
+    TypeDecimal = 5
+    TypeDouble = 6
+    TypeBoolean = 7
+    TypeBase64 = 8
+    def __init__(self, category, content_type, name, value):
+        self.category = category
+        self.content_type = content_type
+        self.name = name
+        self.value = value
+    def getCategory(self):
+        return self.category
+    def getContenttype(self, content_type):
+        return self.content_type
+    def getValue(self):
+        return self.value
+    def getName(self):
+        return self.name
+    def export(self, outfile, level, name, namespace, pretty_print=True):
+        if self.category == MixedContainer.CategoryText:
+            # Prevent exporting empty content as empty lines.
+            if self.value.strip():
+                outfile.write(self.value)
+        elif self.category == MixedContainer.CategorySimple:
+            self.exportSimple(outfile, level, name)
+        else:    # category == MixedContainer.CategoryComplex
+            self.value.export(outfile, level, namespace, name, pretty_print)
+    def exportSimple(self, outfile, level, name):
+        if self.content_type == MixedContainer.TypeString:
+            outfile.write('<%s>%s</%s>' % (
+                self.name, self.value, self.name))
+        elif self.content_type == MixedContainer.TypeInteger or \
+                self.content_type == MixedContainer.TypeBoolean:
+            outfile.write('<%s>%d</%s>' % (
+                self.name, self.value, self.name))
+        elif self.content_type == MixedContainer.TypeFloat or \
+                self.content_type == MixedContainer.TypeDecimal:
+            outfile.write('<%s>%f</%s>' % (
+                self.name, self.value, self.name))
+        elif self.content_type == MixedContainer.TypeDouble:
+            outfile.write('<%s>%g</%s>' % (
+                self.name, self.value, self.name))
+        elif self.content_type == MixedContainer.TypeBase64:
+            outfile.write('<%s>%s</%s>' % (
+                self.name, base64.b64encode(self.value), self.name))
+    def to_etree(self, element):
+        if self.category == MixedContainer.CategoryText:
+            # Prevent exporting empty content as empty lines.
+            if self.value.strip():
+                if len(element) > 0:
+                    if element[-1].tail is None:
+                        element[-1].tail = self.value
+                    else:
+                        element[-1].tail += self.value
+                else:
+                    if element.text is None:
+                        element.text = self.value
+                    else:
+                        element.text += self.value
+        elif self.category == MixedContainer.CategorySimple:
+            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement.text = self.to_etree_simple()
+        else:    # category == MixedContainer.CategoryComplex
+            self.value.to_etree(element)
+    def to_etree_simple(self):
+        if self.content_type == MixedContainer.TypeString:
+            text = self.value
+        elif (self.content_type == MixedContainer.TypeInteger or
+                self.content_type == MixedContainer.TypeBoolean):
+            text = '%d' % self.value
+        elif (self.content_type == MixedContainer.TypeFloat or
+                self.content_type == MixedContainer.TypeDecimal):
+            text = '%f' % self.value
+        elif self.content_type == MixedContainer.TypeDouble:
+            text = '%g' % self.value
+        elif self.content_type == MixedContainer.TypeBase64:
+            text = '%s' % base64.b64encode(self.value)
+        return text
+    def exportLiteral(self, outfile, level, name):
+        if self.category == MixedContainer.CategoryText:
+            showIndent(outfile, level)
+            outfile.write(
+                'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
+                    self.category, self.content_type, self.name, self.value))
+        elif self.category == MixedContainer.CategorySimple:
+            showIndent(outfile, level)
+            outfile.write(
+                'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
+                    self.category, self.content_type, self.name, self.value))
+        else:    # category == MixedContainer.CategoryComplex
+            showIndent(outfile, level)
+            outfile.write(
+                'model_.MixedContainer(%d, %d, "%s",\n' % (
+                    self.category, self.content_type, self.name,))
+            self.value.exportLiteral(outfile, level + 1)
+            showIndent(outfile, level)
+            outfile.write(')\n')
+
+
+class MemberSpec_(object):
+    def __init__(self, name='', data_type='', container=0):
+        self.name = name
+        self.data_type = data_type
+        self.container = container
+    def set_name(self, name): self.name = name
+    def get_name(self): return self.name
+    def set_data_type(self, data_type): self.data_type = data_type
+    def get_data_type_chain(self): return self.data_type
+    def get_data_type(self):
+        if isinstance(self.data_type, list):
+            if len(self.data_type) > 0:
+                return self.data_type[-1]
+            else:
+                return 'xs:string'
+        else:
+            return self.data_type
+    def set_container(self, container): self.container = container
+    def get_container(self): return self.container
+
+
+def _cast(typ, value):
+    if typ is None or value is None:
+        return value
+    return typ(value)
+
+#
+# Data representation classes.
+#
+
+
+class tomato_people(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('comments', 'comments', 1),
+        MemberSpec_('person', 'person', 1),
+        MemberSpec_('programmer', 'programmer', 1),
+        MemberSpec_('python_programmer', 'python-programmer', 1),
+        MemberSpec_('java_programmer', 'java-programmer', 1),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, comments=None, person=None, programmer=None, python_programmer=None, java_programmer=None):
+        self.original_tagname_ = None
+        if comments is None:
+            self.comments = []
+        else:
+            self.comments = comments
+        if person is None:
+            self.person = []
+        else:
+            self.person = person
+        if programmer is None:
+            self.programmer = []
+        else:
+            self.programmer = programmer
+        if python_programmer is None:
+            self.python_programmer = []
+        else:
+            self.python_programmer = python_programmer
+        if java_programmer is None:
+            self.java_programmer = []
+        else:
+            self.java_programmer = java_programmer
+    def factory(*args_, **kwargs_):
+        if tomato_people.subclass:
+            return tomato_people.subclass(*args_, **kwargs_)
+        else:
+            return tomato_people(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_comments(self): return self.comments
+    def set_comments(self, comments): self.comments = comments
+    def add_comments(self, value): self.comments.append(value)
+    def insert_comments_at(self, index, value): self.comments.insert(index, value)
+    def replace_comments_at(self, index, value): self.comments[index] = value
+    def get_person(self): return self.person
+    def set_person(self, person): self.person = person
+    def add_person(self, value): self.person.append(value)
+    def insert_person_at(self, index, value): self.person.insert(index, value)
+    def replace_person_at(self, index, value): self.person[index] = value
+    def get_programmer(self): return self.programmer
+    def set_programmer(self, programmer): self.programmer = programmer
+    def add_programmer(self, value): self.programmer.append(value)
+    def insert_programmer_at(self, index, value): self.programmer.insert(index, value)
+    def replace_programmer_at(self, index, value): self.programmer[index] = value
+    def get_python_programmer(self): return self.python_programmer
+    def set_python_programmer(self, python_programmer): self.python_programmer = python_programmer
+    def add_python_programmer(self, value): self.python_programmer.append(value)
+    def insert_python_programmer_at(self, index, value): self.python_programmer.insert(index, value)
+    def replace_python_programmer_at(self, index, value): self.python_programmer[index] = value
+    def get_java_programmer(self): return self.java_programmer
+    def set_java_programmer(self, java_programmer): self.java_programmer = java_programmer
+    def add_java_programmer(self, value): self.java_programmer.append(value)
+    def insert_java_programmer_at(self, index, value): self.java_programmer.insert(index, value)
+    def replace_java_programmer_at(self, index, value): self.java_programmer[index] = value
+    def hasContent_(self):
+        if (
+            self.comments or
+            self.person or
+            self.programmer or
+            self.python_programmer or
+            self.java_programmer
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='people', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='people')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='people', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='people'):
+        pass
+    def exportChildren(self, outfile, level, namespace_='', name_='people', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for comments_ in self.comments:
+            comments_.export(outfile, level, namespace_, name_='comments', pretty_print=pretty_print)
+        for person_ in self.person:
+            person_.export(outfile, level, namespace_, name_='person', pretty_print=pretty_print)
+        for programmer_ in self.programmer:
+            programmer_.export(outfile, level, namespace_, name_='programmer', pretty_print=pretty_print)
+        for python_programmer_ in self.python_programmer:
+            python_programmer_.export(outfile, level, namespace_, name_='python-programmer', pretty_print=pretty_print)
+        for java_programmer_ in self.java_programmer:
+            java_programmer_.export(outfile, level, namespace_, name_='java-programmer', pretty_print=pretty_print)
+    def exportLiteral(self, outfile, level, name_='people'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        pass
+    def exportLiteralChildren(self, outfile, level, name_):
+        showIndent(outfile, level)
+        outfile.write('comments=[\n')
+        level += 1
+        for comments_ in self.comments:
+            showIndent(outfile, level)
+            outfile.write('model_.comments(\n')
+            comments_.exportLiteral(outfile, level)
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        showIndent(outfile, level)
+        outfile.write('person=[\n')
+        level += 1
+        for person_ in self.person:
+            showIndent(outfile, level)
+            outfile.write('model_.person(\n')
+            person_.exportLiteral(outfile, level)
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        showIndent(outfile, level)
+        outfile.write('programmer=[\n')
+        level += 1
+        for programmer_ in self.programmer:
+            showIndent(outfile, level)
+            outfile.write('model_.programmer(\n')
+            programmer_.exportLiteral(outfile, level)
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        showIndent(outfile, level)
+        outfile.write('python_programmer=[\n')
+        level += 1
+        for python_programmer_ in self.python_programmer:
+            showIndent(outfile, level)
+            outfile.write('model_.python_programmer(\n')
+            python_programmer_.exportLiteral(outfile, level, name_='python-programmer')
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        showIndent(outfile, level)
+        outfile.write('java_programmer=[\n')
+        level += 1
+        for java_programmer_ in self.java_programmer:
+            showIndent(outfile, level)
+            outfile.write('model_.java_programmer(\n')
+            java_programmer_.exportLiteral(outfile, level, name_='java-programmer')
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        pass
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'comments':
+            obj_ = tomato_comments.factory()
+            obj_.build(child_)
+            self.comments.append(obj_)
+            obj_.original_tagname_ = 'comments'
+        elif nodeName_ == 'person':
+            class_obj_ = self.get_class_obj_(child_, tomato_person)
+            obj_ = class_obj_.factory()
+            obj_.build(child_)
+            self.person.append(obj_)
+            obj_.original_tagname_ = 'person'
+        elif nodeName_ == 'programmer':
+            class_obj_ = self.get_class_obj_(child_, tomato_programmer)
+            obj_ = class_obj_.factory()
+            obj_.build(child_)
+            self.programmer.append(obj_)
+            obj_.original_tagname_ = 'programmer'
+        elif nodeName_ == 'python-programmer':
+            obj_ = tomato_python_programmer.factory()
+            obj_.build(child_)
+            self.python_programmer.append(obj_)
+            obj_.original_tagname_ = 'python-programmer'
+        elif nodeName_ == 'java-programmer':
+            obj_ = tomato_java_programmer.factory()
+            obj_.build(child_)
+            self.java_programmer.append(obj_)
+            obj_.original_tagname_ = 'java-programmer'
+# end class tomato_people
+
+
+class tomato_comments(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('emp', 'xs:string', 1),
+        MemberSpec_('valueOf_', [], 0),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, emp=None, valueOf_=None, mixedclass_=None, content_=None):
+        self.original_tagname_ = None
+        if emp is None:
+            self.emp = []
+        else:
+            self.emp = emp
+        self.valueOf_ = valueOf_
+        if mixedclass_ is None:
+            self.mixedclass_ = MixedContainer
+        else:
+            self.mixedclass_ = mixedclass_
+        if content_ is None:
+            self.content_ = []
+        else:
+            self.content_ = content_
+        self.valueOf_ = valueOf_
+    def factory(*args_, **kwargs_):
+        if tomato_comments.subclass:
+            return tomato_comments.subclass(*args_, **kwargs_)
+        else:
+            return tomato_comments(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_emp(self): return self.emp
+    def set_emp(self, emp): self.emp = emp
+    def add_emp(self, value): self.emp.append(value)
+    def insert_emp_at(self, index, value): self.emp.insert(index, value)
+    def replace_emp_at(self, index, value): self.emp[index] = value
+    def get_valueOf_(self): return self.valueOf_
+    def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
+    def hasContent_(self):
+        if (
+            self.emp or
+            self.valueOf_
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='comments', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='comments')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='comments', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='comments'):
+        pass
+    def exportChildren(self, outfile, level, namespace_='', name_='comments', fromsubclass_=False, pretty_print=True):
+        if not fromsubclass_:
+            for item_ in self.content_:
+                item_.export(outfile, level, item_.name, namespace_, pretty_print=pretty_print)
+    def exportLiteral(self, outfile, level, name_='comments'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+        showIndent(outfile, level)
+        outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        pass
+    def exportLiteralChildren(self, outfile, level, name_):
+        showIndent(outfile, level)
+        outfile.write('content_ = [\n')
+        for item_ in self.content_:
+            item_.exportLiteral(outfile, level, name_)
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        pass
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        self.valueOf_ = get_all_text_(node)
+        if node.text is not None:
+            obj_ = self.mixedclass_(MixedContainer.CategoryText,
+                MixedContainer.TypeNone, '', node.text)
+            self.content_.append(obj_)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        pass
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'emp' and child_.text is not None:
+            valuestr_ = child_.text
+            obj_ = self.mixedclass_(MixedContainer.CategorySimple,
+                MixedContainer.TypeString, 'emp', valuestr_)
+            self.content_.append(obj_)
+        if not fromsubclass_ and child_.tail is not None:
+            obj_ = self.mixedclass_(MixedContainer.CategoryText,
+                MixedContainer.TypeNone, '', child_.tail)
+            self.content_.append(obj_)
+# end class tomato_comments
+
+
+class tomato_person(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('vegetable', 'xs:string', 0),
+        MemberSpec_('fruit', 'xs:string', 0),
+        MemberSpec_('ratio', 'xs:float', 0),
+        MemberSpec_('id', 'xs:integer', 0),
+        MemberSpec_('value', 'xs:string', 0),
+        MemberSpec_('name', 'xs:string', 0),
+        MemberSpec_('interest', 'xs:string', 1),
+        MemberSpec_('category', 'xs:integer', 0),
+        MemberSpec_('agent', 'agent', 1),
+        MemberSpec_('promoter', 'booster', 1),
+        MemberSpec_('description', 'xs:string', 0),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, extensiontype_=None):
+        self.original_tagname_ = None
+        self.vegetable = _cast(None, vegetable)
+        self.fruit = _cast(None, fruit)
+        self.ratio = _cast(float, ratio)
+        self.id = _cast(int, id)
+        self.value = _cast(None, value)
+        self.name = name
+        if interest is None:
+            self.interest = []
+        else:
+            self.interest = interest
+        self.category = category
+        if agent is None:
+            self.agent = []
+        else:
+            self.agent = agent
+        if promoter is None:
+            self.promoter = []
+        else:
+            self.promoter = promoter
+        self.description = description
+        self.extensiontype_ = extensiontype_
+    def factory(*args_, **kwargs_):
+        if tomato_person.subclass:
+            return tomato_person.subclass(*args_, **kwargs_)
+        else:
+            return tomato_person(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_name(self): return self.name
+    def set_name(self, name): self.name = name
+    def get_interest(self): return self.interest
+    def set_interest(self, interest): self.interest = interest
+    def add_interest(self, value): self.interest.append(value)
+    def insert_interest_at(self, index, value): self.interest.insert(index, value)
+    def replace_interest_at(self, index, value): self.interest[index] = value
+    def get_category(self): return self.category
+    def set_category(self, category): self.category = category
+    def get_agent(self): return self.agent
+    def set_agent(self, agent): self.agent = agent
+    def add_agent(self, value): self.agent.append(value)
+    def insert_agent_at(self, index, value): self.agent.insert(index, value)
+    def replace_agent_at(self, index, value): self.agent[index] = value
+    def get_promoter(self): return self.promoter
+    def set_promoter(self, promoter): self.promoter = promoter
+    def add_promoter(self, value): self.promoter.append(value)
+    def insert_promoter_at(self, index, value): self.promoter.insert(index, value)
+    def replace_promoter_at(self, index, value): self.promoter[index] = value
+    def get_description(self): return self.description
+    def set_description(self, description): self.description = description
+    def get_vegetable(self): return self.vegetable
+    def set_vegetable(self, vegetable): self.vegetable = vegetable
+    def get_fruit(self): return self.fruit
+    def set_fruit(self, fruit): self.fruit = fruit
+    def get_ratio(self): return self.ratio
+    def set_ratio(self, ratio): self.ratio = ratio
+    def get_id(self): return self.id
+    def set_id(self, id): self.id = id
+    def get_value(self): return self.value
+    def set_value(self, value): self.value = value
+    def get_extensiontype_(self): return self.extensiontype_
+    def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_
+    def hasContent_(self):
+        if (
+            self.name is not None or
+            self.interest or
+            self.category is not None or
+            self.agent or
+            self.promoter or
+            self.description is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='person', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='person')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='person', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='person'):
+        if self.vegetable is not None and 'vegetable' not in already_processed:
+            already_processed.add('vegetable')
+            outfile.write(' vegetable=%s' % (self.gds_format_string(quote_attrib(self.vegetable).encode(ExternalEncoding), input_name='vegetable'), ))
+        if self.fruit is not None and 'fruit' not in already_processed:
+            already_processed.add('fruit')
+            outfile.write(' fruit=%s' % (self.gds_format_string(quote_attrib(self.fruit).encode(ExternalEncoding), input_name='fruit'), ))
+        if self.ratio is not None and 'ratio' not in already_processed:
+            already_processed.add('ratio')
+            outfile.write(' ratio="%s"' % self.gds_format_float(self.ratio, input_name='ratio'))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id'))
+        if self.value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            outfile.write(' value=%s' % (self.gds_format_string(quote_attrib(self.value).encode(ExternalEncoding), input_name='value'), ))
+        if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
+            already_processed.add('xsi:type')
+            outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
+            outfile.write(' xsi:type="%s"' % self.extensiontype_)
+    def exportChildren(self, outfile, level, namespace_='', name_='person', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.name is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sname>%s</%sname>%s' % (namespace_, self.gds_format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_, eol_))
+        for interest_ in self.interest:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sinterest>%s</%sinterest>%s' % (namespace_, self.gds_format_string(quote_xml(interest_).encode(ExternalEncoding), input_name='interest'), namespace_, eol_))
+        if self.category is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%scategory>%s</%scategory>%s' % (namespace_, self.gds_format_integer(self.category, input_name='category'), namespace_, eol_))
+        for agent_ in self.agent:
+            agent_.export(outfile, level, namespace_, name_='agent', pretty_print=pretty_print)
+        for promoter_ in self.promoter:
+            promoter_.export(outfile, level, namespace_, name_='promoter', pretty_print=pretty_print)
+        if self.description is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sdescription>%s</%sdescription>%s' % (namespace_, self.gds_format_string(quote_xml(self.description).encode(ExternalEncoding), input_name='description'), namespace_, eol_))
+    def exportLiteral(self, outfile, level, name_='person'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        if self.vegetable is not None and 'vegetable' not in already_processed:
+            already_processed.add('vegetable')
+            showIndent(outfile, level)
+            outfile.write('vegetable="%s",\n' % (self.vegetable,))
+        if self.fruit is not None and 'fruit' not in already_processed:
+            already_processed.add('fruit')
+            showIndent(outfile, level)
+            outfile.write('fruit="%s",\n' % (self.fruit,))
+        if self.ratio is not None and 'ratio' not in already_processed:
+            already_processed.add('ratio')
+            showIndent(outfile, level)
+            outfile.write('ratio=%f,\n' % (self.ratio,))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            showIndent(outfile, level)
+            outfile.write('id=%d,\n' % (self.id,))
+        if self.value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            showIndent(outfile, level)
+            outfile.write('value="%s",\n' % (self.value,))
+    def exportLiteralChildren(self, outfile, level, name_):
+        if self.name is not None:
+            showIndent(outfile, level)
+            outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding))
+        showIndent(outfile, level)
+        outfile.write('interest=[\n')
+        level += 1
+        for interest_ in self.interest:
+            showIndent(outfile, level)
+            outfile.write('%s,\n' % quote_python(interest_).encode(ExternalEncoding))
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        if self.category is not None:
+            showIndent(outfile, level)
+            outfile.write('category=%d,\n' % self.category)
+        showIndent(outfile, level)
+        outfile.write('agent=[\n')
+        level += 1
+        for agent_ in self.agent:
+            showIndent(outfile, level)
+            outfile.write('model_.agent(\n')
+            agent_.exportLiteral(outfile, level)
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        showIndent(outfile, level)
+        outfile.write('promoter=[\n')
+        level += 1
+        for promoter_ in self.promoter:
+            showIndent(outfile, level)
+            outfile.write('model_.booster(\n')
+            promoter_.exportLiteral(outfile, level, name_='booster')
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        if self.description is not None:
+            showIndent(outfile, level)
+            outfile.write('description=%s,\n' % quote_python(self.description).encode(ExternalEncoding))
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('vegetable', node)
+        if value is not None and 'vegetable' not in already_processed:
+            already_processed.add('vegetable')
+            self.vegetable = value
+        value = find_attr_value_('fruit', node)
+        if value is not None and 'fruit' not in already_processed:
+            already_processed.add('fruit')
+            self.fruit = value
+        value = find_attr_value_('ratio', node)
+        if value is not None and 'ratio' not in already_processed:
+            already_processed.add('ratio')
+            try:
+                self.ratio = float(value)
+            except ValueError, exp:
+                raise ValueError('Bad float/double attribute (ratio): %s' % exp)
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            try:
+                self.id = int(value)
+            except ValueError, exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+        value = find_attr_value_('value', node)
+        if value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            self.value = value
+        value = find_attr_value_('xsi:type', node)
+        if value is not None and 'xsi:type' not in already_processed:
+            already_processed.add('xsi:type')
+            self.extensiontype_ = value
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'name':
+            name_ = child_.text
+            name_ = self.gds_validate_string(name_, node, 'name')
+            self.name = name_
+        elif nodeName_ == 'interest':
+            interest_ = child_.text
+            interest_ = self.gds_validate_string(interest_, node, 'interest')
+            self.interest.append(interest_)
+        elif nodeName_ == 'category':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            ival_ = self.gds_validate_integer(ival_, node, 'category')
+            self.category = ival_
+        elif nodeName_ == 'agent':
+            obj_ = tomato_agent.factory()
+            obj_.build(child_)
+            self.agent.append(obj_)
+            obj_.original_tagname_ = 'agent'
+        elif nodeName_ == 'promoter':
+            obj_ = tomato_booster.factory()
+            obj_.build(child_)
+            self.promoter.append(obj_)
+            obj_.original_tagname_ = 'promoter'
+        elif nodeName_ == 'description':
+            description_ = child_.text
+            description_ = self.gds_validate_string(description_, node, 'description')
+            self.description = description_
+# end class tomato_person
+
+
+class tomato_programmer(tomato_person):
+    member_data_items_ = [
+        MemberSpec_('language', 'xs:string', 0),
+        MemberSpec_('area', 'xs:string', 0),
+        MemberSpec_('attrnegint', 'xs:negativeInteger', 0),
+        MemberSpec_('attrposint', 'xs:positiveInteger', 0),
+        MemberSpec_('attrnonnegint', 'xs:nonNegativeInteger', 0),
+        MemberSpec_('attrnonposint', 'xs:nonPositiveInteger', 0),
+        MemberSpec_('email', 'xs:string', 0),
+        MemberSpec_('elposint', 'xs:positiveInteger', 0),
+        MemberSpec_('elnonposint', 'xs:nonPositiveInteger', 0),
+        MemberSpec_('elnegint', 'xs:negativeInteger', 0),
+        MemberSpec_('elnonnegint', 'xs:nonNegativeInteger', 0),
+        MemberSpec_('eldate', 'xs:date', 0),
+        MemberSpec_('eldatetime', 'xs:dateTime', 0),
+        MemberSpec_('eltoken', 'xs:token', 0),
+        MemberSpec_('elshort', 'xs:short', 0),
+        MemberSpec_('ellong', 'xs:long', 0),
+        MemberSpec_('elparam', 'param', 0),
+        MemberSpec_('elarraytypes', ['ArrayTypes', 'xs:NMTOKEN'], 0),
+    ]
+    subclass = None
+    superclass = tomato_person
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, extensiontype_=None):
+        self.original_tagname_ = None
+        super(tomato_programmer, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, extensiontype_, )
+        self.language = _cast(None, language)
+        self.area = _cast(None, area)
+        self.attrnegint = _cast(int, attrnegint)
+        self.attrposint = _cast(int, attrposint)
+        self.attrnonnegint = _cast(int, attrnonnegint)
+        self.attrnonposint = _cast(int, attrnonposint)
+        self.email = email
+        self.elposint = elposint
+        self.elnonposint = elnonposint
+        self.elnegint = elnegint
+        self.elnonnegint = elnonnegint
+        if isinstance(eldate, basestring):
+            initvalue_ = datetime_.datetime.strptime(eldate, '%Y-%m-%d').date()
+        else:
+            initvalue_ = eldate
+        self.eldate = initvalue_
+        if isinstance(eldatetime, basestring):
+            initvalue_ = datetime_.datetime.strptime(eldatetime, '%Y-%m-%dT%H:%M:%S')
+        else:
+            initvalue_ = eldatetime
+        self.eldatetime = initvalue_
+        self.eltoken = eltoken
+        self.elshort = elshort
+        self.ellong = ellong
+        self.elparam = elparam
+        self.elarraytypes = elarraytypes
+        self.extensiontype_ = extensiontype_
+    def factory(*args_, **kwargs_):
+        if tomato_programmer.subclass:
+            return tomato_programmer.subclass(*args_, **kwargs_)
+        else:
+            return tomato_programmer(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_email(self): return self.email
+    def set_email(self, email): self.email = email
+    def get_elposint(self): return self.elposint
+    def set_elposint(self, elposint): self.elposint = elposint
+    def get_elnonposint(self): return self.elnonposint
+    def set_elnonposint(self, elnonposint): self.elnonposint = elnonposint
+    def get_elnegint(self): return self.elnegint
+    def set_elnegint(self, elnegint): self.elnegint = elnegint
+    def get_elnonnegint(self): return self.elnonnegint
+    def set_elnonnegint(self, elnonnegint): self.elnonnegint = elnonnegint
+    def get_eldate(self): return self.eldate
+    def set_eldate(self, eldate): self.eldate = eldate
+    def get_eldatetime(self): return self.eldatetime
+    def set_eldatetime(self, eldatetime): self.eldatetime = eldatetime
+    def get_eltoken(self): return self.eltoken
+    def set_eltoken(self, eltoken): self.eltoken = eltoken
+    def get_elshort(self): return self.elshort
+    def set_elshort(self, elshort): self.elshort = elshort
+    def get_ellong(self): return self.ellong
+    def set_ellong(self, ellong): self.ellong = ellong
+    def get_elparam(self): return self.elparam
+    def set_elparam(self, elparam): self.elparam = elparam
+    def get_elarraytypes(self): return self.elarraytypes
+    def set_elarraytypes(self, elarraytypes): self.elarraytypes = elarraytypes
+    def get_language(self): return self.language
+    def set_language(self, language): self.language = language
+    def get_area(self): return self.area
+    def set_area(self, area): self.area = area
+    def get_attrnegint(self): return self.attrnegint
+    def set_attrnegint(self, attrnegint): self.attrnegint = attrnegint
+    def get_attrposint(self): return self.attrposint
+    def set_attrposint(self, attrposint): self.attrposint = attrposint
+    def get_attrnonnegint(self): return self.attrnonnegint
+    def set_attrnonnegint(self, attrnonnegint): self.attrnonnegint = attrnonnegint
+    def get_attrnonposint(self): return self.attrnonposint
+    def set_attrnonposint(self, attrnonposint): self.attrnonposint = attrnonposint
+    def get_extensiontype_(self): return self.extensiontype_
+    def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_
+    def validate_ArrayTypes(self, value):
+        # Validate type ArrayTypes, a restriction on xs:NMTOKEN.
+        pass
+    def hasContent_(self):
+        if (
+            self.email is not None or
+            self.elposint is not None or
+            self.elnonposint is not None or
+            self.elnegint is not None or
+            self.elnonnegint is not None or
+            self.eldate is not None or
+            self.eldatetime is not None or
+            self.eltoken is not None or
+            self.elshort is not None or
+            self.ellong is not None or
+            self.elparam is not None or
+            self.elarraytypes is not None or
+            super(tomato_programmer, self).hasContent_()
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='programmer', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='programmer')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='programmer', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='programmer'):
+        super(tomato_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='programmer')
+        if self.language is not None and 'language' not in already_processed:
+            already_processed.add('language')
+            outfile.write(' language=%s' % (self.gds_format_string(quote_attrib(self.language).encode(ExternalEncoding), input_name='language'), ))
+        if self.area is not None and 'area' not in already_processed:
+            already_processed.add('area')
+            outfile.write(' area=%s' % (self.gds_format_string(quote_attrib(self.area).encode(ExternalEncoding), input_name='area'), ))
+        if self.attrnegint is not None and 'attrnegint' not in already_processed:
+            already_processed.add('attrnegint')
+            outfile.write(' attrnegint="%s"' % self.gds_format_integer(self.attrnegint, input_name='attrnegint'))
+        if self.attrposint is not None and 'attrposint' not in already_processed:
+            already_processed.add('attrposint')
+            outfile.write(' attrposint="%s"' % self.gds_format_integer(self.attrposint, input_name='attrposint'))
+        if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed:
+            already_processed.add('attrnonnegint')
+            outfile.write(' attrnonnegint="%s"' % self.gds_format_integer(self.attrnonnegint, input_name='attrnonnegint'))
+        if self.attrnonposint is not None and 'attrnonposint' not in already_processed:
+            already_processed.add('attrnonposint')
+            outfile.write(' attrnonposint="%s"' % self.gds_format_integer(self.attrnonposint, input_name='attrnonposint'))
+        if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
+            already_processed.add('xsi:type')
+            outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
+            outfile.write(' xsi:type="%s"' % self.extensiontype_)
+    def exportChildren(self, outfile, level, namespace_='', name_='programmer', fromsubclass_=False, pretty_print=True):
+        super(tomato_programmer, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.email is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%semail>%s</%semail>%s' % (namespace_, self.gds_format_string(quote_xml(self.email).encode(ExternalEncoding), input_name='email'), namespace_, eol_))
+        if self.elposint is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%selposint>%s</%selposint>%s' % (namespace_, self.gds_format_integer(self.elposint, input_name='elposint'), namespace_, eol_))
+        if self.elnonposint is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%selnonposint>%s</%selnonposint>%s' % (namespace_, self.gds_format_integer(self.elnonposint, input_name='elnonposint'), namespace_, eol_))
+        if self.elnegint is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%selnegint>%s</%selnegint>%s' % (namespace_, self.gds_format_integer(self.elnegint, input_name='elnegint'), namespace_, eol_))
+        if self.elnonnegint is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%selnonnegint>%s</%selnonnegint>%s' % (namespace_, self.gds_format_integer(self.elnonnegint, input_name='elnonnegint'), namespace_, eol_))
+        if self.eldate is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%seldate>%s</%seldate>%s' % (namespace_, self.gds_format_date(self.eldate, input_name='eldate'), namespace_, eol_))
+        if self.eldatetime is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%seldatetime>%s</%seldatetime>%s' % (namespace_, self.gds_format_datetime(self.eldatetime, input_name='eldatetime'), namespace_, eol_))
+        if self.eltoken is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%seltoken>%s</%seltoken>%s' % (namespace_, self.gds_format_string(quote_xml(self.eltoken).encode(ExternalEncoding), input_name='eltoken'), namespace_, eol_))
+        if self.elshort is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%selshort>%s</%selshort>%s' % (namespace_, self.gds_format_integer(self.elshort, input_name='elshort'), namespace_, eol_))
+        if self.ellong is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sellong>%s</%sellong>%s' % (namespace_, self.gds_format_integer(self.ellong, input_name='ellong'), namespace_, eol_))
+        if self.elparam is not None:
+            self.elparam.export(outfile, level, namespace_, name_='elparam', pretty_print=pretty_print)
+        if self.elarraytypes is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%selarraytypes>%s</%selarraytypes>%s' % (namespace_, self.gds_format_string(quote_xml(self.elarraytypes).encode(ExternalEncoding), input_name='elarraytypes'), namespace_, eol_))
+    def exportLiteral(self, outfile, level, name_='programmer'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        if self.language is not None and 'language' not in already_processed:
+            already_processed.add('language')
+            showIndent(outfile, level)
+            outfile.write('language="%s",\n' % (self.language,))
+        if self.area is not None and 'area' not in already_processed:
+            already_processed.add('area')
+            showIndent(outfile, level)
+            outfile.write('area="%s",\n' % (self.area,))
+        if self.attrnegint is not None and 'attrnegint' not in already_processed:
+            already_processed.add('attrnegint')
+            showIndent(outfile, level)
+            outfile.write('attrnegint=%d,\n' % (self.attrnegint,))
+        if self.attrposint is not None and 'attrposint' not in already_processed:
+            already_processed.add('attrposint')
+            showIndent(outfile, level)
+            outfile.write('attrposint=%d,\n' % (self.attrposint,))
+        if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed:
+            already_processed.add('attrnonnegint')
+            showIndent(outfile, level)
+            outfile.write('attrnonnegint=%d,\n' % (self.attrnonnegint,))
+        if self.attrnonposint is not None and 'attrnonposint' not in already_processed:
+            already_processed.add('attrnonposint')
+            showIndent(outfile, level)
+            outfile.write('attrnonposint=%d,\n' % (self.attrnonposint,))
+        super(tomato_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
+    def exportLiteralChildren(self, outfile, level, name_):
+        super(tomato_programmer, self).exportLiteralChildren(outfile, level, name_)
+        if self.email is not None:
+            showIndent(outfile, level)
+            outfile.write('email=%s,\n' % quote_python(self.email).encode(ExternalEncoding))
+        if self.elposint is not None:
+            showIndent(outfile, level)
+            outfile.write('elposint=%d,\n' % self.elposint)
+        if self.elnonposint is not None:
+            showIndent(outfile, level)
+            outfile.write('elnonposint=%d,\n' % self.elnonposint)
+        if self.elnegint is not None:
+            showIndent(outfile, level)
+            outfile.write('elnegint=%d,\n' % self.elnegint)
+        if self.elnonnegint is not None:
+            showIndent(outfile, level)
+            outfile.write('elnonnegint=%d,\n' % self.elnonnegint)
+        if self.eldate is not None:
+            showIndent(outfile, level)
+            outfile.write('eldate=model_.GeneratedsSuper.gds_parse_date("%s"),\n' % self.gds_format_date(self.eldate, input_name='eldate'))
+        if self.eldatetime is not None:
+            showIndent(outfile, level)
+            outfile.write('eldatetime=model_.GeneratedsSuper.gds_parse_datetime("%s"),\n' % self.gds_format_datetime(self.eldatetime, input_name='eldatetime'))
+        if self.eltoken is not None:
+            showIndent(outfile, level)
+            outfile.write('eltoken=%s,\n' % quote_python(self.eltoken).encode(ExternalEncoding))
+        if self.elshort is not None:
+            showIndent(outfile, level)
+            outfile.write('elshort=%d,\n' % self.elshort)
+        if self.ellong is not None:
+            showIndent(outfile, level)
+            outfile.write('ellong=%d,\n' % self.ellong)
+        if self.elparam is not None:
+            showIndent(outfile, level)
+            outfile.write('elparam=model_.param(\n')
+            self.elparam.exportLiteral(outfile, level, name_='elparam')
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        if self.elarraytypes is not None:
+            showIndent(outfile, level)
+            outfile.write('elarraytypes=%s,\n' % quote_python(self.elarraytypes).encode(ExternalEncoding))
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('language', node)
+        if value is not None and 'language' not in already_processed:
+            already_processed.add('language')
+            self.language = value
+        value = find_attr_value_('area', node)
+        if value is not None and 'area' not in already_processed:
+            already_processed.add('area')
+            self.area = value
+        value = find_attr_value_('attrnegint', node)
+        if value is not None and 'attrnegint' not in already_processed:
+            already_processed.add('attrnegint')
+            try:
+                self.attrnegint = int(value)
+            except ValueError, exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.attrnegint >= 0:
+                raise_parse_error(node, 'Invalid NegativeInteger')
+        value = find_attr_value_('attrposint', node)
+        if value is not None and 'attrposint' not in already_processed:
+            already_processed.add('attrposint')
+            try:
+                self.attrposint = int(value)
+            except ValueError, exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.attrposint <= 0:
+                raise_parse_error(node, 'Invalid PositiveInteger')
+        value = find_attr_value_('attrnonnegint', node)
+        if value is not None and 'attrnonnegint' not in already_processed:
+            already_processed.add('attrnonnegint')
+            try:
+                self.attrnonnegint = int(value)
+            except ValueError, exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.attrnonnegint < 0:
+                raise_parse_error(node, 'Invalid NonNegativeInteger')
+        value = find_attr_value_('attrnonposint', node)
+        if value is not None and 'attrnonposint' not in already_processed:
+            already_processed.add('attrnonposint')
+            try:
+                self.attrnonposint = int(value)
+            except ValueError, exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.attrnonposint > 0:
+                raise_parse_error(node, 'Invalid NonPositiveInteger')
+        value = find_attr_value_('xsi:type', node)
+        if value is not None and 'xsi:type' not in already_processed:
+            already_processed.add('xsi:type')
+            self.extensiontype_ = value
+        super(tomato_programmer, self).buildAttributes(node, attrs, already_processed)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'email':
+            email_ = child_.text
+            email_ = self.gds_validate_string(email_, node, 'email')
+            self.email = email_
+        elif nodeName_ == 'elposint':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            if ival_ <= 0:
+                raise_parse_error(child_, 'requires positiveInteger')
+            ival_ = self.gds_validate_integer(ival_, node, 'elposint')
+            self.elposint = ival_
+        elif nodeName_ == 'elnonposint':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            if ival_ > 0:
+                raise_parse_error(child_, 'requires nonPositiveInteger')
+            ival_ = self.gds_validate_integer(ival_, node, 'elnonposint')
+            self.elnonposint = ival_
+        elif nodeName_ == 'elnegint':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            if ival_ >= 0:
+                raise_parse_error(child_, 'requires negativeInteger')
+            ival_ = self.gds_validate_integer(ival_, node, 'elnegint')
+            self.elnegint = ival_
+        elif nodeName_ == 'elnonnegint':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            if ival_ < 0:
+                raise_parse_error(child_, 'requires nonNegativeInteger')
+            ival_ = self.gds_validate_integer(ival_, node, 'elnonnegint')
+            self.elnonnegint = ival_
+        elif nodeName_ == 'eldate':
+            sval_ = child_.text
+            dval_ = self.gds_parse_date(sval_)
+            self.eldate = dval_
+        elif nodeName_ == 'eldatetime':
+            sval_ = child_.text
+            dval_ = self.gds_parse_datetime(sval_)
+            self.eldatetime = dval_
+        elif nodeName_ == 'eltoken':
+            eltoken_ = child_.text
+            eltoken_ = re_.sub(String_cleanup_pat_, " ", eltoken_).strip()
+            eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken')
+            self.eltoken = eltoken_
+        elif nodeName_ == 'elshort':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            ival_ = self.gds_validate_integer(ival_, node, 'elshort')
+            self.elshort = ival_
+        elif nodeName_ == 'ellong':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            ival_ = self.gds_validate_integer(ival_, node, 'ellong')
+            self.ellong = ival_
+        elif nodeName_ == 'elparam':
+            obj_ = tomato_param.factory()
+            obj_.build(child_)
+            self.elparam = obj_
+            obj_.original_tagname_ = 'elparam'
+        elif nodeName_ == 'elarraytypes':
+            elarraytypes_ = child_.text
+            elarraytypes_ = self.gds_validate_string(elarraytypes_, node, 'elarraytypes')
+            self.elarraytypes = elarraytypes_
+            self.validate_ArrayTypes(self.elarraytypes)    # validate type ArrayTypes
+        super(tomato_programmer, self).buildChildren(child_, node, nodeName_, True)
+# end class tomato_programmer
+
+
+class tomato_param(GeneratedsSuper):
+    """Finding flow attribute unneccesary in practice. A unnamed parameter
+    is unbound/skipped."""
+    member_data_items_ = [
+        MemberSpec_('semantic', 'xs:token', 0),
+        MemberSpec_('name', 'xs:NCName', 0),
+        MemberSpec_('flow', 'FlowType', 0),
+        MemberSpec_('sid', 'xs:NCName', 0),
+        MemberSpec_('type', 'xs:NMTOKEN', 0),
+        MemberSpec_('id', 'xs:string', 0),
+        MemberSpec_('valueOf_', 'xs:string', 0),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, semantic=None, name=None, flow=None, sid=None, type_=None, id=None, valueOf_=None):
+        self.original_tagname_ = None
+        self.semantic = _cast(None, semantic)
+        self.name = _cast(None, name)
+        self.flow = _cast(None, flow)
+        self.sid = _cast(None, sid)
+        self.type_ = _cast(None, type_)
+        self.id = _cast(None, id)
+        self.valueOf_ = valueOf_
+    def factory(*args_, **kwargs_):
+        if tomato_param.subclass:
+            return tomato_param.subclass(*args_, **kwargs_)
+        else:
+            return tomato_param(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_semantic(self): return self.semantic
+    def set_semantic(self, semantic): self.semantic = semantic
+    def get_name(self): return self.name
+    def set_name(self, name): self.name = name
+    def get_flow(self): return self.flow
+    def set_flow(self, flow): self.flow = flow
+    def get_sid(self): return self.sid
+    def set_sid(self, sid): self.sid = sid
+    def get_type(self): return self.type_
+    def set_type(self, type_): self.type_ = type_
+    def get_id(self): return self.id
+    def set_id(self, id): self.id = id
+    def get_valueOf_(self): return self.valueOf_
+    def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
+    def hasContent_(self):
+        if (
+            self.valueOf_
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='param', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='param')
+        if self.hasContent_():
+            outfile.write('>')
+            outfile.write(str(self.valueOf_).encode(ExternalEncoding))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='param', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='param'):
+        if self.semantic is not None and 'semantic' not in already_processed:
+            already_processed.add('semantic')
+            outfile.write(' semantic=%s' % (self.gds_format_string(quote_attrib(self.semantic).encode(ExternalEncoding), input_name='semantic'), ))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (quote_attrib(self.name), ))
+        if self.flow is not None and 'flow' not in already_processed:
+            already_processed.add('flow')
+            outfile.write(' flow=%s' % (quote_attrib(self.flow), ))
+        if self.sid is not None and 'sid' not in already_processed:
+            already_processed.add('sid')
+            outfile.write(' sid=%s' % (quote_attrib(self.sid), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_format_string(quote_attrib(self.type_).encode(ExternalEncoding), input_name='type'), ))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), ))
+    def exportChildren(self, outfile, level, namespace_='', name_='param', fromsubclass_=False, pretty_print=True):
+        pass
+    def exportLiteral(self, outfile, level, name_='param'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+        showIndent(outfile, level)
+        outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        if self.semantic is not None and 'semantic' not in already_processed:
+            already_processed.add('semantic')
+            showIndent(outfile, level)
+            outfile.write('semantic="%s",\n' % (self.semantic,))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            showIndent(outfile, level)
+            outfile.write('name="%s",\n' % (self.name,))
+        if self.flow is not None and 'flow' not in already_processed:
+            already_processed.add('flow')
+            showIndent(outfile, level)
+            outfile.write('flow=%s,\n' % (self.flow,))
+        if self.sid is not None and 'sid' not in already_processed:
+            already_processed.add('sid')
+            showIndent(outfile, level)
+            outfile.write('sid="%s",\n' % (self.sid,))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            showIndent(outfile, level)
+            outfile.write('type_="%s",\n' % (self.type_,))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            showIndent(outfile, level)
+            outfile.write('id="%s",\n' % (self.id,))
+    def exportLiteralChildren(self, outfile, level, name_):
+        pass
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        self.valueOf_ = get_all_text_(node)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('semantic', node)
+        if value is not None and 'semantic' not in already_processed:
+            already_processed.add('semantic')
+            self.semantic = value
+            self.semantic = ' '.join(self.semantic.split())
+        value = find_attr_value_('name', node)
+        if value is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            self.name = value
+        value = find_attr_value_('flow', node)
+        if value is not None and 'flow' not in already_processed:
+            already_processed.add('flow')
+            self.flow = value
+        value = find_attr_value_('sid', node)
+        if value is not None and 'sid' not in already_processed:
+            already_processed.add('sid')
+            self.sid = value
+        value = find_attr_value_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            self.type_ = value
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        pass
+# end class tomato_param
+
+
+class tomato_python_programmer(tomato_programmer):
+    member_data_items_ = [
+        MemberSpec_('nick-name', 'xs:string', 0),
+        MemberSpec_('favorite_editor', 'xs:string', 0),
+    ]
+    subclass = None
+    superclass = tomato_programmer
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, nick_name=None, favorite_editor=None):
+        self.original_tagname_ = None
+        super(tomato_python_programmer, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, )
+        self.nick_name = _cast(None, nick_name)
+        self.favorite_editor = favorite_editor
+    def factory(*args_, **kwargs_):
+        if tomato_python_programmer.subclass:
+            return tomato_python_programmer.subclass(*args_, **kwargs_)
+        else:
+            return tomato_python_programmer(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_favorite_editor(self): return self.favorite_editor
+    def set_favorite_editor(self, favorite_editor): self.favorite_editor = favorite_editor
+    def get_nick_name(self): return self.nick_name
+    def set_nick_name(self, nick_name): self.nick_name = nick_name
+    def hasContent_(self):
+        if (
+            self.favorite_editor is not None or
+            super(tomato_python_programmer, self).hasContent_()
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='python-programmer', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmer')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='python-programmer', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='python-programmer'):
+        super(tomato_python_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmer')
+        if self.nick_name is not None and 'nick_name' not in already_processed:
+            already_processed.add('nick_name')
+            outfile.write(' nick-name=%s' % (self.gds_format_string(quote_attrib(self.nick_name).encode(ExternalEncoding), input_name='nick-name'), ))
+    def exportChildren(self, outfile, level, namespace_='', name_='python-programmer', fromsubclass_=False, pretty_print=True):
+        super(tomato_python_programmer, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.favorite_editor is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sfavorite-editor>%s</%sfavorite-editor>%s' % (namespace_, self.gds_format_string(quote_xml(self.favorite_editor).encode(ExternalEncoding), input_name='favorite-editor'), namespace_, eol_))
+    def exportLiteral(self, outfile, level, name_='python-programmer'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        if self.nick_name is not None and 'nick_name' not in already_processed:
+            already_processed.add('nick_name')
+            showIndent(outfile, level)
+            outfile.write('nick_name="%s",\n' % (self.nick_name,))
+        super(tomato_python_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
+    def exportLiteralChildren(self, outfile, level, name_):
+        super(tomato_python_programmer, self).exportLiteralChildren(outfile, level, name_)
+        if self.favorite_editor is not None:
+            showIndent(outfile, level)
+            outfile.write('favorite_editor=%s,\n' % quote_python(self.favorite_editor).encode(ExternalEncoding))
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('nick-name', node)
+        if value is not None and 'nick-name' not in already_processed:
+            already_processed.add('nick-name')
+            self.nick_name = value
+        super(tomato_python_programmer, self).buildAttributes(node, attrs, already_processed)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'favorite-editor':
+            favorite_editor_ = child_.text
+            favorite_editor_ = self.gds_validate_string(favorite_editor_, node, 'favorite_editor')
+            self.favorite_editor = favorite_editor_
+        super(tomato_python_programmer, self).buildChildren(child_, node, nodeName_, True)
+# end class tomato_python_programmer
+
+
+class tomato_java_programmer(tomato_programmer):
+    member_data_items_ = [
+        MemberSpec_('status', 'xs:string', 0),
+        MemberSpec_('nick-name', 'xs:string', 0),
+        MemberSpec_('favorite_editor', 'xs:string', 0),
+    ]
+    subclass = None
+    superclass = tomato_programmer
+    def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, status=None, nick_name=None, favorite_editor=None):
+        self.original_tagname_ = None
+        super(tomato_java_programmer, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, )
+        self.status = _cast(None, status)
+        self.nick_name = _cast(None, nick_name)
+        self.favorite_editor = favorite_editor
+    def factory(*args_, **kwargs_):
+        if tomato_java_programmer.subclass:
+            return tomato_java_programmer.subclass(*args_, **kwargs_)
+        else:
+            return tomato_java_programmer(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_favorite_editor(self): return self.favorite_editor
+    def set_favorite_editor(self, favorite_editor): self.favorite_editor = favorite_editor
+    def get_status(self): return self.status
+    def set_status(self, status): self.status = status
+    def get_nick_name(self): return self.nick_name
+    def set_nick_name(self, nick_name): self.nick_name = nick_name
+    def hasContent_(self):
+        if (
+            self.favorite_editor is not None or
+            super(tomato_java_programmer, self).hasContent_()
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='java-programmer', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmer')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='java-programmer', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='java-programmer'):
+        super(tomato_java_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmer')
+        if self.status is not None and 'status' not in already_processed:
+            already_processed.add('status')
+            outfile.write(' status=%s' % (self.gds_format_string(quote_attrib(self.status).encode(ExternalEncoding), input_name='status'), ))
+        if self.nick_name is not None and 'nick_name' not in already_processed:
+            already_processed.add('nick_name')
+            outfile.write(' nick-name=%s' % (self.gds_format_string(quote_attrib(self.nick_name).encode(ExternalEncoding), input_name='nick-name'), ))
+    def exportChildren(self, outfile, level, namespace_='', name_='java-programmer', fromsubclass_=False, pretty_print=True):
+        super(tomato_java_programmer, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.favorite_editor is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sfavorite-editor>%s</%sfavorite-editor>%s' % (namespace_, self.gds_format_string(quote_xml(self.favorite_editor).encode(ExternalEncoding), input_name='favorite-editor'), namespace_, eol_))
+    def exportLiteral(self, outfile, level, name_='java-programmer'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        if self.status is not None and 'status' not in already_processed:
+            already_processed.add('status')
+            showIndent(outfile, level)
+            outfile.write('status="%s",\n' % (self.status,))
+        if self.nick_name is not None and 'nick_name' not in already_processed:
+            already_processed.add('nick_name')
+            showIndent(outfile, level)
+            outfile.write('nick_name="%s",\n' % (self.nick_name,))
+        super(tomato_java_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
+    def exportLiteralChildren(self, outfile, level, name_):
+        super(tomato_java_programmer, self).exportLiteralChildren(outfile, level, name_)
+        if self.favorite_editor is not None:
+            showIndent(outfile, level)
+            outfile.write('favorite_editor=%s,\n' % quote_python(self.favorite_editor).encode(ExternalEncoding))
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('status', node)
+        if value is not None and 'status' not in already_processed:
+            already_processed.add('status')
+            self.status = value
+        value = find_attr_value_('nick-name', node)
+        if value is not None and 'nick-name' not in already_processed:
+            already_processed.add('nick-name')
+            self.nick_name = value
+        super(tomato_java_programmer, self).buildAttributes(node, attrs, already_processed)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'favorite-editor':
+            favorite_editor_ = child_.text
+            favorite_editor_ = self.gds_validate_string(favorite_editor_, node, 'favorite_editor')
+            self.favorite_editor = favorite_editor_
+        super(tomato_java_programmer, self).buildChildren(child_, node, nodeName_, True)
+# end class tomato_java_programmer
+
+
+class tomato_agent(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('firstname', 'xs:string', 0),
+        MemberSpec_('lastname', 'xs:string', 0),
+        MemberSpec_('priority', 'xs:float', 0),
+        MemberSpec_('info', 'info', 0),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, firstname=None, lastname=None, priority=None, info=None):
+        self.original_tagname_ = None
+        self.firstname = firstname
+        self.lastname = lastname
+        self.priority = priority
+        self.info = info
+    def factory(*args_, **kwargs_):
+        if tomato_agent.subclass:
+            return tomato_agent.subclass(*args_, **kwargs_)
+        else:
+            return tomato_agent(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_firstname(self): return self.firstname
+    def set_firstname(self, firstname): self.firstname = firstname
+    def get_lastname(self): return self.lastname
+    def set_lastname(self, lastname): self.lastname = lastname
+    def get_priority(self): return self.priority
+    def set_priority(self, priority): self.priority = priority
+    def get_info(self): return self.info
+    def set_info(self, info): self.info = info
+    def hasContent_(self):
+        if (
+            self.firstname is not None or
+            self.lastname is not None or
+            self.priority is not None or
+            self.info is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='agent', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='agent')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='agent', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='agent'):
+        pass
+    def exportChildren(self, outfile, level, namespace_='', name_='agent', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.firstname is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sfirstname>%s</%sfirstname>%s' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_, eol_))
+        if self.lastname is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%slastname>%s</%slastname>%s' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_, eol_))
+        if self.priority is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%spriority>%s</%spriority>%s' % (namespace_, self.gds_format_float(self.priority, input_name='priority'), namespace_, eol_))
+        if self.info is not None:
+            self.info.export(outfile, level, namespace_, name_='info', pretty_print=pretty_print)
+    def exportLiteral(self, outfile, level, name_='agent'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        pass
+    def exportLiteralChildren(self, outfile, level, name_):
+        if self.firstname is not None:
+            showIndent(outfile, level)
+            outfile.write('firstname=%s,\n' % quote_python(self.firstname).encode(ExternalEncoding))
+        if self.lastname is not None:
+            showIndent(outfile, level)
+            outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding))
+        if self.priority is not None:
+            showIndent(outfile, level)
+            outfile.write('priority=%f,\n' % self.priority)
+        if self.info is not None:
+            showIndent(outfile, level)
+            outfile.write('info=model_.info(\n')
+            self.info.exportLiteral(outfile, level)
+            showIndent(outfile, level)
+            outfile.write('),\n')
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        pass
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'firstname':
+            firstname_ = child_.text
+            firstname_ = self.gds_validate_string(firstname_, node, 'firstname')
+            self.firstname = firstname_
+        elif nodeName_ == 'lastname':
+            lastname_ = child_.text
+            lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
+            self.lastname = lastname_
+        elif nodeName_ == 'priority':
+            sval_ = child_.text
+            try:
+                fval_ = float(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires float or double: %s' % exp)
+            fval_ = self.gds_validate_float(fval_, node, 'priority')
+            self.priority = fval_
+        elif nodeName_ == 'info':
+            obj_ = tomato_info.factory()
+            obj_.build(child_)
+            self.info = obj_
+            obj_.original_tagname_ = 'info'
+# end class tomato_agent
+
+
+class tomato_special_agent(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('firstname', 'xs:string', 0),
+        MemberSpec_('lastname', 'xs:string', 0),
+        MemberSpec_('priority', 'xs:float', 0),
+        MemberSpec_('info', 'info', 0),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, firstname=None, lastname=None, priority=None, info=None):
+        self.original_tagname_ = None
+        self.firstname = firstname
+        self.lastname = lastname
+        self.priority = priority
+        self.info = info
+    def factory(*args_, **kwargs_):
+        if tomato_special_agent.subclass:
+            return tomato_special_agent.subclass(*args_, **kwargs_)
+        else:
+            return tomato_special_agent(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_firstname(self): return self.firstname
+    def set_firstname(self, firstname): self.firstname = firstname
+    def get_lastname(self): return self.lastname
+    def set_lastname(self, lastname): self.lastname = lastname
+    def get_priority(self): return self.priority
+    def set_priority(self, priority): self.priority = priority
+    def get_info(self): return self.info
+    def set_info(self, info): self.info = info
+    def hasContent_(self):
+        if (
+            self.firstname is not None or
+            self.lastname is not None or
+            self.priority is not None or
+            self.info is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='special-agent', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='special-agent')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='special-agent', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='special-agent'):
+        pass
+    def exportChildren(self, outfile, level, namespace_='', name_='special-agent', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.firstname is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sfirstname>%s</%sfirstname>%s' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_, eol_))
+        if self.lastname is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%slastname>%s</%slastname>%s' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_, eol_))
+        if self.priority is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%spriority>%s</%spriority>%s' % (namespace_, self.gds_format_float(self.priority, input_name='priority'), namespace_, eol_))
+        if self.info is not None:
+            self.info.export(outfile, level, namespace_, name_='info', pretty_print=pretty_print)
+    def exportLiteral(self, outfile, level, name_='special-agent'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        pass
+    def exportLiteralChildren(self, outfile, level, name_):
+        if self.firstname is not None:
+            showIndent(outfile, level)
+            outfile.write('firstname=%s,\n' % quote_python(self.firstname).encode(ExternalEncoding))
+        if self.lastname is not None:
+            showIndent(outfile, level)
+            outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding))
+        if self.priority is not None:
+            showIndent(outfile, level)
+            outfile.write('priority=%f,\n' % self.priority)
+        if self.info is not None:
+            showIndent(outfile, level)
+            outfile.write('info=model_.info(\n')
+            self.info.exportLiteral(outfile, level)
+            showIndent(outfile, level)
+            outfile.write('),\n')
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        pass
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'firstname':
+            firstname_ = child_.text
+            firstname_ = self.gds_validate_string(firstname_, node, 'firstname')
+            self.firstname = firstname_
+        elif nodeName_ == 'lastname':
+            lastname_ = child_.text
+            lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
+            self.lastname = lastname_
+        elif nodeName_ == 'priority':
+            sval_ = child_.text
+            try:
+                fval_ = float(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires float or double: %s' % exp)
+            fval_ = self.gds_validate_float(fval_, node, 'priority')
+            self.priority = fval_
+        elif nodeName_ == 'info':
+            obj_ = tomato_info.factory()
+            obj_.build(child_)
+            self.info = obj_
+            obj_.original_tagname_ = 'info'
+# end class tomato_special_agent
+
+
+class tomato_booster(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('firstname', 'xs:string', 0),
+        MemberSpec_('lastname', 'xs:string', 0),
+        MemberSpec_('other_name', 'xs:float', 0),
+        MemberSpec_('class_', 'xs:float', 0),
+        MemberSpec_('other_value', 'xs:float', 1),
+        MemberSpec_('type_', 'xs:float', 1),
+        MemberSpec_('client_handler', 'client-handlerType', 1),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, firstname=None, lastname=None, other_name=None, class_=None, other_value=None, type_=None, client_handler=None):
+        self.original_tagname_ = None
+        self.firstname = firstname
+        self.lastname = lastname
+        self.other_name = other_name
+        self.class_ = class_
+        if other_value is None:
+            self.other_value = []
+        else:
+            self.other_value = other_value
+        if type_ is None:
+            self.type_ = []
+        else:
+            self.type_ = type_
+        if client_handler is None:
+            self.client_handler = []
+        else:
+            self.client_handler = client_handler
+    def factory(*args_, **kwargs_):
+        if tomato_booster.subclass:
+            return tomato_booster.subclass(*args_, **kwargs_)
+        else:
+            return tomato_booster(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_firstname(self): return self.firstname
+    def set_firstname(self, firstname): self.firstname = firstname
+    def get_lastname(self): return self.lastname
+    def set_lastname(self, lastname): self.lastname = lastname
+    def get_other_name(self): return self.other_name
+    def set_other_name(self, other_name): self.other_name = other_name
+    def get_class(self): return self.class_
+    def set_class(self, class_): self.class_ = class_
+    def get_other_value(self): return self.other_value
+    def set_other_value(self, other_value): self.other_value = other_value
+    def add_other_value(self, value): self.other_value.append(value)
+    def insert_other_value_at(self, index, value): self.other_value.insert(index, value)
+    def replace_other_value_at(self, index, value): self.other_value[index] = value
+    def get_type(self): return self.type_
+    def set_type(self, type_): self.type_ = type_
+    def add_type(self, value): self.type_.append(value)
+    def insert_type_at(self, index, value): self.type_.insert(index, value)
+    def replace_type_at(self, index, value): self.type_[index] = value
+    def get_client_handler(self): return self.client_handler
+    def set_client_handler(self, client_handler): self.client_handler = client_handler
+    def add_client_handler(self, value): self.client_handler.append(value)
+    def insert_client_handler_at(self, index, value): self.client_handler.insert(index, value)
+    def replace_client_handler_at(self, index, value): self.client_handler[index] = value
+    def hasContent_(self):
+        if (
+            self.firstname is not None or
+            self.lastname is not None or
+            self.other_name is not None or
+            self.class_ is not None or
+            self.other_value or
+            self.type_ or
+            self.client_handler
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='booster', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='booster')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='booster', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='booster'):
+        pass
+    def exportChildren(self, outfile, level, namespace_='', name_='booster', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.firstname is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sfirstname>%s</%sfirstname>%s' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_, eol_))
+        if self.lastname is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%slastname>%s</%slastname>%s' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_, eol_))
+        if self.other_name is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sother-name>%s</%sother-name>%s' % (namespace_, self.gds_format_float(self.other_name, input_name='other-name'), namespace_, eol_))
+        if self.class_ is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sclass>%s</%sclass>%s' % (namespace_, self.gds_format_float(self.class_, input_name='class'), namespace_, eol_))
+        for other_value_ in self.other_value:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sother-value>%s</%sother-value>%s' % (namespace_, self.gds_format_float(other_value_, input_name='other-value'), namespace_, eol_))
+        for type_ in self.type_:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%stype>%s</%stype>%s' % (namespace_, self.gds_format_float(type_, input_name='type'), namespace_, eol_))
+        for client_handler_ in self.client_handler:
+            client_handler_.export(outfile, level, namespace_, name_='client-handler', pretty_print=pretty_print)
+    def exportLiteral(self, outfile, level, name_='booster'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        pass
+    def exportLiteralChildren(self, outfile, level, name_):
+        if self.firstname is not None:
+            showIndent(outfile, level)
+            outfile.write('firstname=%s,\n' % quote_python(self.firstname).encode(ExternalEncoding))
+        if self.lastname is not None:
+            showIndent(outfile, level)
+            outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding))
+        if self.other_name is not None:
+            showIndent(outfile, level)
+            outfile.write('other_name=%f,\n' % self.other_name)
+        if self.class_ is not None:
+            showIndent(outfile, level)
+            outfile.write('class_=%f,\n' % self.class_)
+        showIndent(outfile, level)
+        outfile.write('other_value=[\n')
+        level += 1
+        for other_value_ in self.other_value:
+            showIndent(outfile, level)
+            outfile.write('%f,\n' % other_value_)
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        showIndent(outfile, level)
+        outfile.write('type_=[\n')
+        level += 1
+        for type_ in self.type_:
+            showIndent(outfile, level)
+            outfile.write('%f,\n' % type_)
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+        showIndent(outfile, level)
+        outfile.write('client_handler=[\n')
+        level += 1
+        for client_handler_ in self.client_handler:
+            showIndent(outfile, level)
+            outfile.write('model_.client_handlerType(\n')
+            client_handler_.exportLiteral(outfile, level, name_='client-handlerType')
+            showIndent(outfile, level)
+            outfile.write('),\n')
+        level -= 1
+        showIndent(outfile, level)
+        outfile.write('],\n')
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        pass
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'firstname':
+            firstname_ = child_.text
+            firstname_ = self.gds_validate_string(firstname_, node, 'firstname')
+            self.firstname = firstname_
+        elif nodeName_ == 'lastname':
+            lastname_ = child_.text
+            lastname_ = self.gds_validate_string(lastname_, node, 'lastname')
+            self.lastname = lastname_
+        elif nodeName_ == 'other-name':
+            sval_ = child_.text
+            try:
+                fval_ = float(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires float or double: %s' % exp)
+            fval_ = self.gds_validate_float(fval_, node, 'other_name')
+            self.other_name = fval_
+        elif nodeName_ == 'class':
+            sval_ = child_.text
+            try:
+                fval_ = float(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires float or double: %s' % exp)
+            fval_ = self.gds_validate_float(fval_, node, 'class')
+            self.class_ = fval_
+        elif nodeName_ == 'other-value':
+            sval_ = child_.text
+            try:
+                fval_ = float(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires float or double: %s' % exp)
+            fval_ = self.gds_validate_float(fval_, node, 'other_value')
+            self.other_value.append(fval_)
+        elif nodeName_ == 'type':
+            sval_ = child_.text
+            try:
+                fval_ = float(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires float or double: %s' % exp)
+            fval_ = self.gds_validate_float(fval_, node, 'type')
+            self.type_.append(fval_)
+        elif nodeName_ == 'client-handler':
+            obj_ = tomato_client_handlerType.factory()
+            obj_.build(child_)
+            self.client_handler.append(obj_)
+            obj_.original_tagname_ = 'client-handler'
+# end class tomato_booster
+
+
+class tomato_info(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('rating', 'xs:float', 0),
+        MemberSpec_('type', 'xs:integer', 0),
+        MemberSpec_('name', 'xs:string', 0),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, rating=None, type_=None, name=None):
+        self.original_tagname_ = None
+        self.rating = _cast(float, rating)
+        self.type_ = _cast(int, type_)
+        self.name = _cast(None, name)
+    def factory(*args_, **kwargs_):
+        if tomato_info.subclass:
+            return tomato_info.subclass(*args_, **kwargs_)
+        else:
+            return tomato_info(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_rating(self): return self.rating
+    def set_rating(self, rating): self.rating = rating
+    def get_type(self): return self.type_
+    def set_type(self, type_): self.type_ = type_
+    def get_name(self): return self.name
+    def set_name(self, name): self.name = name
+    def hasContent_(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='info', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='info')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='info', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='info'):
+        if self.rating is not None and 'rating' not in already_processed:
+            already_processed.add('rating')
+            outfile.write(' rating="%s"' % self.gds_format_float(self.rating, input_name='rating'))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type="%s"' % self.gds_format_integer(self.type_, input_name='type'))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), ))
+    def exportChildren(self, outfile, level, namespace_='', name_='info', fromsubclass_=False, pretty_print=True):
+        pass
+    def exportLiteral(self, outfile, level, name_='info'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        if self.rating is not None and 'rating' not in already_processed:
+            already_processed.add('rating')
+            showIndent(outfile, level)
+            outfile.write('rating=%f,\n' % (self.rating,))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            showIndent(outfile, level)
+            outfile.write('type_=%d,\n' % (self.type_,))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            showIndent(outfile, level)
+            outfile.write('name="%s",\n' % (self.name,))
+    def exportLiteralChildren(self, outfile, level, name_):
+        pass
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('rating', node)
+        if value is not None and 'rating' not in already_processed:
+            already_processed.add('rating')
+            try:
+                self.rating = float(value)
+            except ValueError, exp:
+                raise ValueError('Bad float/double attribute (rating): %s' % exp)
+        value = find_attr_value_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            try:
+                self.type_ = int(value)
+            except ValueError, exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+        value = find_attr_value_('name', node)
+        if value is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            self.name = value
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        pass
+# end class tomato_info
+
+
+class tomato_client_handlerType(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('fullname', 'xs:string', 0),
+        MemberSpec_('refid', 'xs:integer', 0),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, fullname=None, refid=None):
+        self.original_tagname_ = None
+        self.fullname = fullname
+        self.refid = refid
+    def factory(*args_, **kwargs_):
+        if tomato_client_handlerType.subclass:
+            return tomato_client_handlerType.subclass(*args_, **kwargs_)
+        else:
+            return tomato_client_handlerType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_fullname(self): return self.fullname
+    def set_fullname(self, fullname): self.fullname = fullname
+    def get_refid(self): return self.refid
+    def set_refid(self, refid): self.refid = refid
+    def hasContent_(self):
+        if (
+            self.fullname is not None or
+            self.refid is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespace_='', name_='client-handlerType', namespacedef_='', pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespace_, name_='client-handlerType')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespace_='', name_='client-handlerType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespace_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='client-handlerType'):
+        pass
+    def exportChildren(self, outfile, level, namespace_='', name_='client-handlerType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.fullname is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sfullname>%s</%sfullname>%s' % (namespace_, self.gds_format_string(quote_xml(self.fullname).encode(ExternalEncoding), input_name='fullname'), namespace_, eol_))
+        if self.refid is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%srefid>%s</%srefid>%s' % (namespace_, self.gds_format_integer(self.refid, input_name='refid'), namespace_, eol_))
+    def exportLiteral(self, outfile, level, name_='client-handlerType'):
+        level += 1
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, already_processed, name_):
+        pass
+    def exportLiteralChildren(self, outfile, level, name_):
+        if self.fullname is not None:
+            showIndent(outfile, level)
+            outfile.write('fullname=%s,\n' % quote_python(self.fullname).encode(ExternalEncoding))
+        if self.refid is not None:
+            showIndent(outfile, level)
+            outfile.write('refid=%d,\n' % self.refid)
+    def build(self, node):
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, node, nodeName_)
+        return self
+    def buildAttributes(self, node, attrs, already_processed):
+        pass
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'fullname':
+            fullname_ = child_.text
+            fullname_ = self.gds_validate_string(fullname_, node, 'fullname')
+            self.fullname = fullname_
+        elif nodeName_ == 'refid':
+            sval_ = child_.text
+            try:
+                ival_ = int(sval_)
+            except (TypeError, ValueError), exp:
+                raise_parse_error(child_, 'requires integer: %s' % exp)
+            ival_ = self.gds_validate_integer(ival_, node, 'refid')
+            self.refid = ival_
+# end class tomato_client_handlerType
+
+
+GDSClassesMapping = {
+    'client-handler': tomato_client_handlerType,
+    'elparam': tomato_param,
+    'promoter': tomato_booster,
+}
+
+
+USAGE_TEXT = """
+Usage: python <tomato_Parser>.py [ -s ] <in_xml_file>
+"""
+
+
+def usage():
+    print USAGE_TEXT
+    sys.exit(1)
+
+
+def get_root_tag(node):
+    tag = Tag_pattern_.match(node.tag).groups()[-1]
+    rootClass = GDSClassesMapping.get(tag)
+    if rootClass is None:
+        rootClass = globals().get(tag)
+    return tag, rootClass
+
+
+def parse(inFileName, silence=False):
+    doc = parsexml_(inFileName)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    if not silence:
+        sys.stdout.write('<?xml version="1.0" ?>\n')
+        rootObj.export(
+            sys.stdout, 0, name_=rootTag,
+            namespacedef_='',
+            pretty_print=True)
+    return rootObj
+
+
+def parseEtree(inFileName, silence=False):
+    doc = parsexml_(inFileName)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    mapping = {}
+    rootElement = rootObj.to_etree(None, name_=rootTag, mapping_=mapping)
+    reverse_mapping = rootObj.gds_reverse_node_mapping(mapping)
+    if not silence:
+        content = etree_.tostring(
+            rootElement, pretty_print=True,
+            xml_declaration=True, encoding="utf-8")
+        sys.stdout.write(content)
+        sys.stdout.write('\n')
+    return rootObj, rootElement, mapping, reverse_mapping
+
+
+def parseString(inString, silence=False):
+    from StringIO import StringIO
+    doc = parsexml_(StringIO(inString))
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    if not silence:
+        sys.stdout.write('<?xml version="1.0" ?>\n')
+        rootObj.export(
+            sys.stdout, 0, name_=rootTag,
+            namespacedef_='')
+    return rootObj
+
+
+def parseLiteral(inFileName, silence=False):
+    doc = parsexml_(inFileName)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'people'
+        rootClass = tomato_people
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    if not silence:
+        sys.stdout.write('#from prefix_classname2_sup import *\n\n')
+        sys.stdout.write('import prefix_classname2_sup as model_\n\n')
+        sys.stdout.write('rootObj = model_.rootClass(\n')
+        rootObj.exportLiteral(sys.stdout, 0, name_=rootTag)
+        sys.stdout.write(')\n')
+    return rootObj
+
+
+def main():
+    args = sys.argv[1:]
+    if len(args) == 1:
+        parse(args[0])
+    else:
+        usage()
+
+
+if __name__ == '__main__':
+    #import pdb; pdb.set_trace()
+    main()
+
+
+__all__ = [
+    "tomato_agent",
+    "tomato_booster",
+    "tomato_client_handlerType",
+    "tomato_comments",
+    "tomato_info",
+    "tomato_java_programmer",
+    "tomato_param",
+    "tomato_people",
+    "tomato_person",
+    "tomato_programmer",
+    "tomato_python_programmer",
+    "tomato_special_agent"
+]
diff --git a/tests/test.py b/tests/test.py
index 96a05e27068e50e1ce9cacc523e85333f8f02732..5e965bc05c34b9442b2ea2097573b446115ac1cc 100755
--- a/tests/test.py
+++ b/tests/test.py
@@ -525,6 +525,31 @@ class GenTest(unittest.TestCase):
         result, err = self.execute(cmd)
         self.check_result(result, err, ())
 
+    def test_024_prefix_classname(self):
+        cmdTempl = (
+            'python generateDS.py --no-dates --no-versions '
+            '-p tomato_ '
+            '--member-specs=list -f '
+            '-o tests/%s2_sup.py -s tests/%s2_sub.py '
+            '--super=%s2_sup '
+            'tests/%s.xsd'
+        )
+        t_ = 'prefix_classname'
+        cmd = cmdTempl % (t_, t_, t_, t_, )
+        result, _ = self.execute(cmd, cwd='..')
+        cmd = 'diff %s1_sup.py %s2_sup.py' % (t_, t_, )
+        result, err = self.execute(cmd)
+        self.check_result(result, err, ('sys.stdout.write',))
+        cmd = 'diff %s1_sub.py %s2_sub.py' % (t_, t_, )
+        result, err = self.execute(cmd)
+        self.check_result(result, err, ())
+        cmdTempl = 'python tests/%s2_sup.py tests/%s.xml > tests/%s2_out.xml'
+        cmd = cmdTempl % (t_, t_, t_, )
+        result, _ = self.execute(cmd, cwd='..')
+        cmd = 'diff %s1_out.xml %s2_out.xml' % (t_, t_, )
+        result, err = self.execute(cmd)
+        self.check_result(result, err, ())
+
     def check_result(self, result, err, ignore_strings):
         self.failUnlessEqual(len(result), 0)
         self.failUnlessEqual(len(err), 0)
diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html
index ce709171a45627d78d4f6465d28e7939ebb4c5a2..4229ff0389cb521dbff0011e11f149f05c3835ae 100644
--- a/tutorial/generateds_tutorial.html
+++ b/tutorial/generateds_tutorial.html
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13: http://docutils.sourceforge.net/" />
 <title>generateDS -- Introduction and Tutorial</title>
 <meta name="author" content="Dave Kuhlman" />
 <style type="text/css">
@@ -219,7 +219,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.12e</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.13a</td>
 </tr>
 </tbody>
 </table>
@@ -228,7 +228,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">May 22, 2014</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">September 09, 2014</td>
 </tr>
 </tbody>
 </table>
@@ -1210,7 +1210,7 @@ named <tt class="docutils literal">garden_api.py</tt>, you can create an instanc
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateds_tutorial.txt">View document source</a>.
-Generated on: 2014-05-22 16:15 UTC.
+Generated on: 2014-09-09 19:14 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/tutorial/generateds_tutorial.txt b/tutorial/generateds_tutorial.txt
index 0dcab2bed59309ae4a0193ae930ed316d586c40a..3a9d416596b41c7ae9904be075260b98be870c83 100644
--- a/tutorial/generateds_tutorial.txt
+++ b/tutorial/generateds_tutorial.txt
@@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial
 
 .. version
 
-:revision: 2.12g
+:revision: 2.13a
 
 .. version
 
diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip
index 0a67f630b3d3efdefc4e51b17fc154474101f81b..157eecae050a3a0201ce0ca0984aaeb93fe97c59 100644
Binary files a/tutorial/generateds_tutorial.zip and b/tutorial/generateds_tutorial.zip differ
diff --git a/updateversion.py b/updateversion.py
new file mode 100755
index 0000000000000000000000000000000000000000..b122794cdea2956bd88d9ee523b41c289fd87dc9
--- /dev/null
+++ b/updateversion.py
@@ -0,0 +1,143 @@
+#!/usr/bin/env python
+
+"""
+Usage:
+    python updateversion.py [options]
+Options:
+    -h, --help          Display this help message.
+    -v x.xx, --version=x.xx
+                        New version.  Required.
+    --verbose           Print extra info.
+Example:
+    python updateversion.py -v 1.17c
+"""
+
+
+#
+# Imports
+
+import sys
+import getopt
+import re
+import shutil
+
+
+#
+# Globals and constants
+
+VERBOSE = False
+
+REPL_SPEC = [
+    {
+        'filename': 'setup.py',
+        'pattern': r'(##VERSION##\s*version=")([\w\.\-]*)(",\s*##VERSION##)',
+    },
+    {
+        'filename': 'generateDS.py',
+        'pattern': r"(##VERSION##\s*VERSION = ')([\w\.\-]*)('\s*##VERSION##)",
+    },
+    {
+        'filename': 'process_includes.py',
+        'pattern': r"(##VERSION##\s*VERSION = ')([\w\.\-]*)('\s*##VERSION##)",
+    },
+    {
+        'filename': 'generateDS.txt',
+        'pattern': r"(.. version\s*:revision: )([\w\.\-]*)(\s*.. version)",
+    },
+    {
+        'filename': 'generateDS.txt',
+        'pattern': r"(\.\. version\s*- My Web site -- \s*"
+                   r"http://www\.rexx\.com/~dkuhlman/generateDS-)"
+                   r"([\w\.\-]*)(\.tar\.gz\s*\.\. version)",
+    },
+    {
+        'filename': 'librarytemplate_howto.txt',
+        'pattern': r"(.. version\s*:revision: )([\w\.\-]*)(\s*.. version)",
+    },
+    {
+        'filename': 'tutorial/generateds_tutorial.txt',
+        'pattern': r"(.. version\s*:revision: )([\w\.\-]*)(\s*.. version)",
+    },
+    {
+        'filename': 'gui/generateds_gui.py',
+        'pattern': r"(##VERSION##\s*VERSION = ')([\w\.\-]*)('\s*##VERSION##)",
+    },
+]
+
+
+#
+# Functions for external use
+
+def updateversion(version):
+    replfunc = replfuncmaker(version)
+    for spec in REPL_SPEC:
+        targetfilename = spec['filename']
+        if VERBOSE:
+            print 'updating: "%s"' % (targetfilename, )
+        targetfile = open(targetfilename, 'r')
+        content = targetfile.read()
+        targetfile.close()
+        content1 = re.sub(
+            spec['pattern'],
+            replfunc,
+            content)
+        update1file(targetfilename, content1)
+
+
+
+#
+# Classes
+
+
+
+#
+# Functions for internal use and testing
+
+def update1file(targetfilename, content):
+    backupfilename = targetfilename + '.bak' 
+    shutil.copy2(targetfilename, backupfilename)
+    targetfile = open(targetfilename, 'w')
+    targetfile.write(content)
+    targetfile.close()
+    #shutil.copymode(backupfilename, targetfilename)
+
+def replfuncmaker(version):
+    def replfunc(matchobj):
+        if VERBOSE:
+            print '(replfunc) matchobj.groups()', matchobj.groups()
+        return matchobj.group(1) + version + matchobj.group(3)
+    return replfunc
+
+
+USAGE_TEXT = __doc__
+
+def usage():
+    print USAGE_TEXT
+    sys.exit(1)
+
+
+def main():
+    global VERBOSE
+    args = sys.argv[1:]
+    try:
+        opts, args = getopt.getopt(args, 'hv:', [
+            'help', 'version=', 'verbose', ])
+    except:
+        usage()
+    version = None
+    for opt, val in opts:
+        if opt in ('-h', '--help'):
+            usage()
+        elif opt in ('-v', '--version'):
+            version = val
+        elif opt in ('--verbose', ):
+            VERBOSE = True
+    if len(args) != 0 or version is None:
+        usage()
+    updateversion(version)
+
+
+if __name__ == '__main__':
+    #import pdb; pdb.set_trace()
+    main()
+