lijinliang пре 3 година
родитељ
комит
3374423cc4
40 измењених фајлова са 47568 додато и 100 уклоњено
  1. 2 0
      autodeploy.sh
  2. 2 0
      deploylib.sh
  3. 53 53
      src/decition/common/common/tracepointstation.h
  4. 5 0
      src/tool/opendriveParser/.gitignore
  5. 1284 0
      src/tool/opendriveParser/OpenDRIVE_1.4H.xsd
  6. 1747 0
      src/tool/opendriveParser/OpenDRIVE_1.5M.xsd
  7. 859 0
      src/tool/opendriveParser/convert_opendrive.py
  8. 87 0
      src/tool/opendriveParser/eulerspiral.py
  9. 17872 0
      src/tool/opendriveParser/opendrive_parser_14H.py
  10. 23046 0
      src/tool/opendriveParser/opendrive_parser_15M.py
  11. 476 0
      src/tool/opendriveParser/parse_opendrive.py
  12. 23 0
      src/tool/opendriveParser/readme.md
  13. 23 0
      src/tool/opendriveParser/txt2json.py
  14. 0 10
      src/ui/ui_ads_hmi/ADCIntelligentVehicle.cpp
  15. 51 0
      src/ui/xviz_civetweb/common/boost.h
  16. 21 0
      src/ui/xviz_civetweb/common/can_type.h
  17. 24 0
      src/ui/xviz_civetweb/common/car_status.cpp
  18. 110 0
      src/ui/xviz_civetweb/common/car_status.h
  19. 21 0
      src/ui/xviz_civetweb/common/common.pri
  20. 44 0
      src/ui/xviz_civetweb/common/constants.h
  21. 19 0
      src/ui/xviz_civetweb/common/decition_type.h
  22. 109 0
      src/ui/xviz_civetweb/common/gps_type.h
  23. 19 0
      src/ui/xviz_civetweb/common/hmi_type.h
  24. 84 0
      src/ui/xviz_civetweb/common/lidar.cpp
  25. 39 0
      src/ui/xviz_civetweb/common/lidar.h
  26. 136 0
      src/ui/xviz_civetweb/common/logout.h
  27. 62 0
      src/ui/xviz_civetweb/common/obstacle_type.h
  28. 8 0
      src/ui/xviz_civetweb/common/perceptionoutput.cpp
  29. 55 0
      src/ui/xviz_civetweb/common/perceptionoutput.h
  30. 74 0
      src/ui/xviz_civetweb/common/tracepointstation.h
  31. 20 0
      src/ui/xviz_civetweb/common/vehiclestate_type.h
  32. 34 0
      src/ui/xviz_civetweb/commoninclude.h
  33. 875 0
      src/ui/xviz_civetweb/datacluster.cpp
  34. 96 0
      src/ui/xviz_civetweb/datacluster.h
  35. 2 0
      src/ui/xviz_civetweb/main.cpp
  36. 76 0
      src/ui/xviz_civetweb/mmath.cpp
  37. 10 0
      src/ui/xviz_civetweb/mmath.h
  38. 36 24
      src/ui/xviz_civetweb/wshandler.cpp
  39. 4 11
      src/ui/xviz_civetweb/wshandler.h
  40. 60 2
      src/ui/xviz_civetweb/xviz_civetweb.pro

+ 2 - 0
autodeploy.sh

@@ -85,6 +85,8 @@ done
 
 cp ./bin/*.so ./deploy/app/lib/
 
+patchelf --set-rpath '$ORIGIN' ./deploy/app/lib/libfastrtps.so*
+
 qt_com=`arch`
 if [ $qt_com = "aarch64" ];then
 cp -r /usr/lib/aarch64-linux-gnu/nss/* ./deploy/app/lib/

+ 2 - 0
deploylib.sh

@@ -107,6 +107,8 @@ cd platforms
 
 patchelf --set-rpath '$ORIGIN/../lib/' libqxcb.so
 
+patchelf --set-rpath '$ORIGIN' ./deploy/app/lib/libfastrtps.so*
+
 cd ..
 cd ..
 

+ 53 - 53
src/decition/common/common/tracepointstation.h

@@ -4,70 +4,70 @@
 namespace iv {
 
 struct Station
-   {
-       int index;
-       GPS_INS station_location;
-       int map_index;
-   };
+{
+    int index;
+    GPS_INS station_location;
+    int map_index;
+};
 
 class TracePoint
-        {
-      public:
-              double x = 0, y = 0, speed=0;
-             int v1 = 0, v2 = 0;
-             int roadMode = 0;
+{
+public:
+    double x = 0, y = 0, speed=0;
+    int v1 = 0, v2 = 0;
+    int roadMode = 0;
 
-             TracePoint()
-            {
-                x = y = v1 = 0;
-            }
+    TracePoint()
+    {
+        x = y = v1 = 0;
+    }
 
-             TracePoint(double _x, double _y)
-            {
-                x = _x; y = _y;
-            }
+    TracePoint(double _x, double _y)
+    {
+        x = _x; y = _y;
+    }
 
-    };
+};
 
 
-    class TrafficLight
-   {
-     public:
-        int leftColor = 0, rightColor = 0, straightColor=0, uturnColor=0;
-        int leftTime=0, rightTime=0 ,straightTime=0, uturnTime=0;
+class TrafficLight
+{
+public:
+    int leftColor = 0, rightColor = 0, straightColor=0, uturnColor=0;
+    int leftTime=0, rightTime=0 ,straightTime=0, uturnTime=0;
 
-        TrafficLight()
-       {
-           leftColor = 0, rightColor = 0, straightColor=0, uturnColor=0;
-           leftTime=0, rightTime=0 ,straightTime=0, uturnTime=0;
-       }
+    TrafficLight()
+    {
+        leftColor = 0, rightColor = 0, straightColor=0, uturnColor=0;
+        leftTime=0, rightTime=0 ,straightTime=0, uturnTime=0;
+    }
 
-    };
+};
 
-    class StationCmd
+class StationCmd
+{
+public:
+    bool received;
+    uint32_t carID,carMode,emergencyStop,stationStop;
+    bool has_carID,has_carMode,has_emergencyStop,has_stationStop,mode_manual_drive;
+    uint32_t stationID[20];
+    GPS_INS  stationGps[20];
+    uint32_t stationTotalNum;
+    StationCmd()
     {
-    public:
-        bool received;
-        uint32_t carID,carMode,emergencyStop,stationStop;
-        bool has_carID,has_carMode,has_emergencyStop,has_stationStop,mode_manual_drive;
-        uint32_t stationID[20];
-        GPS_INS  stationGps[20];
-        uint32_t stationTotalNum;
-        StationCmd()
-        {
-            received=false;
-            has_carID=false;
-            has_carMode=false;
-            has_emergencyStop=false;
-            has_stationStop=false;
-            mode_manual_drive=false;
-            carID=0;
-            carMode=0;
-            emergencyStop=0;
-            stationStop=0;
-            stationTotalNum=0;
-        }
-    };
+        received=false;
+        has_carID=false;
+        has_carMode=false;
+        has_emergencyStop=false;
+        has_stationStop=false;
+        mode_manual_drive=false;
+        carID=0;
+        carMode=0;
+        emergencyStop=0;
+        stationStop=0;
+        stationTotalNum=0;
+    }
+};
 
 
 }

+ 5 - 0
src/tool/opendriveParser/.gitignore

@@ -0,0 +1,5 @@
+*.txt
+*.json
+*.xodr
+tmp/
+__pycache__

+ 1284 - 0
src/tool/opendriveParser/OpenDRIVE_1.4H.xsd

@@ -0,0 +1,1284 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+<xsd:annotation>
+    <xsd:documentation>
+    XML Schema Definition for OpenDRIVE XML files - Rev. 1.4H, excluding SET records, (c)2015 by VIRES Simulationstechnologie GmbH, Germany
+    </xsd:documentation>
+</xsd:annotation>
+
+
+<xsd:element name="OpenDRIVE">
+    <xsd:complexType>
+        <xsd:sequence>
+        <xsd:element name="header">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="geoReference" type="xsd:string" minOccurs="0" maxOccurs="1"/>
+                    <xsd:element name="userData"     type="userData"   minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include"      type="include"    minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="revMajor" type="xsd:unsignedShort"/>
+                <xsd:attribute name="revMinor" type="xsd:unsignedShort"/>
+                <xsd:attribute name="name"     type="xsd:string"/>
+                <xsd:attribute name="version"  type="xsd:float"/>
+                <xsd:attribute name="date"     type="xsd:string"/>
+                <xsd:attribute name="north"    type="xsd:double"/>
+                <xsd:attribute name="south"    type="xsd:double"/>
+                <xsd:attribute name="east"     type="xsd:double"/>
+                <xsd:attribute name="west"     type="xsd:double"/>
+                <xsd:attribute name="vendor"   type="xsd:string"/>
+            </xsd:complexType>
+        </xsd:element>         
+    <xsd:element name="road" maxOccurs="unbounded">
+    <xsd:complexType>            
+        <xsd:sequence>
+                <xsd:element name="link" minOccurs="0" maxOccurs="1">
+                    <xsd:complexType>
+                        <xsd:sequence>
+                            <xsd:element name="predecessor" minOccurs="0" maxOccurs="1">                            
+                                <xsd:complexType>                              
+                                    <xsd:attribute name="elementType"  type="elementType"/>                                                              
+                                     <xsd:attribute name="elementId"    type="xsd:string"/>
+                                    <xsd:attribute name="contactPoint" type="contactPoint"/>
+                                </xsd:complexType>
+                            </xsd:element>
+                            <xsd:element name="successor" minOccurs="0" maxOccurs="1">
+                                <xsd:complexType>                     
+                                    <xsd:attribute name="elementType"  type="elementType"/>                                                                      
+                                    <xsd:attribute name="elementId"    type="xsd:string"/>
+                                    <xsd:attribute name="contactPoint" type="contactPoint"/>
+                                </xsd:complexType>
+                            </xsd:element>
+                            <xsd:element name="neighbor" minOccurs="0" maxOccurs="2">                          
+                                <xsd:complexType>                               
+                                    <xsd:attribute name="side"      type="side"/>                                                              
+                                    <xsd:attribute name="elementId" type="xsd:string"/>
+                                    <xsd:attribute name="direction" type="direction"/>                                    
+                                </xsd:complexType>
+                            </xsd:element>
+                            <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                            <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                        </xsd:sequence>
+                    </xsd:complexType>
+                </xsd:element>
+                <xsd:element name="type" minOccurs="0" maxOccurs="unbounded">
+                    <xsd:complexType>
+                        <xsd:sequence>
+                            <xsd:element name="speed" minOccurs="0" maxOccurs="1">
+                                <xsd:complexType>
+                                    <xsd:attribute name="max"  type="max"/>
+                                    <xsd:attribute name="unit" type="unit"/>
+                                </xsd:complexType>
+                            </xsd:element>
+                            <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                            <xsd:element name="include" type="include"   minOccurs="0" maxOccurs="unbounded"/>
+                        </xsd:sequence>
+                        <xsd:attribute name="s"    type="xsd:double"/>
+                        <xsd:attribute name="type" type="roadType"/>
+                    </xsd:complexType>
+                </xsd:element>
+                
+                <xsd:element name="planView" maxOccurs="1">
+                    <xsd:complexType>
+                        <xsd:sequence>
+                            <xsd:element name="geometry" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:choice>
+                                        <xsd:element name="line">
+                                            <xsd:complexType>
+                                                <xsd:sequence>
+                                                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                                </xsd:sequence>
+                                            </xsd:complexType>
+                                        </xsd:element>
+                                        <xsd:element name="spiral">
+                                            <xsd:complexType>
+                                                <xsd:sequence>
+                                                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                                </xsd:sequence>
+                                                <xsd:attribute name="curvStart" type="xsd:double"/>
+                                                <xsd:attribute name="curvEnd"   type="xsd:double"/>
+                                            </xsd:complexType>
+                                        </xsd:element>
+                                        <xsd:element name="arc">
+                                            <xsd:complexType>
+                                                <xsd:sequence>
+                                                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                                </xsd:sequence>
+                                                <xsd:attribute name="curvature" type="xsd:double"/>
+                                            </xsd:complexType>
+                                        </xsd:element>
+                                        <xsd:element name="poly3">
+                                            <xsd:complexType>
+                                                <xsd:sequence>
+                                                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                                </xsd:sequence>
+                                                <xsd:attribute name="a" type="xsd:double"/>
+                                                <xsd:attribute name="b" type="xsd:double"/>
+                                                <xsd:attribute name="c" type="xsd:double"/>
+                                                <xsd:attribute name="d" type="xsd:double"/>
+                                            </xsd:complexType>
+                                        </xsd:element>
+                                        <xsd:element name="paramPoly3">
+                                            <xsd:complexType>
+                                                <xsd:sequence>
+                                                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                                </xsd:sequence>
+                                                <xsd:attribute name="aU"     type="xsd:double"/>
+                                                <xsd:attribute name="bU"     type="xsd:double"/>
+                                                <xsd:attribute name="cU"     type="xsd:double"/>
+                                                <xsd:attribute name="dU"     type="xsd:double"/>
+                                                <xsd:attribute name="aV"     type="xsd:double"/>
+                                                <xsd:attribute name="bV"     type="xsd:double"/>
+                                                <xsd:attribute name="cV"     type="xsd:double"/>
+                                                <xsd:attribute name="dV"     type="xsd:double"/>
+                                                <xsd:attribute name="pRange" type="pRange"/>
+                                            </xsd:complexType>
+                                        </xsd:element>
+                                        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:choice>
+                                    <xsd:attribute name="s"      type="xsd:double"/>
+                                    <xsd:attribute name="x"      type="xsd:double"/>
+                                    <xsd:attribute name="y"      type="xsd:double"/>
+                                    <xsd:attribute name="hdg"    type="xsd:double"/>
+                                    <xsd:attribute name="length" type="xsd:double"/>
+                                </xsd:complexType>
+                            </xsd:element>
+                        </xsd:sequence>
+                    </xsd:complexType>
+                </xsd:element> <!-- end planView -->
+                
+                <xsd:element name="elevationProfile" minOccurs="0" maxOccurs="1">
+                    <xsd:complexType>
+                        <xsd:sequence>
+                             <xsd:element name="elevation" minOccurs="1" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:sequence>
+                                    <xsd:attribute name="s" type="xsd:double"/>
+                                    <xsd:attribute name="a" type="xsd:double"/>
+                                    <xsd:attribute name="b" type="xsd:double"/>
+                                    <xsd:attribute name="c" type="xsd:double"/>
+                                    <xsd:attribute name="d" type="xsd:double"/>
+                                </xsd:complexType>
+                            </xsd:element>
+                            <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                            <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                        </xsd:sequence>
+                    </xsd:complexType>
+                </xsd:element>
+                <xsd:element name="lateralProfile" minOccurs="0" maxOccurs="1">
+                    <xsd:complexType>
+                        <xsd:sequence>
+                            <xsd:element name="superelevation" minOccurs="0" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:sequence>
+                                    <xsd:attribute name="s" type="xsd:double"/>
+                                    <xsd:attribute name="a" type="xsd:double"/>
+                                    <xsd:attribute name="b" type="xsd:double"/>
+                                    <xsd:attribute name="c" type="xsd:double"/>
+                                    <xsd:attribute name="d" type="xsd:double"/>
+                                </xsd:complexType>
+                            </xsd:element>
+                            <xsd:element name="crossfall" minOccurs="0" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:sequence>
+                                    <xsd:attribute name="side" type="crossfallSide"/>
+                                    <xsd:attribute name="s"    type="xsd:double"/>
+                                    <xsd:attribute name="a"    type="xsd:double"/>
+                                    <xsd:attribute name="b"    type="xsd:double"/>
+                                    <xsd:attribute name="c"    type="xsd:double"/>
+                                    <xsd:attribute name="d"    type="xsd:double"/>
+                                </xsd:complexType>
+                            </xsd:element>
+                            <xsd:element name="shape" minOccurs="0" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:sequence>
+                                    <xsd:attribute name="s" type="xsd:double"/>
+                                    <xsd:attribute name="t" type="xsd:double"/>
+                                    <xsd:attribute name="a" type="xsd:double"/>
+                                    <xsd:attribute name="b" type="xsd:double"/>
+                                    <xsd:attribute name="c" type="xsd:double"/>
+                                    <xsd:attribute name="d" type="xsd:double"/>
+                                </xsd:complexType>
+                            </xsd:element>
+                            <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                            <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                        </xsd:sequence>
+                    </xsd:complexType>
+                </xsd:element>
+                
+                <xsd:element name="lanes" maxOccurs="1">
+                    <xsd:complexType>
+                        <xsd:sequence>
+                            <xsd:element name="laneOffset" minOccurs="0" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:sequence>
+                                    <xsd:attribute name="s"    type="xsd:double"/>
+                                    <xsd:attribute name="a"    type="xsd:double"/>
+                                    <xsd:attribute name="b"    type="xsd:double"/>
+                                    <xsd:attribute name="c"    type="xsd:double"/>
+                                    <xsd:attribute name="d"    type="xsd:double"/>
+                                </xsd:complexType>
+                            </xsd:element> <!-- end laneOffset -->
+                            <xsd:element name="laneSection" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="left" minOccurs="0" maxOccurs="1">
+                                            <xsd:complexType>
+                                                <xsd:sequence>
+                                                    <xsd:element name="lane"     type="lane"     maxOccurs="unbounded"/>
+                                                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                                </xsd:sequence>
+                                            </xsd:complexType>
+                                        </xsd:element>
+                                        <xsd:element name="center" minOccurs="1" maxOccurs="1">
+                                            <xsd:complexType>
+                                                <xsd:sequence>
+                                                    <xsd:element name="lane"     type="centerLane" minOccurs="0" maxOccurs="1"/>
+                                                    <xsd:element name="userData" type="userData"   minOccurs="0" maxOccurs="unbounded"/>
+                                                    <xsd:element name="include"  type="include"    minOccurs="0" maxOccurs="unbounded"/>
+                                                </xsd:sequence>
+                                            </xsd:complexType>
+                                        </xsd:element>
+                                        <xsd:element name="right" minOccurs="0" maxOccurs="1">
+                                            <xsd:complexType>
+                                                <xsd:sequence>
+                                                    <xsd:element name="lane"     type="lane"     maxOccurs="unbounded"/>
+                                                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                                </xsd:sequence>
+                                            </xsd:complexType>
+                                        </xsd:element>
+                                        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:sequence>
+                                    <xsd:attribute name="s"          type="xsd:double"/>
+                                    <xsd:attribute name="singleSide" type="singleSide"/>
+                                </xsd:complexType>
+                            </xsd:element> <!-- end laneSection -->
+                        </xsd:sequence>
+                    </xsd:complexType>
+                </xsd:element> <!-- end lanes -->
+                
+                <xsd:element name="objects" minOccurs="0" maxOccurs="1">
+                    <xsd:complexType>
+                        <xsd:sequence>
+                            <xsd:element name="object"  minOccurs="0" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="repeat" minOccurs="0" maxOccurs="unbounded">
+                                            <xsd:complexType>
+                                                <xsd:sequence>
+                                                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                                </xsd:sequence>
+                                                <xsd:attribute name="s"            type="xsd:double"/>
+                                                <xsd:attribute name="length"       type="xsd:double"/>
+                                                <xsd:attribute name="distance"     type="xsd:double"/>
+                                                <xsd:attribute name="tStart"       type="xsd:double"/>
+                                                <xsd:attribute name="tEnd"         type="xsd:double"/>
+                                                <xsd:attribute name="widthStart"   type="xsd:double"/>
+                                                <xsd:attribute name="widthEnd"     type="xsd:double"/>
+                                                <xsd:attribute name="heightStart"  type="xsd:double"/>
+                                                <xsd:attribute name="heightEnd"    type="xsd:double"/>
+                                                <xsd:attribute name="zOffsetStart" type="xsd:double"/>
+                                                <xsd:attribute name="zOffsetEnd"   type="xsd:double"/>
+                                            </xsd:complexType>
+                                        </xsd:element>
+                                        <xsd:element name="outline"  minOccurs="0" maxOccurs="1">
+                                            <xsd:complexType>					    
+                                                <xsd:sequence>
+						  <xsd:choice>
+                                                    <xsd:element name="cornerRoad" minOccurs="0" maxOccurs="unbounded">
+                                                        <xsd:complexType>
+                                                            <xsd:sequence>
+                                                                <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                                                <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                                            </xsd:sequence>
+                                                            <xsd:attribute name="s"      type="xsd:double"/>
+                                                            <xsd:attribute name="t"      type="xsd:double"/>
+                                                            <xsd:attribute name="dz"     type="xsd:double"/>
+                                                            <xsd:attribute name="height" type="xsd:double"/>
+                                                        </xsd:complexType>
+                                                    </xsd:element>
+                                                    <xsd:element name="cornerLocal" minOccurs="0" maxOccurs="unbounded">
+                                                        <xsd:complexType>
+                                                            <xsd:sequence>
+                                                                <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                                                <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                                            </xsd:sequence>
+                                                            <xsd:attribute name="u"      type="xsd:double"/>
+                                                            <xsd:attribute name="v"      type="xsd:double"/>
+                                                            <xsd:attribute name="z"      type="xsd:double"/>
+                                                            <xsd:attribute name="height" type="xsd:double"/>
+                                                        </xsd:complexType>
+                                                    </xsd:element>
+                                                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                                    </xsd:choice>
+						    </xsd:sequence>						
+                                            </xsd:complexType>
+                                        </xsd:element>
+                                        <xsd:element name="material" minOccurs="0" maxOccurs="1">
+                                            <xsd:complexType>
+                                                <xsd:sequence>
+                                                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                                </xsd:sequence>
+                                                <xsd:attribute name="surface"   type="xsd:string"/>
+                                                <xsd:attribute name="friction"  type="xsd:double"/>
+                                                <xsd:attribute name="roughness" type="xsd:double"/>
+                                            </xsd:complexType>
+                                        </xsd:element>
+                                        <xsd:element name="validity"     type="laneValidity" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="parkingSpace" type="parkingSpace" minOccurs="0" maxOccurs="1"/>
+                                        <xsd:element name="userData"     type="userData"     minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"      type="include"      minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:sequence>
+                                    <xsd:attribute name="type"        type="xsd:string"/>
+                                    <xsd:attribute name="name"        type="xsd:string"/>
+                                    <xsd:attribute name="id"          type="xsd:string"/>
+                                    <xsd:attribute name="s"           type="xsd:double"/>
+                                    <xsd:attribute name="t"           type="xsd:double"/>
+                                    <xsd:attribute name="zOffset"     type="xsd:double"/>
+                                    <xsd:attribute name="validLength" type="xsd:double"/>
+                                    <xsd:attribute name="orientation" type="orientation"/>
+                                    <xsd:attribute name="length"      type="xsd:double"/>
+                                    <xsd:attribute name="width"       type="xsd:double"/>
+                                    <xsd:attribute name="radius"      type="xsd:double"/>
+                                    <xsd:attribute name="height"      type="xsd:double"/>
+                                    <xsd:attribute name="hdg"         type="xsd:double"/>
+                                    <xsd:attribute name="pitch"       type="xsd:double"/>
+                                    <xsd:attribute name="roll"        type="xsd:double"/>
+                                </xsd:complexType>
+                            </xsd:element>
+                            <xsd:element name="objectReference"  minOccurs="0" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="validity" type="laneValidity" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="userData" type="userData"     minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"  type="include"      minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:sequence>
+                                    <xsd:attribute name="s"           type="xsd:double"/>
+                                    <xsd:attribute name="t"           type="xsd:double"/>
+                                    <xsd:attribute name="id"          type="xsd:string"/>
+                                    <xsd:attribute name="zOffset"     type="xsd:double"/>
+                                    <xsd:attribute name="validLength" type="xsd:double"/>
+                                    <xsd:attribute name="orientation" type="orientation"/>
+                                </xsd:complexType>
+                            </xsd:element>
+                            <xsd:element name="tunnel"  minOccurs="0" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="validity" type="laneValidity" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="userData" type="userData"     minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"  type="include"      minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:sequence>
+                                    <xsd:attribute name="s"        type="xsd:double"/>
+                                    <xsd:attribute name="length"   type="xsd:double"/>
+                                    <xsd:attribute name="name"     type="xsd:string"/>
+                                    <xsd:attribute name="id"       type="xsd:string"/>
+                                    <xsd:attribute name="type"     type="tunnelType"/>
+                                    <xsd:attribute name="lighting" type="xsd:double"/>
+                                    <xsd:attribute name="daylight" type="xsd:double"/>
+                                </xsd:complexType>
+                            </xsd:element>
+                            <xsd:element name="bridge"  minOccurs="0" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="validity" type="laneValidity" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="userData" type="userData"     minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"  type="include"      minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:sequence>
+                                    <xsd:attribute name="s"      type="xsd:double"/>
+                                    <xsd:attribute name="length" type="xsd:double"/>
+                                    <xsd:attribute name="name"   type="xsd:string"/>
+                                    <xsd:attribute name="id"     type="xsd:string"/>
+                                    <xsd:attribute name="type"   type="bridgeType"/>
+                                </xsd:complexType>
+                            </xsd:element>
+                            <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                            <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                        </xsd:sequence>
+                    </xsd:complexType>
+                </xsd:element> <!-- end objects -->
+
+                <xsd:element name="signals" minOccurs="0" maxOccurs="1">
+                    <xsd:complexType>
+                        <xsd:sequence>
+                            <xsd:element name="signal"  minOccurs="0" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="validity" type="laneValidity" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="dependency" minOccurs="0" maxOccurs="unbounded">
+                                            <xsd:complexType>
+                                                <xsd:sequence>
+                                                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                                </xsd:sequence>
+                                                <xsd:attribute name="id"   type="xsd:string"/>
+                                                <xsd:attribute name="type" type="xsd:string"/>
+                                            </xsd:complexType>
+                                        </xsd:element>
+                                        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:sequence>
+                                    <xsd:attribute name="s"           type="xsd:double"/>
+                                    <xsd:attribute name="t"           type="xsd:double"/>
+                                    <xsd:attribute name="id"          type="xsd:string"/>
+                                    <xsd:attribute name="name"        type="xsd:string"/>
+                                    <xsd:attribute name="dynamic"     type="dynamic"/>
+                                    <xsd:attribute name="orientation" type="orientation"/>
+                                    <xsd:attribute name="zOffset"     type="xsd:double"/>
+                                    <xsd:attribute name="country"     type="xsd:string"/>
+                                    <xsd:attribute name="type"        type="xsd:string"/>
+                                    <xsd:attribute name="subtype"     type="xsd:string"/>
+                                    <xsd:attribute name="value"       type="xsd:double"/>
+                                    <xsd:attribute name="unit"        type="unit"/>
+                                    <xsd:attribute name="height"      type="xsd:double"/>
+                                    <xsd:attribute name="width"       type="xsd:double"/>
+                                    <xsd:attribute name="text"        type="xsd:string"/>
+                                    <xsd:attribute name="hOffset"     type="xsd:double"/>
+                                    <xsd:attribute name="pitch"       type="xsd:double"/>
+                                    <xsd:attribute name="roll"        type="xsd:double"/>
+                                </xsd:complexType>
+                            </xsd:element> <!-- end signal -->
+                            <xsd:element name="signalReference"  minOccurs="0" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="validity" type="laneValidity" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:sequence>
+                                    <xsd:attribute name="s"           type="xsd:double"/>
+                                    <xsd:attribute name="t"           type="xsd:double"/>
+                                    <xsd:attribute name="id"          type="xsd:string"/>
+                                    <xsd:attribute name="orientation" type="orientation"/>
+                                </xsd:complexType>
+                            </xsd:element> <!-- end signal reference -->
+                            <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                            <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                        </xsd:sequence>
+                    </xsd:complexType>
+                </xsd:element> <!-- end signals -->
+                
+                <xsd:element name="surface" minOccurs="0" maxOccurs="1">
+                    <xsd:complexType>
+                        <xsd:sequence>
+                            <xsd:element name="CRG"  minOccurs="0" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:sequence>
+                                    <xsd:attribute name="file"        type="xsd:string"/>
+                                    <xsd:attribute name="sStart"      type="xsd:double"/>
+                                    <xsd:attribute name="sEnd"        type="xsd:double"/>
+                                    <xsd:attribute name="orientation" type="surfaceOrientation"/>
+                                    <xsd:attribute name="mode"        type="mode"/>
+                                    <xsd:attribute name="purpose"     type="purpose"/>
+                                    <xsd:attribute name="sOffset"     type="xsd:double"/>
+                                    <xsd:attribute name="tOffset"     type="xsd:double"/>
+                                    <xsd:attribute name="zOffset"     type="xsd:double"/>
+                                    <xsd:attribute name="zScale"      type="xsd:double"/>
+                                    <xsd:attribute name="hOffset"     type="xsd:double"/>
+                                </xsd:complexType>
+                            </xsd:element> <!-- end CRG -->
+                            <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                            <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                        </xsd:sequence>
+                    </xsd:complexType>
+                </xsd:element> <!-- end surface -->
+                <xsd:element name="railroad" minOccurs="0" maxOccurs="1">
+                    <xsd:complexType>
+                        <xsd:sequence>
+                            <xsd:element name="switch" minOccurs="0" maxOccurs="unbounded">
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="mainTrack" maxOccurs="1">
+                                            <xsd:complexType>
+                                                <xsd:attribute name="id"  type="xsd:string"/>
+                                                <xsd:attribute name="s"   type="xsd:double"/>
+                                                <xsd:attribute name="dir" type="dir"/>
+                                            </xsd:complexType>
+                                        </xsd:element> <!-- end mainTrack -->
+                                        <xsd:element name="sideTrack" maxOccurs="1">
+                                            <xsd:complexType>
+                                                <xsd:attribute name="id"  type="xsd:string"/>
+                                                <xsd:attribute name="s"   type="xsd:double"/>
+                                                <xsd:attribute name="dir" type="dir"/>
+                                            </xsd:complexType>
+                                        </xsd:element> <!-- end sideTrack -->
+                                        <xsd:element name="partner" minOccurs="0" maxOccurs="1">
+                                            <xsd:complexType>
+                                                <xsd:attribute name="name" type="xsd:string"/>
+                                                <xsd:attribute name="id"   type="xsd:string"/>
+                                            </xsd:complexType>
+                                        </xsd:element> <!-- end partner -->
+                                        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                    </xsd:sequence>
+                                    <xsd:attribute name="name"     type="xsd:string"/>
+                                    <xsd:attribute name="id"       type="xsd:string"/>
+                                    <xsd:attribute name="position" type="position"/>
+                                </xsd:complexType>
+                            </xsd:element> <!-- end switch -->
+                            <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                            <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                        </xsd:sequence>
+                    </xsd:complexType>
+                </xsd:element> <!-- end railroad -->
+                <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="name"     type="xsd:string"/>
+                <xsd:attribute name="length"   type="xsd:double"/>
+                <xsd:attribute name="id"       type="xsd:string"/>
+                <xsd:attribute name="junction" type="xsd:string"/>
+            </xsd:complexType> <!-- end road -->
+        </xsd:element>
+
+        <xsd:element name="controller"  minOccurs="0" maxOccurs="unbounded">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="control"  maxOccurs="unbounded">
+                        <xsd:complexType>
+                            <xsd:sequence>
+                                <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                            </xsd:sequence>
+                            <xsd:attribute name="signalId" type="xsd:string"/>
+                            <xsd:attribute name="type"     type="xsd:string"/>
+                        </xsd:complexType>
+                    </xsd:element>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="id"       type="xsd:string"/>
+                <xsd:attribute name="name"     type="xsd:string"/>
+                <xsd:attribute name="sequence" type="xsd:int"/>
+            </xsd:complexType>
+        </xsd:element> <!-- end controller -->
+
+        <xsd:element name="junction"  minOccurs="0" maxOccurs="unbounded">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="connection"  maxOccurs="unbounded">
+                        <xsd:complexType>
+                            <xsd:sequence>
+                                <xsd:element name="laneLink"  minOccurs="0" maxOccurs="unbounded">
+                                    <xsd:complexType>
+                                        <xsd:sequence>
+                                            <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                            <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                        </xsd:sequence>
+                                        <xsd:attribute name="from" type="xsd:int"/>
+                                        <xsd:attribute name="to"   type="xsd:int"/>
+                                    </xsd:complexType>
+                                </xsd:element>
+                                <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                            </xsd:sequence>
+                            <xsd:attribute name="id"             type="xsd:string"/>
+                            <xsd:attribute name="incomingRoad"   type="xsd:string"/>
+                            <xsd:attribute name="connectingRoad" type="xsd:string"/>
+                            <xsd:attribute name="contactPoint"   type="contactPoint"/>
+                        </xsd:complexType>
+                    </xsd:element>
+                    <xsd:element name="priority"  minOccurs="0" maxOccurs="unbounded">
+                        <xsd:complexType>
+                            <xsd:sequence>
+                                <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                            </xsd:sequence>
+                            <xsd:attribute name="high" type="xsd:string"/>
+                            <xsd:attribute name="low"  type="xsd:string"/>
+                        </xsd:complexType>
+                    </xsd:element>
+                    <xsd:element name="controller"  minOccurs="0" maxOccurs="unbounded">
+                        <xsd:complexType>
+                            <xsd:sequence>
+                                <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                            </xsd:sequence>
+                            <xsd:attribute name="id"       type="xsd:string"/>
+                            <xsd:attribute name="type"     type="xsd:string"/>
+                            <xsd:attribute name="sequence" type="xsd:int"/>
+                        </xsd:complexType>
+                    </xsd:element>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="name" type="xsd:string"/>
+                <xsd:attribute name="id"   type="xsd:string"/>
+            </xsd:complexType>
+        </xsd:element> <!-- end junction -->
+        
+        <xsd:element name="junctionGroup"  minOccurs="0" maxOccurs="unbounded">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="junctionReference" maxOccurs="unbounded">
+                        <xsd:complexType>
+                            <xsd:attribute name="junction" type="xsd:string"/>
+                        </xsd:complexType>
+                    </xsd:element>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="name" type="xsd:string"/>
+                <xsd:attribute name="id"   type="xsd:string"/>
+                <xsd:attribute name="type" type="junctionGroupType"/>
+            </xsd:complexType>
+        </xsd:element> <!-- end junctionGroup -->
+        
+        <xsd:element name="station"  minOccurs="0" maxOccurs="unbounded">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="platform" minOccurs="1" maxOccurs="unbounded">
+                        <xsd:complexType>
+                            <xsd:sequence>
+                                <xsd:element name="segment"  minOccurs="1" maxOccurs="unbounded">
+                                    <xsd:complexType>
+                                        <xsd:sequence>
+                                            <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                                            <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                                        </xsd:sequence>
+                                        <xsd:attribute name="roadId" type="xsd:string"/>
+                                        <xsd:attribute name="sStart" type="xsd:double"/>
+                                        <xsd:attribute name="sEnd"   type="xsd:double"/>
+                                        <xsd:attribute name="side"   type="side"/>
+                                    </xsd:complexType>
+                                </xsd:element>
+                            </xsd:sequence>
+                            <xsd:attribute name="name" type="xsd:string"/>
+                            <xsd:attribute name="id"   type="xsd:string"/>
+                        </xsd:complexType>
+                    </xsd:element>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="name" type="xsd:string"/>
+                <xsd:attribute name="id"   type="xsd:string"/>
+                <xsd:attribute name="type" type="stationType"/>
+            </xsd:complexType>
+        </xsd:element> <!-- end station -->
+        
+        </xsd:sequence>
+    </xsd:complexType>
+</xsd:element>
+
+<!-- enumerations for road->link->Predecessor/successor->elementType -->
+<xsd:simpleType name="elementType">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="road"/>
+       <xsd:enumeration value="junction"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for road->type->speed->max -->
+<xsd:simpleType name="max">
+<xsd:union>
+<xsd:simpleType>
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="no limit"/>
+       <xsd:enumeration value="undefined"/>
+   </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType>
+   <xsd:restriction base="xsd:integer">
+       <xsd:minInclusive value="0"/>
+   </xsd:restriction>
+ </xsd:simpleType>  
+    </xsd:union>
+</xsd:simpleType>
+
+<!-- enumerations for road->link->Predecessor/successor->contactPoint -->
+<!-- enumerations for junction->connection->contactPoint -->
+<xsd:simpleType name="contactPoint">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="start"/>
+       <xsd:enumeration value="end"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for road->link->neighbor->side -->
+<!-- enumerations for openDRIVE->station->platform->segment->side -->
+<xsd:simpleType name="side">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="left"/>
+       <xsd:enumeration value="right"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for road->link->neighbor->direction-->
+<xsd:simpleType name="direction">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="same"/>
+       <xsd:enumeration value="opposite"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for road->type-->
+<xsd:simpleType name="roadType">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="unknown"/>
+       <xsd:enumeration value="rural"/>
+       <xsd:enumeration value="motorway"/>
+       <xsd:enumeration value="town"/>
+       <xsd:enumeration value="lowSpeed"/>
+       <xsd:enumeration value="pedestrian"/>
+       <xsd:enumeration value="bicycle"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for road->type->speed->unit-->
+<!-- enumerations for lane->speed->unit-->
+<!-- enumerations for signals->signal->unit-->
+<xsd:simpleType name="unit">
+   <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="m"/>
+       <xsd:enumeration value="km"/>
+       <xsd:enumeration value="ft"/>
+        <xsd:enumeration value="mile"/>
+       <xsd:enumeration value="m/s"/>
+       <xsd:enumeration value="mph"/>
+       <xsd:enumeration value="km/h"/>
+       <xsd:enumeration value="kg"/>
+       <xsd:enumeration value="t"/>
+       <xsd:enumeration value="%"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+
+<!-- enumerations for planView->geometry->paramPoly3->pRange-->
+<xsd:simpleType name="pRange">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="arcLength"/>
+       <xsd:enumeration value="normalized"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for lateralProfile->crossFall->side -->
+<xsd:simpleType name="crossfallSide">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="left"/>
+       <xsd:enumeration value="right"/>
+       <xsd:enumeration value="both"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for lanes->laneSection->singleSide -->
+<!-- enumerations for lane->level -->
+<!-- enumerations for centerLane->level -->
+<xsd:simpleType name="singleSide">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="true"/>
+       <xsd:enumeration value="false"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for lane->type -->
+<!-- enumerations for centerLane->type -->
+<xsd:simpleType name="laneType">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="none"/>
+       <xsd:enumeration value="driving"/>
+       <xsd:enumeration value="stop"/>
+       <xsd:enumeration value="shoulder"/>
+       <xsd:enumeration value="biking"/>
+       <xsd:enumeration value="sidewalk"/>
+       <xsd:enumeration value="border"/>
+       <xsd:enumeration value="restricted"/>
+       <xsd:enumeration value="parking"/>
+       <xsd:enumeration value="bidirectional"/>
+       <xsd:enumeration value="median"/>
+       <xsd:enumeration value="special1"/>
+       <xsd:enumeration value="special2"/>
+       <xsd:enumeration value="special3"/>
+       <xsd:enumeration value="roadWorks"/>
+       <xsd:enumeration value="tram"/>
+       <xsd:enumeration value="rail"/>
+       <xsd:enumeration value="entry"/>
+       <xsd:enumeration value="exit"/>
+       <xsd:enumeration value="offRamp"/>
+       <xsd:enumeration value="onRamp"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for lane->roadMark->type -->
+<!-- enumerations for parkingSpace->marking->type -->
+<!-- enumerations for centerLane->roadMark->type -->
+<xsd:simpleType name="roadmarkType">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="none"/>
+       <xsd:enumeration value="solid"/>
+       <xsd:enumeration value="broken"/>
+       <xsd:enumeration value="solid solid"/>
+        <xsd:enumeration value="solid broken"/>
+       <xsd:enumeration value="broken solid"/>
+       <xsd:enumeration value="broken broken"/>
+       <xsd:enumeration value="botts dots"/>
+       <xsd:enumeration value="grass"/>
+       <xsd:enumeration value="curb"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for lane->roadMark->weight -->
+<!-- enumerations for centerLane->roadMark->weight -->
+<xsd:simpleType name="weight">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="standard"/>
+       <xsd:enumeration value="bold"/>       
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for lane->roadMark->color -->
+<!-- enumerations for parkingSpace->marking->color -->
+<!-- enumerations for centerLane->roadMark->weight -->
+<xsd:simpleType name="color">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="standard"/>
+       <xsd:enumeration value="blue"/> 
+       <xsd:enumeration value="green"/>
+       <xsd:enumeration value="red"/> 
+       <xsd:enumeration value="white"/>
+       <xsd:enumeration value="yellow"/>       
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for lane->access->restriction -->
+<xsd:simpleType name="restriction">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="simulator"/>
+       <xsd:enumeration value="autonomous traffic"/> 
+       <xsd:enumeration value="pedestrian"/>
+       <xsd:enumeration value="none"/>             
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for lane->roadMark->laneChange -->
+<!-- enumerations for centerLane->roadMark->weight -->
+<xsd:simpleType name="laneChange">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="increase"/>
+       <xsd:enumeration value="decrease"/>
+       <xsd:enumeration value="both"/>
+       <xsd:enumeration value="none"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for lane->roadMark->type->line->rule -->
+<!-- enumerations for centerLane->roadMark->type->line->rule -->
+<xsd:simpleType name="rule">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="no passing"/>
+       <xsd:enumeration value="caution"/>
+       <xsd:enumeration value="none"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for objects->object->orientation -->
+<!-- enumerations for objects->objectReference->orientation -->
+<!-- enumerations for signals->signal->orientation -->
+<!-- enumerations for signals->signalReference->orientation -->
+<xsd:simpleType name="orientation">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="+"/>
+       <xsd:enumeration value="-"/>
+       <xsd:enumeration value="none"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for objects->tunnel->type -->
+<xsd:simpleType name="tunnelType">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="standard"/>
+       <xsd:enumeration value="underpass"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for objects->bridge->type -->
+<xsd:simpleType name="bridgeType">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="concrete"/>
+       <xsd:enumeration value="steel"/>
+       <xsd:enumeration value="brick"/>
+       <xsd:enumeration value="wood"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for parkingSpace->access -->
+<xsd:simpleType name="access">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="all"/>
+       <xsd:enumeration value="car"/>
+       <xsd:enumeration value="women"/>
+        <xsd:enumeration value="handicapped"/>
+       <xsd:enumeration value="bus"/>
+       <xsd:enumeration value="truck"/>
+       <xsd:enumeration value="electric"/>
+       <xsd:enumeration value="residents"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for parkingSpace->marking->side -->
+<xsd:simpleType name="parkingSpacemarkingSide">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="front"/>
+       <xsd:enumeration value="rear"/>
+       <xsd:enumeration value="left"/>
+        <xsd:enumeration value="right"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for signals->signal->dynamic -->
+<xsd:simpleType name="dynamic">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="yes"/>
+       <xsd:enumeration value="no"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for surface->CRG->orientation -->
+<xsd:simpleType name="surfaceOrientation">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="same"/>
+       <xsd:enumeration value="opposite"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for surface->CRG->mode -->
+<xsd:simpleType name="mode">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="attached"/>
+       <xsd:enumeration value="attached0"/>
+       <xsd:enumeration value="genuine"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for surface->CRG->purpose -->
+<xsd:simpleType name="purpose">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="elevation"/>
+       <xsd:enumeration value="friction"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for railRoad->switch->position -->
+<xsd:simpleType name="position">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="dynamic"/>
+       <xsd:enumeration value="straight"/>
+       <xsd:enumeration value="turn"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for railRoad->switch->mainTrack->dir-->
+<!-- enumerations for railRoad->switch->sideTrack->dir-->
+<xsd:simpleType name="dir">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="+"/>
+       <xsd:enumeration value="-"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for openDRIVE->junctionGroup->type-->
+<xsd:simpleType name="junctionGroupType">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="roundabout"/>
+       <xsd:enumeration value="unknown"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<!-- enumerations for openDRIVE->station->type-->
+<xsd:simpleType name="stationType">
+   <xsd:restriction base="xsd:string">
+       <xsd:enumeration value="small"/>
+       <xsd:enumeration value="medium"/>
+       <xsd:enumeration value="large"/>
+   </xsd:restriction>
+</xsd:simpleType>
+
+<xsd:complexType name="userData" mixed="true">
+    <xsd:sequence>
+        <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
+    </xsd:sequence>
+    <xsd:attribute name="code"  type="xsd:string"/>
+    <xsd:attribute name="value" type="xsd:string"/>
+</xsd:complexType>
+
+<xsd:complexType name="include" >
+    <xsd:attribute name="file" type="xsd:string"/>
+</xsd:complexType>
+
+<xsd:complexType name="laneValidity">
+    <xsd:sequence>
+        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="fromLane" type="xsd:int"/>
+    <xsd:attribute name="toLane"   type="xsd:int"/>
+</xsd:complexType>
+
+<xsd:complexType name="parkingSpace">
+    <xsd:sequence>
+        <xsd:element name="marking" minOccurs="0" maxOccurs="4">
+            <xsd:complexType>
+                <xsd:attribute name="side"  type="parkingSpacemarkingSide"/>
+                <xsd:attribute name="type"  type="roadmarkType"/>
+                <xsd:attribute name="width" type="xsd:double"/>
+                <xsd:attribute name="color" type="color"/>
+            </xsd:complexType>
+        </xsd:element>
+        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="access"      type="access"/>
+    <xsd:attribute name="restrictions" type="xsd:string"/>
+</xsd:complexType>
+
+<xsd:complexType name="lane" >
+    <xsd:sequence>
+        <xsd:element name="link" minOccurs="0" maxOccurs="1">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="predecessor" minOccurs="0" maxOccurs="1">
+                        <xsd:complexType>
+                            <xsd:attribute name="id" type="xsd:int"/>
+                        </xsd:complexType>
+                    </xsd:element>
+                    <xsd:element name="successor" minOccurs="0" maxOccurs="1">
+                        <xsd:complexType>
+                            <xsd:attribute name="id" type="xsd:int"/>
+                        </xsd:complexType>
+                    </xsd:element>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+            </xsd:complexType>
+         </xsd:element>
+	 <xsd:choice>
+         <xsd:element name="width" maxOccurs="unbounded">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="sOffset" type="xsd:double"/>
+                <xsd:attribute name="a"       type="xsd:double"/>
+                <xsd:attribute name="b"       type="xsd:double"/>
+                <xsd:attribute name="c"       type="xsd:double"/>
+                <xsd:attribute name="d"       type="xsd:double"/>
+            </xsd:complexType>
+        </xsd:element>
+        <xsd:element name="border" minOccurs="1" maxOccurs="unbounded">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="sOffset" type="xsd:double"/>
+                <xsd:attribute name="a"       type="xsd:double"/>
+                <xsd:attribute name="b"       type="xsd:double"/>
+                <xsd:attribute name="c"       type="xsd:double"/>
+                <xsd:attribute name="d"       type="xsd:double"/>
+            </xsd:complexType>
+        </xsd:element>
+      </xsd:choice>
+      <xsd:element name="roadMark" minOccurs="0" maxOccurs="unbounded">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="type" minOccurs="0" maxOccurs="1">
+                        <xsd:complexType>
+                            <xsd:sequence>
+                                <xsd:element name="line" minOccurs="1" maxOccurs="unbounded">
+                                    <xsd:complexType>
+                                        <xsd:attribute name="length"  type="xsd:double"/>
+                                        <xsd:attribute name="space"   type="xsd:double"/>
+                                        <xsd:attribute name="tOffset" type="xsd:double"/>
+                                        <xsd:attribute name="sOffset" type="xsd:double"/>
+                                        <xsd:attribute name="rule"    type="rule"/>
+                                        <xsd:attribute name="width"   type="xsd:double"/>
+                                    </xsd:complexType>
+                                </xsd:element>
+                            </xsd:sequence>
+                            <xsd:attribute name="name"  type="xsd:string"/>
+                            <xsd:attribute name="width" type="xsd:double"/>
+                        </xsd:complexType>
+                    </xsd:element>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="sOffset"    type="xsd:double"/>
+                <xsd:attribute name="type"       type="roadmarkType"/>
+                <xsd:attribute name="weight"     type="weight"/>
+                <xsd:attribute name="color"      type="color"/>
+                <xsd:attribute name="material"   type="xsd:string"/>
+                <xsd:attribute name="width"      type="xsd:double"/>
+                <xsd:attribute name="laneChange" type="laneChange"/>
+	        <xsd:attribute name="height"     type="xsd:double"/>
+            </xsd:complexType>
+        </xsd:element>
+        <xsd:element name="material" minOccurs="0" maxOccurs="unbounded">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="sOffset"   type="xsd:double"/>
+                <xsd:attribute name="surface"   type="xsd:string"/>
+                <xsd:attribute name="friction"  type="xsd:double"/>
+                <xsd:attribute name="roughness" type="xsd:double"/>
+            </xsd:complexType>
+        </xsd:element>
+        <xsd:element name="visibility" minOccurs="0" maxOccurs="unbounded">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="sOffset" type="xsd:double"/>
+                <xsd:attribute name="forward" type="xsd:double"/>
+                <xsd:attribute name="back"    type="xsd:double"/>
+                <xsd:attribute name="left"    type="xsd:double"/>
+                <xsd:attribute name="right"   type="xsd:double"/>
+            </xsd:complexType>
+        </xsd:element>
+        <xsd:element name="speed" minOccurs="0" maxOccurs="unbounded">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="sOffset" type="xsd:double"/>
+                <xsd:attribute name="max"     type="xsd:double"/>
+                <xsd:attribute name="unit"    type="unit"/>
+            </xsd:complexType>
+        </xsd:element>
+        <xsd:element name="access" minOccurs="0" maxOccurs="unbounded">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include" type="include" minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="sOffset"     type="xsd:double"/>
+                <xsd:attribute name="restriction" type="restriction"/>
+            </xsd:complexType>
+        </xsd:element>
+        <xsd:element name="height" minOccurs="0" maxOccurs="unbounded">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include" type="include" minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="sOffset" type="xsd:double"/>
+                <xsd:attribute name="inner"   type="xsd:double"/>
+                <xsd:attribute name="outer"   type="xsd:double"/>
+            </xsd:complexType>
+        </xsd:element>
+	<xsd:element name="rule" minOccurs="0" maxOccurs="unbounded">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include" type="include" minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="sOffset" type="xsd:double"/>
+                <xsd:attribute name="value"   type="xsd:string"/>
+            </xsd:complexType>
+        </xsd:element>
+        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"    type="xsd:int"/>
+    <xsd:attribute name="type"  type="laneType"/>
+    <xsd:attribute name="level" type="singleSide"/>
+</xsd:complexType>
+
+<xsd:complexType name="centerLane" >
+    <xsd:sequence>
+        <xsd:element name="link" minOccurs="0" maxOccurs="1">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="predecessor" minOccurs="0" maxOccurs="1">
+                        <xsd:complexType>
+                            <xsd:attribute name="id" type="xsd:int"/>
+                        </xsd:complexType>
+                    </xsd:element>
+                    <xsd:element name="successor" minOccurs="0" maxOccurs="1">
+                        <xsd:complexType>
+                            <xsd:attribute name="id" type="xsd:int"/>
+                        </xsd:complexType>
+                    </xsd:element>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+            </xsd:complexType>
+         </xsd:element>
+        <xsd:element name="roadMark" minOccurs="0" maxOccurs="unbounded">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:element name="type" minOccurs="0" maxOccurs="1">
+                        <xsd:complexType>
+                            <xsd:sequence>
+                                <xsd:element name="line" minOccurs="1" maxOccurs="unbounded">
+                                    <xsd:complexType>
+                                        <xsd:attribute name="length"  type="xsd:double"/>
+                                        <xsd:attribute name="space"   type="xsd:double"/>
+                                        <xsd:attribute name="tOffset" type="xsd:double"/>
+                                        <xsd:attribute name="sOffset" type="xsd:double"/>
+                                        <xsd:attribute name="rule"    type="rule"/>
+					<xsd:attribute name="width"   type="xsd:double"/>
+                                    </xsd:complexType>
+                                </xsd:element>
+                            </xsd:sequence>
+                            <xsd:attribute name="name"  type="xsd:string"/>
+                            <xsd:attribute name="width" type="xsd:double"/>
+                        </xsd:complexType>
+                    </xsd:element>
+                    <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+                    <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+                </xsd:sequence>
+                <xsd:attribute name="sOffset"    type="xsd:double"/>
+                <xsd:attribute name="type"       type="roadmarkType"/>
+                <xsd:attribute name="weight"     type="weight"/>
+                <xsd:attribute name="color"      type="color"/>
+		<xsd:attribute name="material"   type="xsd:string"/>
+                <xsd:attribute name="width"      type="xsd:double"/>
+                <xsd:attribute name="laneChange" type="laneChange"/>
+		<xsd:attribute name="height"     type="xsd:double"/>
+		
+            </xsd:complexType>
+        </xsd:element>
+        <xsd:element name="userData" type="userData" minOccurs="0" maxOccurs="unbounded"/>
+        <xsd:element name="include"  type="include"  minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="id"    type="xsd:int"/>
+    <xsd:attribute name="type"  type="laneType"/>
+    <xsd:attribute name="level" type="singleSide"/>
+</xsd:complexType>
+
+
+</xsd:schema>

+ 1747 - 0
src/tool/opendriveParser/OpenDRIVE_1.5M.xsd

@@ -0,0 +1,1747 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">
+
+    <xs:annotation>
+        <xs:documentation>
+            XML Schema 1.0 Definition for OpenDRIVE XML files - Rev. 1.5M, excluding SET records, (c)2019 by VIRES Simulationstechnologie GmbH, Germany
+        </xs:documentation>
+    </xs:annotation>
+    
+    
+    <!-- user defined data types -->
+    
+    <xs:simpleType name="t_grEqZero">
+        <xs:restriction base="xs:double">
+            <xs:minInclusive value="0.0"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end t_grEqZero -->
+    
+    <xs:simpleType name="t_grZero">
+        <xs:restriction base="xs:double">
+            <xs:minExclusive value="0.0"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end t_grZero -->
+    
+    <xs:simpleType name="t_zeroOne">
+        <xs:restriction base="xs:double">
+            <xs:minInclusive value="0.0"/>
+            <xs:maxInclusive value="1.0"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end t_zeroOne -->
+    
+    <xs:simpleType name="t_bool">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="true"/>
+            <xs:enumeration value="false"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end t_bool -->
+    
+    <xs:simpleType name="t_yesNo">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="yes"/>
+            <xs:enumeration value="no"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end t_yesNo -->
+    
+    <xs:simpleType name="t_header_Version">
+        <xs:restriction base="xs:float">
+            <xs:pattern value="\d\.\d{2}"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end t_header_Version -->
+    
+    <xs:simpleType name="t_maxSpeed">
+        <xs:union memberTypes="e_maxSpeedString t_grEqZero"/>
+    </xs:simpleType> <!-- end t_maxSpeed -->
+    
+        <xs:simpleType name="e_maxSpeedString">
+            <xs:restriction base="xs:string">
+                <xs:enumeration value="no limit"/>
+                <xs:enumeration value="undefined"/>
+            </xs:restriction>
+        </xs:simpleType> <!-- end e_maxSpeedString -->
+        
+    <xs:simpleType name="t_junction_id">
+        <xs:restriction base="xs:string">
+            <!-- <xs:pattern value="^(?!-1).*|^-1.+"/> -->   <!-- xmllint complains about that, QXmlValidator works fine -->
+            <xs:pattern value=".*"/> <!-- dummy entry which allows everything. If your validator knows the xpath expression above then uncomment it and remove this line -->
+        </xs:restriction>
+    </xs:simpleType> <!-- end t_junction_id -->
+    
+    <!-- end user defined data types -->
+    
+    
+    <!-- 5.1 Enclosing Tag -->
+    <xs:element name="OpenDRIVE">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="header"           type="t_header"         minOccurs="1"   maxOccurs="1"/>
+                <xs:element name="road"             type="t_road"           minOccurs="1"   maxOccurs="unbounded"/>
+                <xs:element name="controller"       type="t_controller"     minOccurs="0"   maxOccurs="unbounded"/>
+                <xs:element name="junction"         type="t_junction"       minOccurs="0"   maxOccurs="unbounded">
+                    <xs:key name="k_junction_connectionId">
+                        <xs:selector xpath="connection"/>
+                        <xs:field xpath="@id"/>
+                    </xs:key>
+                    <xs:key name="k_junction_controllerId">
+                        <xs:selector xpath="junction/controller"/>
+                        <xs:field xpath="@id"/>
+                    </xs:key>                    
+                    <xs:keyref name="r_junction_connection_master" refer="k_junction_connectionId">
+                        <xs:selector xpath="junction/connection"/>
+                        <xs:field xpath="@connectionMaster"/>
+                    </xs:keyref>
+                </xs:element>
+                <xs:element name="junctionGroup"    type="t_junctionGroup"  minOccurs="0"   maxOccurs="unbounded"/>
+                <xs:element name="station"          type="t_station"        minOccurs="0"   maxOccurs="unbounded"/>
+                <xs:group ref="g_additionalData"/>
+            </xs:sequence>
+        </xs:complexType>
+        
+        <xs:key name="k_roadId">
+            <xs:selector xpath="road"/>
+            <xs:field xpath="@id"/>
+        </xs:key>
+        <xs:key name="k_road_objects_objectId">
+            <xs:selector xpath="road/objects/object"/>
+            <xs:field xpath="@id"/>
+        </xs:key>
+        <xs:key name="k_road_objects_objectReferenceId">
+            <xs:selector xpath="road/objects/objectReference"/>
+            <xs:field xpath="@id"/>
+        </xs:key>
+        <xs:key name="k_road_objects_tunnel">
+            <xs:selector xpath="road/objects/tunnel"/>
+            <xs:field xpath="@id"/>
+        </xs:key>
+        <xs:key name="k_road_objects_bridge">
+            <xs:selector xpath="road/objects/bridge"/>
+            <xs:field xpath="@id"/>
+        </xs:key>
+        <xs:key name="k_road_signals_signalId">
+            <xs:selector xpath="road/signals/signal"/>
+            <xs:field xpath="@id"/>
+        </xs:key>
+        <xs:key name="k_road_railroad_switchId">
+            <xs:selector xpath="road/railroad/switch"/>
+            <xs:field xpath="@id"/>
+        </xs:key>
+        <xs:key name="k_road_railroad_switchName">
+            <xs:selector xpath="road/railroad/switch"/>
+            <xs:field xpath="@name"/>
+        </xs:key>
+        <xs:key name="k_controllerId">
+            <xs:selector xpath="controller"/>
+            <xs:field xpath="@id"/>
+        </xs:key>
+        <xs:key name="k_junctionId">
+            <xs:selector xpath="junction"/>
+            <xs:field xpath="@id"/>
+        </xs:key>
+        <xs:key name="k_junctionGroupId">
+            <xs:selector xpath="junctionGroup"/>
+            <xs:field xpath="@id"/>
+        </xs:key>
+        <xs:key name="k_stationId">
+            <xs:selector xpath="station"/>
+            <xs:field xpath="@id"/>
+        </xs:key>
+        <xs:key name="k_station_platformId">
+            <xs:selector xpath="station/platform"/>
+            <xs:field xpath="@id"/>
+        </xs:key>                
+        
+        <xs:keyref name="r_road_link_neighbor" refer="k_roadId">
+            <xs:selector xpath="road/link/neighbor"/>
+            <xs:field xpath="@id"/>
+        </xs:keyref>        
+        <xs:keyref name="r_road_objects_objectReference" refer="k_road_objects_objectId">
+            <xs:selector xpath="road/objects/objectReference"/>
+            <xs:field xpath="@outlineId"/>
+        </xs:keyref>        
+        <xs:keyref name="r_road_signals_signal_dependency" refer="k_road_signals_signalId">
+            <xs:selector xpath="road/signals/signal/dependency"/>
+            <xs:field xpath="@id"/>
+        </xs:keyref>
+        <xs:keyref name="r_road_signals_signal_positionRoad" refer="k_roadId">
+            <xs:selector xpath="road/signals/signal/positionRoad"/>
+            <xs:field xpath="@roadId"/>
+        </xs:keyref>
+        <xs:keyref name="r_road_signals_signalReference" refer="k_road_signals_signalId">
+            <xs:selector xpath="road/signals/signalReference"/>
+            <xs:field xpath="@id"/>
+        </xs:keyref>
+        <xs:keyref name="r_road_railroad_switch_mainTrack" refer="k_road_railroad_switchId">
+            <xs:selector xpath="road/railroad/switch/mainTrack"/>
+            <xs:field xpath="@id"/>
+        </xs:keyref>
+        <xs:keyref name="r_road_railroad_switch_sideTrack" refer="k_road_railroad_switchId">
+            <xs:selector xpath="road/railroad/switch/sideTrack"/>
+            <xs:field xpath="@id"/>
+        </xs:keyref>
+        <xs:keyref name="r_road_railroad_switch_partner" refer="k_road_railroad_switchId">
+            <xs:selector xpath="road/railroad/switch/partner"/>
+            <xs:field xpath="@id"/>
+        </xs:keyref>
+        <xs:keyref name="r_controller_control" refer="k_road_signals_signalId">
+            <xs:selector xpath="controller/control"/>
+            <xs:field xpath="@signalId"/>
+        </xs:keyref>
+        <xs:keyref name="r_junction_connection_incomingRoad" refer="k_roadId">
+            <xs:selector xpath="junction/connection"/>
+            <xs:field xpath="@incomingRoad"/>
+            <!-- <xs:field xpath="@connectingRoad"/> -->
+        </xs:keyref>
+        <xs:keyref name="r_junction_connection_connectingRoad" refer="k_roadId">
+            <xs:selector xpath="junction/connection"/>
+            <!-- <xs:field xpath="@incomingRoad"/> -->
+            <xs:field xpath="@connectingRoad"/>
+        </xs:keyref>
+        <xs:keyref name="r_station_platform_segment" refer="k_roadId">
+            <xs:selector xpath="station/platform/segment"/>
+            <xs:field xpath="@roadId"/>
+        </xs:keyref>
+        
+    </xs:element> <!-- end OpenDRIVE -->
+    
+        <!-- 5.2 Header -->
+        <xs:complexType name="t_header">
+            <xs:sequence>                
+                <xs:element name="geoReference"     type="t_header_GeoReference"    minOccurs="0"   maxOccurs="1"/>
+                <xs:element name="offset"           type="t_header_Offset"          minOccurs="0"   maxOccurs="1"/>
+                <xs:group ref="g_additionalData"/>
+            </xs:sequence>            
+            <xs:attribute name="revMajor" type="xs:integer" fixed="1" use="required"/>
+            <xs:attribute name="revMinor" type="xs:integer" fixed="5" use="required"/>
+            <xs:attribute name="name"     type="xs:string"            use="optional"/>
+            <xs:attribute name="version"  type="t_header_Version"     use="optional"/>
+            <xs:attribute name="date"     type="xs:string"            use="optional"/>  <!-- should be ISO 8601 -->
+            <xs:attribute name="north"    type="xs:double"            use="optional"/>
+            <xs:attribute name="south"    type="xs:double"            use="optional"/>
+            <xs:attribute name="east"     type="xs:double"            use="optional"/>
+            <xs:attribute name="west"     type="xs:double"            use="optional"/>
+            <xs:attribute name="vendor"   type="xs:string"            use="optional"/>
+        </xs:complexType> <!-- end t_header -->
+    
+            <!-- 5.2.1 Geo Reference -->
+            <xs:complexType name="t_header_GeoReference" mixed="true"> <!-- mixed="true" allows text content AND elements like userData -->
+                <xs:group ref="g_additionalData"/>
+            </xs:complexType> <!-- end t_headerGeoReference -->
+    
+            <!-- 5.2.2 Offset -->
+            <xs:complexType name="t_header_Offset">
+                <xs:group ref="g_additionalData"/>                
+                <xs:attribute name="x"   type="xs:double" use="required"/>
+                <xs:attribute name="y"   type="xs:double" use="required"/>
+                <xs:attribute name="z"   type="xs:double" use="required"/>
+                <xs:attribute name="hdg" type="xs:float"  use="required"/>
+            </xs:complexType> <!-- end t_headerOffset -->
+
+        <!-- 5.3.1 Road Header Record -->
+        <xs:complexType name="t_road">                        
+            <xs:sequence>                
+                <xs:element name="link"             type="t_road_link"              minOccurs="0"   maxOccurs="1"/>              
+                <xs:element name="type"             type="t_road_type"              minOccurs="0"   maxOccurs="unbounded"/>
+                <xs:element name="planView"         type="t_road_planView"          minOccurs="1"   maxOccurs="1"/>
+                <xs:element name="elevationProfile" type="t_road_elevationProfile"  minOccurs="0"   maxOccurs="1"/>
+                <xs:element name="lateralProfile"   type="t_road_lateralProfile"    minOccurs="0"   maxOccurs="1"/>
+                <xs:element name="lanes"            type="t_road_lanes"             minOccurs="1"   maxOccurs="1"/>
+                <xs:element name="objects"          type="t_road_objects"           minOccurs="0"   maxOccurs="1"/>
+                <xs:element name="signals"          type="t_road_signals"           minOccurs="0"   maxOccurs="1"/>
+                <xs:element name="surface"          type="t_road_surface"           minOccurs="0"   maxOccurs="1"/>
+                <xs:element name="railroad"         type="t_road_railroad"          minOccurs="0"   maxOccurs="1"/>
+                <xs:group ref="g_additionalData"/>
+            </xs:sequence>                        
+            <xs:attribute name="name"     type="xs:string"      use="optional"/>
+            <xs:attribute name="length"   type="t_grEqZero"     use="required"/>
+            <xs:attribute name="id"       type="xs:string"      use="required"/>
+            <xs:attribute name="junction" type="xs:string"      use="required"/>
+            <xs:attribute name="rule"     type="e_trafficRule"  use="optional"/> <!-- new in OpenDrive 1.5M -->
+        </xs:complexType> <!-- end t_road -->
+        
+            <xs:simpleType name="e_trafficRule">
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="RHT"/>
+                    <xs:enumeration value="LHT"/>
+                </xs:restriction>
+            </xs:simpleType> <!-- end e_trafficRule -->
+        
+            <!-- 5.3.2 Road Link Record -->
+            <xs:complexType name="t_road_link" >
+                <xs:sequence>                    
+                    <xs:element name="predecessor"  type="t_road_link_predecessorSuccessor" minOccurs="0" maxOccurs="1"/>
+                    <xs:element name="successor"    type="t_road_link_predecessorSuccessor" minOccurs="0" maxOccurs="1"/>
+                    <xs:element name="neighbor"     type="t_road_link_neighbor"             minOccurs="0" maxOccurs="2"/>
+                    <xs:group ref="g_additionalData"/>
+                </xs:sequence>
+            </xs:complexType> <!-- end t_road_link -->
+            
+                <!-- 5.3.2.1 Road Predecessor -->
+                <!-- 5.3.2.2 Road Successor -->
+                <xs:complexType name="t_road_link_predecessorSuccessor">
+                    <xs:group ref="g_additionalData"/>                    
+                    <xs:attribute name="elementType"    type="e_road_link_elementType"  use="required"/>
+                    <xs:attribute name="elementId"      type="xs:string"                use="required"/>
+                    <!-- <xs:attributeGroup> --> <!-- variant 1 -->
+                        <xs:attribute name="contactPoint"   type="e_contactPoint"       use="optional"/>
+                    <!-- </xs:attributeGroup> -->
+                    <!-- <xs:attributeGroup> --> <!-- variant 2-->
+                        <xs:attribute name="elementS"       type="t_grEqZero"           use="optional"/>
+                        <xs:attribute name="elementDir"     type="e_elementDir"         use="optional"/>
+                    <!-- </xs:attributeGroup> -->
+                </xs:complexType> <!-- end t_road_link_predecessorSuccessor -->
+                
+                    <xs:simpleType name="e_road_link_elementType">
+                        <xs:restriction base="xs:string">
+                            <xs:enumeration value="road"/>
+                            <xs:enumeration value="junction"/>
+                        </xs:restriction>
+                    </xs:simpleType> <!-- end e_road_link_elementType -->
+
+                <!-- 5.3.2.3 Road Neighbor -->
+                <xs:complexType name="t_road_link_neighbor">
+                    <xs:group ref="g_additionalData"/>                    
+                    <xs:attribute name="side"       type="e_road_link_neighbor_side"    use="required"/>
+                    <xs:attribute name="elementId"  type="xs:string"                    use="required"/>
+                    <xs:attribute name="direction"  type="e_direction"                  use="required"/>
+                </xs:complexType> <!-- end t_road_link_neighbor -->
+                
+                    <xs:simpleType name="e_road_link_neighbor_side">
+                        <xs:restriction base="xs:string">
+                            <xs:enumeration value="left"/>
+                            <xs:enumeration value="right"/>
+                        </xs:restriction>
+                    </xs:simpleType> <!-- end e_road_link_neighbor_side -->
+            
+            <!-- 5.3.3 Road Type Record -->
+            <xs:complexType name="t_road_type">
+                <xs:sequence>                    
+                    <xs:element name="speed"    type="t_road_type_speed"    minOccurs="0"   maxOccurs="1"/>
+                    <xs:group ref="g_additionalData"/>
+                </xs:sequence>                
+                <xs:attribute name="s"          type="t_grEqZero"       use="required"/>
+                <xs:attribute name="type"       type="e_roadType"       use="required"/>
+                <xs:attribute name="country"    type="e_countryCode"    use="optional"/> <!-- new in OpenDrive 1.5M -->
+            </xs:complexType> <!-- end t_road_type -->
+            
+                <!-- 5.3.3.1 Speed Record -->
+                <xs:complexType name="t_road_type_speed">
+                    <xs:group ref="g_additionalData"/>
+                    <xs:attribute name="max"    type="t_maxSpeed"   use="required"/>
+                    <xs:attribute name="unit"   type="e_unitSpeed"  use="optional"/>
+                </xs:complexType> <!-- end t_road_type_speed -->
+                
+            <!-- 5.3.4 Road Plan View Record -->
+            <xs:complexType name="t_road_planView">
+                <xs:sequence>                    
+                    <xs:element name="geometry" type="t_road_planView_geometry" minOccurs="1"   maxOccurs="unbounded"/>
+                    <xs:group ref="g_additionalData"/>
+                </xs:sequence>
+            </xs:complexType> <!-- end t_road_planView -->
+            
+                <!-- 5.3.4.1 Road Geometry Header Record -->
+                <xs:complexType name="t_road_planView_geometry">
+                    <xs:choice>                        
+                        <xs:element name="line"         type="t_road_planView_geometry_line"/>
+                        <xs:element name="spiral"       type="t_road_planView_geometry_spiral"/>
+                        <xs:element name="arc"          type="t_road_planView_geometry_arc"/>
+                        <xs:element name="poly3"        type="t_road_planView_geometry_poly3"/>
+                        <xs:element name="paramPoly3"   type="t_road_planView_geometry_paramPoly3"/>
+                        <xs:group ref="g_additionalData"/>
+                    </xs:choice>
+                    
+                    <xs:attribute name="s"      type="t_grEqZero"   use="required"/>
+                    <xs:attribute name="x"      type="xs:double"    use="required"/>
+                    <xs:attribute name="y"      type="xs:double"    use="required"/>
+                    <xs:attribute name="hdg"    type="xs:double"    use="required"/>
+                    <xs:attribute name="length" type="t_grEqZero"   use="required"/>
+                </xs:complexType> <!-- end t_road_planView_geometry -->
+                
+                    <!-- 5.3.4.1.1 Geometry, Line Record -->
+                    <xs:complexType name="t_road_planView_geometry_line">                                                                
+                        <xs:group ref="g_additionalData"/>
+                    </xs:complexType> <!-- end t_road_planView_geometry_line -->
+                    
+                    <!-- 5.3.4.1.2 Geometry, Spiral Record (Clothoids) -->
+                    <xs:complexType name="t_road_planView_geometry_spiral">
+                        <xs:group ref="g_additionalData"/>                        
+                        <xs:attribute name="curvStart"  type="xs:double"    use="required"/>
+                        <xs:attribute name="curvEnd"    type="xs:double"    use="required"/>
+                    </xs:complexType> <!-- end t_road_planView_geometry_spiral -->
+                    
+                    <!-- 5.3.4.1.3 Geometry, Arc Record -->
+                    <xs:complexType name="t_road_planView_geometry_arc">
+                        <xs:group ref="g_additionalData"/>                        
+                        <xs:attribute name="curvature"  type="xs:double"    use="required"/>
+                    </xs:complexType> <!-- end t_road_planView_geometry_arc -->
+                    
+                    <!-- 5.3.4.1.4 Geometry, Cubic Polynomial Record -->
+                    <xs:complexType name="t_road_planView_geometry_poly3">                                         
+                        <xs:group ref="g_additionalData"/>
+                        <xs:attribute name="a"  type="xs:double"    use="required"/>
+                        <xs:attribute name="b"  type="xs:double"    use="required"/>
+                        <xs:attribute name="c"  type="xs:double"    use="required"/>
+                        <xs:attribute name="d"  type="xs:double"    use="required"/>
+                    </xs:complexType> <!-- end t_road_planView_geometry_poly3 -->
+                    
+                    <!-- 5.3.4.1.5 Geometry, Parametric Cubic Curve Record -->
+                    <xs:complexType name="t_road_planView_geometry_paramPoly3">                                         
+                        <xs:group ref="g_additionalData"/>
+                        <xs:attribute name="aU"     type="xs:double"            use="required"/>
+                        <xs:attribute name="bU"     type="xs:double"            use="required"/>
+                        <xs:attribute name="cU"     type="xs:double"            use="required"/>
+                        <xs:attribute name="dU"     type="xs:double"            use="required"/>
+                        <xs:attribute name="aV"     type="xs:double"            use="required"/>
+                        <xs:attribute name="bV"     type="xs:double"            use="required"/>
+                        <xs:attribute name="cV"     type="xs:double"            use="required"/>
+                        <xs:attribute name="dV"     type="xs:double"            use="required"/>
+                        <xs:attribute name="pRange" type="e_paramPoly3_pRange"  use="required"/>
+                    </xs:complexType> <!-- end t_road_planView_geometry_paramPoly3 -->
+                    
+                        <xs:simpleType name="e_paramPoly3_pRange">
+                            <xs:restriction base="xs:string">
+                                <xs:enumeration value="arcLength"/>
+                                <xs:enumeration value="normalized"/>
+                            </xs:restriction>
+                        </xs:simpleType> <!-- end e_paramPoly3_pRange -->
+                    
+            <!-- 5.3.5 Road Elevation Profile Record -->
+            <xs:complexType name="t_road_elevationProfile">
+                <xs:sequence>                    
+                    <xs:element name="elevation"    type="t_road_elevationProfile_elevation"    minOccurs="1"   maxOccurs="unbounded"/>
+                    <xs:group ref="g_additionalData"/>
+                </xs:sequence>
+            </xs:complexType> <!-- end t_road_elevationProfile -->
+            
+                <!-- 5.3.5.1 Road Elevation Record -->
+                <xs:complexType name="t_road_elevationProfile_elevation">
+                    <xs:group ref="g_additionalData"/>
+                    <xs:attribute name="s"  type="t_grEqZero"   use="required"/>
+                    <xs:attribute name="a"  type="xs:double"    use="required"/>
+                    <xs:attribute name="b"  type="xs:double"    use="required"/>
+                    <xs:attribute name="c"  type="xs:double"    use="required"/>
+                    <xs:attribute name="d"  type="xs:double"    use="required"/>
+                </xs:complexType> <!-- end t_road_elevationProfile_elevation -->
+                
+            <!-- 5.3.6 Road Lateral Profile Record -->
+            <xs:complexType name="t_road_lateralProfile">
+                <xs:sequence>                    
+                    <xs:element name="superelevation"   type="t_road_lateralProfile_superelevation" minOccurs="0"   maxOccurs="unbounded"/>                    
+                    <xs:element name="crossfall"        type="t_road_lateralProfile_crossfall"      minOccurs="0"   maxOccurs="unbounded"/>                    
+                    <xs:element name="shape"            type="t_road_lateralProfile_shape"          minOccurs="0"   maxOccurs="unbounded"/>
+                    <xs:group ref="g_additionalData"/>
+                </xs:sequence>
+            </xs:complexType> <!-- end t_road_lateralProfile -->
+            
+                <!-- 5.3.6.1 Road Superelevation Record -->
+                <xs:complexType name="t_road_lateralProfile_superelevation">
+                    <xs:group ref="g_additionalData"/>
+                    <xs:attribute name="s"  type="t_grEqZero"   use="required"/>
+                    <xs:attribute name="a"  type="xs:double"    use="required"/>
+                    <xs:attribute name="b"  type="xs:double"    use="required"/>
+                    <xs:attribute name="c"  type="xs:double"    use="required"/>
+                    <xs:attribute name="d"  type="xs:double"    use="required"/>
+                </xs:complexType> <!-- end t_road_lateralProfile_superelevation -->
+                
+                <!-- 5.3.6.2 Crossfall Record -->
+                <xs:complexType name="t_road_lateralProfile_crossfall">
+                    <xs:group ref="g_additionalData"/>
+                    <xs:attribute name="side"   type="e_road_lateralProfile_crossfall_side" use="required"/>
+                    <xs:attribute name="s"      type="t_grEqZero"                           use="required"/>
+                    <xs:attribute name="a"      type="xs:double"                            use="required"/>
+                    <xs:attribute name="b"      type="xs:double"                            use="required"/>
+                    <xs:attribute name="c"      type="xs:double"                            use="required"/>
+                    <xs:attribute name="d"      type="xs:double"                            use="required"/>
+                </xs:complexType> <!-- end t_road_lateralProfile_crossfall -->
+                
+                    <xs:simpleType name="e_road_lateralProfile_crossfall_side">
+                        <xs:restriction base="xs:string">
+                            <xs:enumeration value="left"/>
+                            <xs:enumeration value="right"/>
+                            <xs:enumeration value="both"/>
+                        </xs:restriction>
+                    </xs:simpleType> <!-- end e_road_lateralProfile_crossfall_side -->
+                
+                <!-- 5.3.6.3 Road Shape Record -->
+                <xs:complexType name="t_road_lateralProfile_shape">
+                    <xs:group ref="g_additionalData"/>
+                    <xs:attribute name="s"      type="t_grEqZero"   use="required"/>
+                    <xs:attribute name="t"      type="xs:double"    use="required"/>
+                    <xs:attribute name="a"      type="xs:double"    use="required"/>
+                    <xs:attribute name="b"      type="xs:double"    use="required"/>
+                    <xs:attribute name="c"      type="xs:double"    use="required"/>
+                    <xs:attribute name="d"      type="xs:double"    use="required"/>
+                </xs:complexType> <!-- end t_road_lateralProfile_shape -->
+                
+            <!-- 5.3.7 Lanes Record -->
+            <xs:complexType name="t_road_lanes">
+                <xs:sequence>
+                    <xs:element name="laneOffset"   type="t_road_lanes_laneOffset"  minOccurs="0" maxOccurs="unbounded"/>                    
+                    <xs:element name="laneSection"  type="t_road_lanes_laneSection" minOccurs="1" maxOccurs="unbounded">
+                        <xs:key name="k_road_lanes_laneSection_laneId">
+                            <xs:selector xpath="*/lane"/>
+                            <xs:field xpath="@id"/>
+                        </xs:key>
+                    </xs:element>
+                    <xs:group ref="g_additionalData"/>
+                </xs:sequence>
+            </xs:complexType> <!-- end t_road_lanes -->
+            
+                <!-- 5.3.7.1 Lane Offset Record -->
+                <xs:complexType name="t_road_lanes_laneOffset">
+                    <xs:group ref="g_additionalData"/>
+                    <xs:attribute name="s"  type="t_grEqZero"   use="required"/>
+                    <xs:attribute name="a"  type="xs:double"    use="required"/>
+                    <xs:attribute name="b"  type="xs:double"    use="required"/>
+                    <xs:attribute name="c"  type="xs:double"    use="required"/>
+                    <xs:attribute name="d"  type="xs:double"    use="required"/>
+                </xs:complexType> <!-- end t_road_lanes_laneOffset -->
+                
+                <!-- 5.3.7.2 Lane Section Record -->
+                <xs:complexType name="t_road_lanes_laneSection" >
+                    <xs:sequence>                        
+                        <xs:element name="left"     type="t_road_lanes_laneSection_left"    minOccurs="0"   maxOccurs="1"/>
+                        <xs:element name="center"   type="t_road_lanes_laneSection_center"  minOccurs="0"   maxOccurs="1"/>
+                        <xs:element name="right"    type="t_road_lanes_laneSection_right"   minOccurs="0"   maxOccurs="1"/>
+                        <xs:group ref="g_additionalData"/>
+                    </xs:sequence>                    
+                    <xs:attribute name="s"          type="t_grEqZero"   use="required"/>
+                    <xs:attribute name="singleSide" type="t_bool"       use="optional"/>
+                </xs:complexType> <!-- end t_road_lanes_laneSection -->
+                
+                    <!-- 5.3.7.2.1 Left/Center/Right Records -->
+                    <xs:complexType name="t_road_lanes_laneSection_left">
+                        <xs:sequence>            
+                            <xs:element name="lane" type="t_road_lanes_laneSection_left_lane"   minOccurs="1"   maxOccurs="unbounded"/>
+                            <xs:group ref="g_additionalData"/>
+                        </xs:sequence>
+                    </xs:complexType> <!-- end t_road_lanes_laneSection_left -->
+                    
+                    <xs:complexType name="t_road_lanes_laneSection_center">
+                        <xs:sequence>            
+                            <xs:element name="lane" type="t_road_lanes_laneSection_center_lane" minOccurs="1"   maxOccurs="unbounded"/>
+                            <xs:group ref="g_additionalData"/>
+                        </xs:sequence>
+                    </xs:complexType> <!-- end t_road_lanes_laneSection_center -->
+                    
+                    <xs:complexType name="t_road_lanes_laneSection_right">
+                        <xs:sequence>            
+                            <xs:element name="lane" type="t_road_lanes_laneSection_right_lane"  minOccurs="1"   maxOccurs="unbounded"/>
+                            <xs:group ref="g_additionalData"/>
+                        </xs:sequence>
+                    </xs:complexType> <!-- end t_road_lanes_laneSection_right -->
+                    
+                        <!-- 5.3.7.2.1.1 Lane Record -->
+                        <xs:complexType name="t_road_lanes_laneSection_center_lane">
+                            <xs:sequence>                
+                                <xs:element name="link"         type="t_road_lanes_laneSection_lcr_lane_link"       minOccurs="0"   maxOccurs="1"/>
+                                <xs:element name="roadMark"     type="t_road_lanes_laneSection_lcr_lane_roadMark"   minOccurs="0"   maxOccurs="unbounded"/>                                    
+                                <xs:group ref="g_additionalData"/>
+                            </xs:sequence>            
+                            <xs:attribute name="id"     type="xs:integer"   fixed="0"   use="required"/>
+                            <xs:attribute name="type"   type="e_laneType"               use="required"/>
+                            <xs:attribute name="level"  type="t_bool"                   use="optional"/>
+                        </xs:complexType> <!-- end t_road_lanes_laneSection_center_lane -->
+                                                
+                        <xs:complexType name="t_road_lanes_laneSection_lr_lane">
+                            <xs:sequence>                
+                                <xs:element name="link"         type="t_road_lanes_laneSection_lcr_lane_link"       minOccurs="0"   maxOccurs="1"/>
+                                <xs:choice maxOccurs="unbounded">
+                                    <xs:element name="width"        type="t_road_lanes_laneSection_lr_lane_width"   minOccurs="1"   maxOccurs="unbounded"/>
+                                    <xs:element name="border"       type="t_road_lanes_laneSection_lr_lane_border"  minOccurs="1"   maxOccurs="unbounded"/>
+                                </xs:choice>
+                                <xs:element name="roadMark"     type="t_road_lanes_laneSection_lcr_lane_roadMark"   minOccurs="0"   maxOccurs="unbounded"/>                                    
+                                <xs:element name="material"     type="t_road_lanes_laneSection_lr_lane_material"    minOccurs="0"   maxOccurs="unbounded"/>                
+                                <xs:element name="visibility"   type="t_road_lanes_laneSection_lr_lane_visibility"  minOccurs="0"   maxOccurs="unbounded"/>                
+                                <xs:element name="speed"        type="t_road_lanes_laneSection_lr_lane_speed"       minOccurs="0"   maxOccurs="unbounded"/>                
+                                <xs:element name="access"       type="t_road_lanes_laneSection_lr_lane_access"      minOccurs="0"   maxOccurs="unbounded"/>                
+                                <xs:element name="height"       type="t_road_lanes_laneSection_lr_lane_height"      minOccurs="0"   maxOccurs="unbounded"/>                     
+                                <xs:element name="rule"         type="t_road_lanes_laneSection_lr_lane_rule"        minOccurs="0"   maxOccurs="unbounded"/>                
+                                <xs:group ref="g_additionalData"/>
+                            </xs:sequence>            
+                            <xs:attribute name="type"   type="e_laneType"   use="required"/>
+                            <xs:attribute name="level"  type="t_bool"       use="optional"/>
+                        </xs:complexType> <!-- end t_road_lanes_laneSection_lr_lane -->                        
+                        
+                        <xs:complexType name="t_road_lanes_laneSection_left_lane">
+                            <xs:complexContent>
+                                <xs:extension base="t_road_lanes_laneSection_lr_lane">
+                                    <xs:attribute name="id" type="xs:positiveInteger"   use="required"/>
+                                </xs:extension>
+                            </xs:complexContent>
+                        </xs:complexType> <!-- end t_road_lanes_laneSection_left_lane -->
+                        
+                        <xs:complexType name="t_road_lanes_laneSection_right_lane">
+                            <xs:complexContent>
+                                <xs:extension base="t_road_lanes_laneSection_lr_lane">
+                                    <xs:attribute name="id" type="xs:negativeInteger"   use="required"/>
+                                </xs:extension>
+                            </xs:complexContent>
+                        </xs:complexType> <!-- end t_road_lanes_laneSection_right_lane -->
+                    
+                            <!-- 5.3.7.2.1.1.1 Lane Link Record -->
+                            <xs:complexType name="t_road_lanes_laneSection_lcr_lane_link">
+                                <xs:sequence>
+                                    <xs:element name="predecessor"  type="t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor"  minOccurs="0"   maxOccurs="unbounded"/>
+                                    <xs:element name="successor"    type="t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor"  minOccurs="0"   maxOccurs="unbounded"/>
+                                    <xs:group ref="g_additionalData"/>
+                                </xs:sequence>
+                            </xs:complexType> <!-- end t_road_lanes_laneSection_lcr_lane_link -->
+                            
+                                <!-- 5.3.7.2.1.1.1.1 Lane Predecessor, 5.3.7.2.1.1.1.2 Lane Successor -->
+                                <xs:complexType name="t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor">
+                                    <xs:group ref="g_additionalData"/>        
+                                    <xs:attribute name="id" type="xs:integer"   use="required"/>
+                                </xs:complexType> <!-- end t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor -->
+
+                            <!-- 5.3.7.2.1.1.2 Lane Width Record -->
+                            <xs:complexType name="t_road_lanes_laneSection_lr_lane_width">
+                                <xs:group ref="g_additionalData"/>
+                                <xs:attribute name="sOffset"    type="t_grEqZero"   use="required"/>
+                                <xs:attribute name="a"          type="xs:double"    use="required"/>
+                                <xs:attribute name="b"          type="xs:double"    use="required"/>
+                                <xs:attribute name="c"          type="xs:double"    use="required"/>
+                                <xs:attribute name="d"          type="xs:double"    use="required"/>
+                            </xs:complexType> <!-- end t_road_lanes_laneSection_lr_lane_width -->
+                            
+                            <!-- 5.3.7.2.1.1.3 Lane Border Record -->
+                            <xs:complexType name="t_road_lanes_laneSection_lr_lane_border">
+                                <xs:group ref="g_additionalData"/>
+                                <xs:attribute name="sOffset"    type="t_grEqZero"   use="required"/>
+                                <xs:attribute name="a"          type="xs:double"    use="required"/>
+                                <xs:attribute name="b"          type="xs:double"    use="required"/>
+                                <xs:attribute name="c"          type="xs:double"    use="required"/>
+                                <xs:attribute name="d"          type="xs:double"    use="required"/>
+                            </xs:complexType> <!-- end t_road_lanes_laneSection_lr_lane_border -->
+                            
+                            <!-- 5.3.7.2.1.1.4 Road Mark Record -->
+                            <xs:complexType name="t_road_lanes_laneSection_lcr_lane_roadMark">
+                                <xs:sequence>                    
+                                    <xs:element name="sway"     type="t_road_lanes_laneSection_lcr_lane_roadMark_sway"      minOccurs="0"   maxOccurs="unbounded"/>                    
+                                    <xs:element name="type"     type="t_road_lanes_laneSection_lcr_lane_roadMark_type"      minOccurs="0"   maxOccurs="1"/>                        
+                                    <xs:element name="explicit" type="t_road_lanes_laneSection_lcr_lane_roadMark_explicit"  minOccurs="0"   maxOccurs="1"/>                    
+                                    <xs:group ref="g_additionalData"/>
+                                </xs:sequence>                
+                                <xs:attribute name="sOffset"        type="t_grEqZero"                                               use="required"/>
+                                <xs:attribute name="type"           type="e_roadMarkType"                                           use="required"/>
+                                <xs:attribute name="weight"         type="e_roadMarkWeight"                                         use="optional"/>
+                                <xs:attribute name="color"          type="e_roadMarkColor"                                          use="required"/>
+                                <xs:attribute name="material"       type="xs:string"                                                use="optional"/>
+                                <xs:attribute name="width"          type="t_grEqZero"                                               use="optional"/>
+                                <xs:attribute name="laneChange"     type="e_road_lanes_laneSection_lcr_lane_roadMark_laneChange"    use="optional"/>
+                                <xs:attribute name="height"         type="xs:double"                                                use="optional"/>
+                            </xs:complexType> <!-- end t_road_lanes_laneSection_lcr_lane_roadMark -->
+                            
+                                <xs:simpleType name="e_road_lanes_laneSection_lcr_lane_roadMark_laneChange">
+                                    <xs:restriction base="xs:string">
+                                        <xs:enumeration value="increase"/>
+                                        <xs:enumeration value="decrease"/>
+                                        <xs:enumeration value="both"/>
+                                        <xs:enumeration value="none"/>
+                                    </xs:restriction>
+                                </xs:simpleType> <!-- end e_road_lanes_laneSection_lcr_lane_roadMark_laneChange -->
+                            
+                                <!-- 5.3.7.2.1.1.4.1 Road Mark - Sway Definition (new in OpenDrive 1.5M) -->
+                                <xs:complexType name="t_road_lanes_laneSection_lcr_lane_roadMark_sway">
+                                    <xs:group ref="g_additionalData"/>
+                                    <xs:attribute name="ds" type="t_grEqZero"   use="required"/>
+                                    <xs:attribute name="a"  type="xs:double"    use="required"/>
+                                    <xs:attribute name="b"  type="xs:double"    use="required"/>
+                                    <xs:attribute name="c"  type="xs:double"    use="required"/>
+                                    <xs:attribute name="d"  type="xs:double"    use="required"/>
+                                </xs:complexType> <!-- end t_road_lanes_laneSection_lcr_lane_roadMark_sway -->
+                                
+                                <!-- 5.3.7.2.1.1.4.2 Road Mark Type -->
+                                <xs:complexType name="t_road_lanes_laneSection_lcr_lane_roadMark_type">
+                                    <xs:sequence>
+                                        <xs:element name="line" type="t_road_lanes_laneSection_lcr_lane_roadMark_type_line" minOccurs="1"   maxOccurs="unbounded"/>
+                                        <xs:group ref="g_additionalData"/>
+                                    </xs:sequence>                    
+                                    <xs:attribute name="name"   type="xs:string"    use="required"/>
+                                    <xs:attribute name="width"  type="t_grEqZero"   use="required"/>
+                                </xs:complexType> <!-- end t_road_lanes_laneSection_lcr_lane_roadMark_type -->
+                                
+                                    <!-- 5.3.7.2.1.1.4.2.1 Road Mark Type - Line Definition -->
+                                    <xs:complexType name="t_road_lanes_laneSection_lcr_lane_roadMark_type_line">
+                                        <xs:group ref="g_additionalData"/>
+                                        <xs:attribute name="length"     type="t_grEqZero"       use="required"/>
+                                        <xs:attribute name="space"      type="t_grEqZero"       use="required"/>
+                                        <xs:attribute name="tOffset"    type="xs:double"        use="required"/>
+                                        <xs:attribute name="sOffset"    type="t_grEqZero"       use="required"/>
+                                        <xs:attribute name="rule"       type="e_roadMarkRule"   use="optional"/>
+                                        <xs:attribute name="width"      type="t_grEqZero"       use="required"/>
+                                        <xs:attribute name="color"      type="e_roadMarkColor"  use="optional"/> <!-- new in OpenDrive 1.5M -->
+                                    </xs:complexType> <!-- end t_road_lanes_laneSection_lcr_lane_roadMark_type_line -->
+                                    
+                                <!-- 5.3.7.2.1.1.4.3 Explicit Road Mark Definition (new in OpenDrive 1.5M) -->
+                                <xs:complexType name="t_road_lanes_laneSection_lcr_lane_roadMark_explicit">
+                                    <xs:sequence>
+                                        <xs:element name="line" type="t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line" minOccurs="1"   maxOccurs="unbounded"/>
+                                        <xs:group ref="g_additionalData"/>
+                                    </xs:sequence>
+                                </xs:complexType> <!-- end t_road_lanes_laneSection_lcr_lane_roadMark_explicit -->
+                                
+                                    <!-- 5.3.7.2.1.1.4.3.1 Explicit Road Mark Definition - Line Entry (new in OpenDrive 1.5M) -->
+                                    <xs:complexType name="t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line">
+                                        <xs:group ref="g_additionalData"/>
+                                        <xs:attribute name="length"     type="t_grEqZero"       use="required"/>
+                                        <xs:attribute name="tOffset"    type="xs:double"        use="required"/>
+                                        <xs:attribute name="sOffset"    type="t_grEqZero"       use="required"/>
+                                        <xs:attribute name="rule"       type="e_roadMarkRule"   use="optional"/>
+                                        <xs:attribute name="width"      type="t_grEqZero"       use="required"/>
+                                    </xs:complexType> <!-- end t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line -->
+                                    
+                            <!-- 5.3.7.2.1.1.5 Lane Material Record -->
+                            <xs:complexType name="t_road_lanes_laneSection_lr_lane_material">                                         
+                                <xs:group ref="g_additionalData"/>
+                                <xs:attribute name="sOffset"    type="t_grEqZero"   use="required"/>
+                                <xs:attribute name="surface"    type="xs:string"    use="optional"/>
+                                <xs:attribute name="friction"   type="t_grEqZero"   use="required"/>
+                                <xs:attribute name="roughness"  type="t_grEqZero"   use="optional"/>
+                            </xs:complexType> <!-- end t_road_lanes_laneSection_lr_lane_material -->
+                            
+                            <!-- 5.3.7.2.1.1.6 Lane Visibility Record -->
+                            <xs:complexType name="t_road_lanes_laneSection_lr_lane_visibility">
+                                <xs:group ref="g_additionalData"/>
+                                <xs:attribute name="sOffset"    type="t_grEqZero"   use="required"/>
+                                <xs:attribute name="forward"    type="t_grEqZero"   use="required"/>
+                                <xs:attribute name="back"       type="t_grEqZero"   use="required"/>
+                                <xs:attribute name="left"       type="t_grEqZero"   use="required"/>
+                                <xs:attribute name="right"      type="t_grEqZero"   use="required"/>
+                            </xs:complexType> <!-- end t_road_lanes_laneSection_lr_lane_visibility -->
+                            
+                            <!-- 5.3.7.2.1.1.7 Lane Speed Record -->
+                            <xs:complexType name="t_road_lanes_laneSection_lr_lane_speed">
+                                <xs:group ref="g_additionalData"/>
+                                <xs:attribute name="sOffset"    type="t_grEqZero"   use="required"/>
+                                <xs:attribute name="max"        type="t_grEqZero"   use="required"/>
+                                <xs:attribute name="unit"       type="e_unitSpeed"  use="optional"/>
+                            </xs:complexType> <!-- end t_road_lanes_laneSection_lr_lane_speed -->
+                            
+                            <!-- 5.3.7.2.1.1.8 Lane Access Record -->
+                            <xs:complexType name="t_road_lanes_laneSection_lr_lane_access" >
+                                <xs:group ref="g_additionalData"/>
+                                <xs:attribute name="sOffset"        type="t_grEqZero"                                   use="required"/>
+                                <xs:attribute name="rule"           type="e_road_lanes_laneSection_lr_lane_access_rule" use="required"/> <!-- new in OpenDrive 1.5M -->
+                                <xs:attribute name="restriction"    type="e_accessRestrictionType"                      use="required"/>
+                            </xs:complexType> <!-- end t_road_lanes_laneSection_lr_lane_access -->
+                            
+                                <xs:simpleType name="e_road_lanes_laneSection_lr_lane_access_rule">
+                                    <xs:restriction base="xs:string">
+                                        <xs:enumeration value="allow"/>
+                                        <xs:enumeration value="deny"/>
+                                    </xs:restriction>
+                                </xs:simpleType> <!-- end e_road_lanes_laneSection_lr_lane_access_rule -->
+                            
+                            <!-- 5.3.7.2.1.1.9 Lane Height Record -->
+                            <xs:complexType name="t_road_lanes_laneSection_lr_lane_height">
+                                <xs:group ref="g_additionalData"/>
+                                <xs:attribute name="sOffset"    type="t_grEqZero"   use="required"/>
+                                <xs:attribute name="inner"      type="xs:double"    use="required"/>
+                                <xs:attribute name="outer"      type="xs:double"    use="required"/>
+                            </xs:complexType> <!-- end t_road_lanes_laneSection_lr_lane_height -->
+                            
+                            <!-- 5.3.7.2.1.1.10 Lane Rule Record -->
+                            <xs:complexType name="t_road_lanes_laneSection_lr_lane_rule">
+                                <xs:group ref="g_additionalData"/>
+                                <xs:attribute name="sOffset"    type="t_grEqZero"   use="required"/>
+                                <xs:attribute name="value"      type="xs:string"    use="required"/>
+                            </xs:complexType> <!-- end t_road_lanes_laneSection_lr_lane_rule -->
+                
+            <!-- 5.3.8 Road Objects Record -->
+            <xs:complexType name="t_road_objects">
+                <xs:sequence>
+                    <xs:element name="object"           type="t_road_objects_object"            minOccurs="0" maxOccurs="unbounded">
+                        <xs:key name="k_road_objects_object_outlineId">
+                            <xs:selector xpath="outline"/>
+                            <xs:field xpath="@id"/>
+                        </xs:key>
+                        <xs:keyref name="r_road_objects_object_outline_cornerRoad" refer="k_road_objects_object_outlineId">
+                            <xs:selector xpath="outline/cornerRoad"/>
+                            <xs:field xpath="@id"/>
+                        </xs:keyref>
+                        <xs:keyref name="r_road_objects_object_outline_cornerLocal" refer="k_road_objects_object_outlineId">
+                            <xs:selector xpath="outline/cornerLocal"/>
+                            <xs:field xpath="@id"/>
+                        </xs:keyref>
+                        <xs:keyref name="r_road_objects_object_borders_border" refer="k_road_objects_object_outlineId">
+                            <xs:selector xpath="borders/border"/>
+                            <xs:field xpath="@outlineId"/>
+                        </xs:keyref>
+                    </xs:element>
+                    <xs:element name="objectReference"  type="t_road_objects_objectReference"   minOccurs="0" maxOccurs="unbounded"/>                    
+                    <xs:element name="tunnel"           type="t_road_objects_tunnel"            minOccurs="0" maxOccurs="unbounded"/>                    
+                    <xs:element name="bridge"           type="t_road_objects_bridge"            minOccurs="0" maxOccurs="unbounded"/>                    
+                    <xs:group ref="g_additionalData"/>
+                </xs:sequence>
+            </xs:complexType> <!-- end t_road_objects -->
+            
+                <!-- 5.3.8.1 Object Record -->
+                <xs:complexType name="t_road_objects_object">
+                    <xs:sequence>                        
+                        <xs:element name="repeat"       type="t_road_objects_object_repeat"             minOccurs="0"   maxOccurs="1"/>
+                        <xs:element name="outline"      type="t_road_objects_object_outlines_outline"   minOccurs="0"   maxOccurs="1"/> <!-- support for OpenDrive 1.4 -->
+                        <xs:element name="outlines"     type="t_road_objects_object_outlines"           minOccurs="0"   maxOccurs="1"/>
+                        <xs:element name="material"     type="t_road_objects_object_material"           minOccurs="0"   maxOccurs="unbounded"/>                        
+                        <xs:element name="validity"     type="t_road_objects_object_laneValidity"       minOccurs="0"   maxOccurs="unbounded"/>                        
+                        <xs:element name="parkingSpace" type="t_road_objects_object_parkingSpace"       minOccurs="0"   maxOccurs="1"/>                        
+                        <xs:element name="markings"     type="t_road_objects_object_markings"           minOccurs="0"   maxOccurs="1"/>                        
+                        <xs:element name="borders"      type="t_road_objects_object_borders"            minOccurs="0"   maxOccurs="1"/>
+                        <xs:group ref="g_additionalData"/>
+                    </xs:sequence>                    
+                    <xs:attribute name="type"           type="e_objectType"     use="optional"/>
+                    <xs:attribute name="subtype"        type="xs:string"        use="optional"/> <!-- new in OpenDrive 1.5M -->
+                    <xs:attribute name="dynamic"        type="t_yesNo"          use="required"/> <!-- new in OpenDrive 1.5M -->
+                    <xs:attribute name="name"           type="xs:string"        use="optional"/>
+                    <xs:attribute name="id"             type="xs:string"        use="required"/>
+                    <xs:attribute name="s"              type="t_grEqZero"       use="required"/>
+                    <xs:attribute name="t"              type="xs:double"        use="required"/>
+                    <xs:attribute name="zOffset"        type="xs:double"        use="required"/>
+                    <xs:attribute name="validLength"    type="t_grEqZero"       use="required"/>
+                    <xs:attribute name="orientation"    type="e_orientation"    use="required"/>
+                    <xs:attribute name="hdg"            type="xs:double"        use="required"/>
+                    <xs:attribute name="pitch"          type="xs:double"        use="required"/>
+                    <xs:attribute name="roll"           type="xs:double"        use="required"/>
+                    <xs:attribute name="height"         type="xs:double"        use="required"/>
+                    <!-- <xs:attributeGroup> --> <!-- variant 1 -->
+                        <xs:attribute name="length"     type="xs:double"        use="optional"/>
+                        <xs:attribute name="width"      type="xs:double"        use="optional"/>
+                    <!-- </xs:attributeGroup> -->
+                    <!-- <xs:attributeGroup> --> <!-- variant 2 (new in OpenDrive 1.5M) -->
+                        <xs:attribute name="radius"     type="xs:double"        use="optional"/>
+                    <!-- </xs:attributeGroup> -->
+                </xs:complexType> <!-- end t_road_objects_object -->
+                
+                    <!-- 5.3.8.1.1 Object Repeat Record -->
+                    <xs:complexType name="t_road_objects_object_repeat">                                         
+                        <xs:group ref="g_additionalData"/>
+                        <xs:attribute name="s"                  type="t_grEqZero"   use="required"/>
+                        <xs:attribute name="length"             type="t_grEqZero"   use="required"/>
+                        <xs:attribute name="distance"           type="t_grEqZero"   use="required"/>
+                        <xs:attribute name="tStart"             type="xs:double"    use="required"/>
+                        <xs:attribute name="tEnd"               type="xs:double"    use="required"/>
+                        <xs:attribute name="heightStart"        type="xs:double"    use="required"/>
+                        <xs:attribute name="heightEnd"          type="xs:double"    use="required"/>
+                        <xs:attribute name="zOffsetStart"       type="xs:double"    use="required"/>
+                        <xs:attribute name="zOffsetEnd"         type="xs:double"    use="required"/>
+                        <xs:attribute name="widthStart"         type="t_grEqZero"   use="required"/>
+                        <xs:attribute name="widthEnd"           type="t_grEqZero"   use="required"/>
+                        <!-- <xs:attributeGroup> --> <!-- variant 1 -->
+                            <xs:attribute name="lengthStart"    type="t_grEqZero"   use="optional"/>
+                            <xs:attribute name="lengthEnd"      type="t_grEqZero"   use="optional"/>
+                        <!-- </xs:attributeGroup> -->
+                            <!-- <xs:attributeGroup> --> <!-- variant 2 -->
+                            <xs:attribute name="radiusStart"    type="t_grEqZero"   use="optional"/>
+                            <xs:attribute name="radiusEnd"      type="t_grEqZero"   use="optional"/>
+                        <!-- </xs:attributeGroup> -->
+                    </xs:complexType> <!-- end t_road_objects_object_repeat -->
+                    
+                    <!-- 5.3.8.1.2 Outlines Record (new in OpenDrive 1.5M) -->
+                    <xs:complexType name="t_road_objects_object_outlines">
+                        <xs:sequence>
+                            <xs:element name="outline" type="t_road_objects_object_outlines_outline" minOccurs="1" maxOccurs="unbounded"/>
+                            <xs:group ref="g_additionalData"/>
+                        </xs:sequence>
+                    </xs:complexType> <!-- end t_road_objects_object_outlines -->
+                    
+                        <!-- 5.3.8.1.2.1 Object Outline Record (new in OpenDrive 1.5M) -->
+                        <xs:complexType name="t_road_objects_object_outlines_outline">
+                            <xs:sequence>                                
+                                <xs:element name="cornerRoad"   type="t_road_objects_object_outlines_outline_cornerRoad"    minOccurs="0"   maxOccurs="unbounded"/>                                
+                                <xs:element name="cornerLocal"  type="t_road_objects_object_outlines_outline_cornerLocal"   minOccurs="0"   maxOccurs="unbounded"/>
+                                <xs:group ref="g_additionalData"/>
+                            </xs:sequence>
+                            
+                            <xs:attribute name="id"         type="xs:nonNegativeInteger"    use="required"/>
+                            <xs:attribute name="fillType"   type="e_outlineFillType"        use="required"/>
+                            <xs:attribute name="outer"      type="t_bool"                   use="required"/>
+                            <xs:attribute name="closed"     type="t_bool"                   use="required"/>
+                            <xs:attribute name="laneType"   type="e_laneType"               use="required"/>
+                        </xs:complexType> <!-- end t_road_objects_object_outlines_outline -->
+                        
+                            <!-- 5.3.8.1.2.1.1 CornerRoad -->
+                            <xs:complexType name="t_road_objects_object_outlines_outline_cornerRoad">
+                                <xs:group ref="g_additionalData"/>
+                                <xs:attribute name="s"      type="t_grEqZero"               use="required"/>
+                                <xs:attribute name="t"      type="xs:double"                use="required"/>
+                                <xs:attribute name="dz"     type="xs:double"                use="required"/>
+                                <xs:attribute name="height" type="xs:double"                use="required"/>
+                                <xs:attribute name="id"     type="xs:nonNegativeInteger"    use="required"/> <!-- new in OpenDrive 1.5M -->
+                            </xs:complexType> <!-- end t_road_objects_object_outlines_outline_cornerRoad -->
+                            
+                            <!-- 5.3.8.1.2.1.2 CornerLocal -->
+                            <xs:complexType name="t_road_objects_object_outlines_outline_cornerLocal">                                         
+                                <xs:group ref="g_additionalData"/>
+                                <xs:attribute name="u"      type="xs:double"        use="required"/>
+                                <xs:attribute name="v"      type="xs:double"        use="required"/>
+                                <xs:attribute name="z"      type="xs:double"        use="required"/>
+                                <xs:attribute name="height" type="xs:double"        use="required"/>
+                                <xs:attribute name="id"     type="xs:nonNegativeInteger"    use="required"/> <!-- new in OpenDrive 1.5M -->
+                            </xs:complexType> <!-- end t_road_objects_object_outlines_outline_cornerLocal -->
+                            
+                    <!-- 5.3.8.1.3 Object Material Record -->
+                    <xs:complexType name="t_road_objects_object_material">                                         
+                        <xs:group ref="g_additionalData"/>
+                        <xs:attribute name="surface"    type="xs:string"    use="optional"/>
+                        <xs:attribute name="friction"   type="t_grEqZero"   use="optional"/>
+                        <xs:attribute name="roughness"  type="t_grEqZero"   use="optional"/>
+                    </xs:complexType> <!-- end t_road_objects_object_material -->
+                    
+                    <!-- 5.3.8.1.4 Lane Validity Record -->
+                    <xs:complexType name="t_road_objects_object_laneValidity">
+                        <xs:group ref="g_additionalData"/>
+                        <xs:attribute name="fromLane"   type="xs:integer"   use="required"/>
+                        <xs:attribute name="toLane"     type="xs:integer"   use="required"/>
+                    </xs:complexType> <!-- end t_road_objects_object_laneValidity -->
+                    
+                    <!-- 5.3.8.1.5 Parking Space Record -->
+                    <xs:complexType name="t_road_objects_object_parkingSpace">
+                        <xs:group ref="g_additionalData"/>
+                        <xs:attribute name="access"         type="e_road_objects_object_parkingSpace_access"    use="required"/>
+                        <xs:attribute name="restrictions"   type="xs:string"                                    use="optional"/>
+                    </xs:complexType> <!-- end t_road_objects_object_parkingSpace -->
+                    
+                        <xs:simpleType name="e_road_objects_object_parkingSpace_access">
+                            <xs:restriction base="xs:string">
+                                <xs:enumeration value="all"/>
+                                <xs:enumeration value="car"/>
+                                <xs:enumeration value="women"/>
+                                <xs:enumeration value="handicapped"/>
+                                <xs:enumeration value="bus"/>
+                                <xs:enumeration value="truck"/>
+                                <xs:enumeration value="electric"/>
+                                <xs:enumeration value="residents"/>
+                            </xs:restriction>
+                        </xs:simpleType> <!-- end e_road_objects_object_parkingSpace_access -->
+                    
+                    <!-- 5.3.8.1.6 Markings Record (new in OpenDrive 1.5M) -->
+                    <xs:complexType name="t_road_objects_object_markings">
+                        <xs:sequence>
+                            <xs:element name="marking" type="t_road_objects_object_markings_marking"    minOccurs="1"   maxOccurs="unbounded"/>                                
+                            <xs:group ref="g_additionalData"/>
+                        </xs:sequence>
+                    </xs:complexType> <!-- end t_road_objects_object_markings -->
+                    
+                        <!-- 5.3.8.1.6.1 Marking Record (new in OpenDrive 1.5M) -->
+                        <xs:complexType name="t_road_objects_object_markings_marking">
+                            <xs:sequence>                                
+                                <xs:element name="cornerReference" type="t_road_objects_object_markings_marking_cornerReference" minOccurs="2" maxOccurs="unbounded"/>        
+                                <xs:group ref="g_additionalData"/>
+                            </xs:sequence>                            
+                            <xs:attribute name="side"           type="e_sideType"       use="required"/>
+                            <xs:attribute name="weight"         type="e_roadMarkWeight" use="required"/>
+                            <xs:attribute name="width"          type="t_grEqZero"       use="optional"/>
+                            <xs:attribute name="color"          type="e_roadMarkColor"  use="required"/>
+                            <xs:attribute name="zOffset"        type="t_grEqZero"       use="optional"/>
+                            <xs:attribute name="spaceLength"    type="t_grEqZero"       use="required"/>
+                            <xs:attribute name="lineLength"     type="t_grEqZero"       use="required"/>
+                            <xs:attribute name="startOffset"    type="xs:double"        use="required"/>
+                            <xs:attribute name="stopOffset"     type="xs:double"        use="required"/>
+                        </xs:complexType> <!-- end t_road_objects_object_markings_marking -->
+                        
+                            <!-- 5.3.8.1.6.1.1 Corner Reference Record -->
+                            <xs:complexType name="t_road_objects_object_markings_marking_cornerReference">
+                                <xs:group ref="g_additionalData"/>
+                                <xs:attribute name="id" type="xs:nonNegativeInteger"    use="required"/>
+                            </xs:complexType> <!-- end t_road_objects_object_markings_marking_cornerReference -->
+                        
+                    <!-- 5.3.8.1.7 Borders Record (new in OpenDrive 1.5M) -->
+                    <xs:complexType name="t_road_objects_object_borders">
+                        <xs:sequence>
+                            <xs:element name="border"   type="t_road_objects_object_borders_border" minOccurs="1"   maxOccurs="unbounded"/>
+                            <xs:group ref="g_additionalData"/>
+                        </xs:sequence>
+                    </xs:complexType> <!-- end t_road_objects_object_borders -->
+                    
+                        <!-- 5.3.8.1.7.1 Border Record (new in OpenDrive 1.5M) -->
+                        <xs:complexType name="t_road_objects_object_borders_border">
+                            <xs:sequence>
+                                <xs:element name="cornerReference" type="t_road_objects_object_markings_marking_cornerReference" minOccurs="2" maxOccurs="unbounded"/>
+                                <xs:group ref="g_additionalData"/>
+                            </xs:sequence>                            
+                            <xs:attribute name="width"              type="t_grEqZero"               use="required"/>
+                            <xs:attribute name="type"               type="e_borderType"             use="required"/>
+                            <xs:attribute name="outlineId"          type="xs:nonNegativeInteger"    use="required"/>
+                            <xs:attribute name="useCompleteOutline" type="t_bool"                   use="optional"/>
+                        </xs:complexType> <!-- end t_road_objects_object_borders_border -->
+                        
+                <!-- 5.3.8.2 Object Reference Record -->
+                <xs:complexType name="t_road_objects_objectReference">
+                    <xs:sequence>
+                        <xs:element name="validity" type="t_road_objects_object_laneValidity" minOccurs="0" maxOccurs="unbounded"/>
+                        <xs:group ref="g_additionalData"/>
+                    </xs:sequence>                    
+                    <xs:attribute name="s"              type="t_grEqZero"       use="required"/>
+                    <xs:attribute name="t"              type="xs:double"        use="required"/>
+                    <xs:attribute name="id"             type="xs:string"        use="required"/>
+                    <xs:attribute name="zOffset"        type="xs:double"        use="required"/>
+                    <xs:attribute name="validLength"    type="t_grEqZero"       use="required"/>
+                    <xs:attribute name="orientation"    type="e_orientation"    use="required"/>
+                </xs:complexType> <!-- end t_road_objects_objectReference -->
+                
+                <!-- 5.3.8.3 Tunnel Record -->
+                <xs:complexType name="t_road_objects_tunnel">
+                    <xs:sequence>
+                        <xs:element name="validity" type="t_road_objects_object_laneValidity" minOccurs="0" maxOccurs="unbounded"/>                                                
+                        <xs:group ref="g_additionalData"/>
+                    </xs:sequence>                    
+                    <xs:attribute name="s"          type="t_grEqZero"   use="required"/>
+                    <xs:attribute name="length"     type="t_grEqZero"   use="required"/>
+                    <xs:attribute name="name"       type="xs:string"    use="optional"/>
+                    <xs:attribute name="id"         type="xs:string"    use="required"/>
+                    <xs:attribute name="type"       type="e_tunnelType" use="required"/>
+                    <xs:attribute name="lighting"   type="t_zeroOne"    use="optional"/>
+                    <xs:attribute name="daylight"   type="t_zeroOne"    use="optional"/>
+                </xs:complexType> <!-- end t_road_objects_tunnel -->
+                    
+                <!-- 5.3.8.4 Bridge Record -->
+                <xs:complexType name="t_road_objects_bridge">
+                    <xs:sequence>
+                        <xs:element name="validity" type="t_road_objects_object_laneValidity" minOccurs="0" maxOccurs="unbounded"/>
+                        <xs:group ref="g_additionalData"/>
+                    </xs:sequence>                    
+                    <xs:attribute name="s"          type="t_grEqZero"   use="required"/>
+                    <xs:attribute name="length"     type="t_grEqZero"   use="required"/>
+                    <xs:attribute name="name"       type="xs:string"    use="optional"/>
+                    <xs:attribute name="id"         type="xs:string"    use="required"/>
+                    <xs:attribute name="type"       type="e_bridgeType" use="required"/>
+                </xs:complexType> <!-- end t_road_objects_bridge -->
+                
+            <!-- 5.3.9 Road Signals Record -->
+            <xs:complexType name="t_road_signals">
+                <xs:sequence>                    
+                    <xs:element name="signal"           type="t_road_signals_signal"            minOccurs="0"   maxOccurs="unbounded"/>                    
+                    <xs:element name="signalReference"  type="t_road_signals_signalReference"   minOccurs="0"   maxOccurs="unbounded"/>                    
+                    <xs:group ref="g_additionalData"/>
+                </xs:sequence>
+            </xs:complexType> <!-- end t_road_signals -->
+            
+                <!-- 5.3.9.1 Signal Record -->
+                <xs:complexType name="t_road_signals_signal">
+                    <xs:sequence>                        
+                        <xs:element name="validity"     type="t_road_objects_object_laneValidity"   minOccurs="0"   maxOccurs="unbounded"/>
+                        <xs:element name="dependency"   type="t_road_signals_signal_dependency"     minOccurs="0"   maxOccurs="unbounded"/>                        
+                        <xs:element name="reference"    type="t_road_signals_signal_reference"      minOccurs="0"   maxOccurs="unbounded"/>                        
+                        <xs:choice minOccurs="0">
+                            <xs:element name="positionRoad"     type="t_road_signals_signal_positionRoad"/>
+                            <xs:element name="positionInertial" type="t_road_signals_signal_positionInertial"/>
+                        </xs:choice>                                                
+                        <xs:group ref="g_additionalData"/>
+                    </xs:sequence>                    
+                    <xs:attribute name="s"                  type="t_grEqZero"       use="required"/>
+                    <xs:attribute name="t"                  type="xs:double"        use="required"/>
+                    <xs:attribute name="id"                 type="xs:string"        use="required"/>
+                    <xs:attribute name="name"               type="xs:string"        use="optional"/>
+                    <xs:attribute name="dynamic"            type="t_yesNo"          use="required"/>
+                    <xs:attribute name="orientation"        type="e_orientation"    use="required"/>
+                    <xs:attribute name="zOffset"            type="xs:double"        use="required"/>
+                    <xs:attribute name="country"            type="e_countryCode"    use="optional"/>
+                    <xs:attribute name="countryRevision"    type="xs:string"        use="optional"/> <!-- new in OpenDrive 1.5M -->
+                    <xs:attribute name="type"               type="xs:string"        use="required"/>
+                    <xs:attribute name="subtype"            type="xs:string"        use="required"/>
+                    <xs:attribute name="value"              type="xs:double"        use="optional"/>
+                    <xs:attribute name="unit"               type="e_unit"           use="optional"/>
+                    <xs:attribute name="height"             type="t_grEqZero"       use="required"/>
+                    <xs:attribute name="width"              type="t_grEqZero"       use="required"/>
+                    <xs:attribute name="text"               type="xs:string"        use="optional"/>
+                    <xs:attribute name="hOffset"            type="xs:double"        use="optional"/>
+                    <xs:attribute name="pitch"              type="xs:double"        use="optional"/>
+                    <xs:attribute name="roll"               type="xs:double"        use="optional"/>
+                </xs:complexType> <!-- end t_road_signals_signal -->
+                
+                    <!-- 5.3.9.1.2 Signal Dependency Record -->
+                    <xs:complexType name="t_road_signals_signal_dependency">
+                        <xs:group ref="g_additionalData"/>
+                        <xs:attribute name="id"     type="xs:string"        use="required"/>
+                        <xs:attribute name="type"   type="xs:string"        use="optional"/>
+                    </xs:complexType> <!-- end t_road_signals_signal_dependency -->
+                    
+                    <!-- 5.3.9.1.3 Reference Record (new in OpenDrive 1.5M) -->
+                    <xs:complexType name="t_road_signals_signal_reference">
+                        <xs:group ref="g_additionalData"/>
+                        <xs:attribute name="elementType"    type="e_road_signals_signal_reference_elementType"  use="required"/>
+                        <xs:attribute name="elementId"      type="xs:string"                                    use="required"/>
+                        <xs:attribute name="type"           type="xs:string"                                    use="optional"/>
+                    </xs:complexType> <!-- end t_road_signals_signal_reference -->
+                    
+                        <xs:simpleType name="e_road_signals_signal_reference_elementType">
+                            <xs:restriction base="xs:string">
+                                <xs:enumeration value="object"/>
+                                <xs:enumeration value="signal"/>
+                            </xs:restriction>
+                        </xs:simpleType> <!-- end e_road_signals_signal_reference_elementType -->
+                    
+                    <!-- 5.3.9.1.4 Physical Signal Position Record, Road Co-ordinates (new in OpenDrive 1.5M) -->
+                    <xs:complexType name="t_road_signals_signal_positionRoad">
+                        <xs:group ref="g_additionalData"/>
+                        <xs:attribute name="roadId"     type="xs:string"    use="required"/>
+                        <xs:attribute name="s"          type="t_grEqZero"   use="required"/>
+                        <xs:attribute name="t"          type="xs:double"    use="required"/>
+                        <xs:attribute name="zOffset"    type="xs:double"    use="required"/>
+                        <xs:attribute name="hOffset"    type="xs:double"    use="required"/>
+                        <xs:attribute name="pitch"      type="xs:double"    use="optional"/>
+                        <xs:attribute name="roll"       type="xs:double"    use="optional"/>
+                    </xs:complexType> <!-- end t_road_signals_signal_positionRoad -->
+                    
+                    <!-- 5.3.9.1.5 Physical Signal Position Record, Inertial Co-ordinates (new in OpenDrive 1.5M) -->
+                    <xs:complexType name="t_road_signals_signal_positionInertial">
+                        <xs:group ref="g_additionalData"/>
+                        <xs:attribute name="x"      type="xs:double"    use="required"/>
+                        <xs:attribute name="y"      type="xs:double"    use="required"/>
+                        <xs:attribute name="z"      type="xs:double"    use="required"/>
+                        <xs:attribute name="hdg"    type="xs:double"    use="required"/>
+                        <xs:attribute name="pitch"  type="xs:double"    use="optional"/>
+                        <xs:attribute name="roll"   type="xs:double"    use="optional"/>
+                    </xs:complexType> <!-- end t_road_signals_signal_positionInertial -->
+                    
+                <!-- 5.3.9.2 Signal Reference Record -->
+                <xs:complexType name="t_road_signals_signalReference">
+                    <xs:sequence>                                   
+                        <xs:element name="validity" type="t_road_objects_object_laneValidity" minOccurs="0" maxOccurs="unbounded"/>
+                        <xs:group ref="g_additionalData"/>
+                    </xs:sequence>                    
+                    <xs:attribute name="s"              type="t_grEqZero"       use="required"/>
+                    <xs:attribute name="t"              type="xs:double"        use="required"/>
+                    <xs:attribute name="id"             type="xs:string"        use="required"/>
+                    <xs:attribute name="orientation"    type="e_orientation"    use="required"/>
+                </xs:complexType> <!-- end t_road_signals_signalReference -->
+                    
+            <!-- 5.3.10 Surface -->
+            <xs:complexType name="t_road_surface">
+                <xs:sequence>                               
+                    <xs:element name="CRG"  type="t_road_surface_CRG"   minOccurs="0"   maxOccurs="unbounded"/>
+                    <xs:group ref="g_additionalData"/>
+                </xs:sequence>
+            </xs:complexType> <!-- end t_road_surface -->
+            
+                <!-- 5.3.10.1 Curved Regular Grid Record -->
+                <xs:complexType name="t_road_surface_CRG">
+                    <xs:group ref="g_additionalData"/>
+                    <xs:attribute name="file"           type="xs:string"                    use="required"/>
+                    <xs:attribute name="sStart"         type="t_grEqZero"                   use="required"/>
+                    <xs:attribute name="sEnd"           type="t_grEqZero"                   use="required"/>
+                    <xs:attribute name="orientation"    type="e_direction"                  use="required"/>
+                    <xs:attribute name="mode"           type="e_road_surface_CRG_mode"      use="required"/>
+                    <xs:attribute name="purpose"        type="e_road_surface_CRG_purpose"   use="optional"/>
+                    <xs:attribute name="sOffset"        type="xs:double"                    use="optional"/>
+                    <xs:attribute name="tOffset"        type="xs:double"                    use="optional"/>
+                    <xs:attribute name="zOffset"        type="xs:double"                    use="optional"/>
+                    <xs:attribute name="zScale"         type="xs:double"                    use="optional"/>
+                    <xs:attribute name="hOffset"        type="xs:double"                    use="optional"/>
+                </xs:complexType> <!-- end t_road_surface_CRG -->
+                
+                    <xs:simpleType name="e_road_surface_CRG_purpose">
+                        <xs:restriction base="xs:string">
+                            <xs:enumeration value="elevation"/>
+                            <xs:enumeration value="friction"/>
+                        </xs:restriction>
+                    </xs:simpleType> <!-- end e_road_surface_CRG_purpose -->
+                    
+                    <xs:simpleType name="e_road_surface_CRG_mode">
+                        <xs:restriction base="xs:string">
+                            <xs:enumeration value="attached"/>
+                            <xs:enumeration value="attached0"/>
+                            <xs:enumeration value="genuine"/>
+                            <xs:enumeration value="global"/>            <!-- new in OpenDrive 1.5M -->
+                        </xs:restriction>
+                    </xs:simpleType> <!-- end e_road_surface_CRG_mode -->
+                
+            <!-- 5.3.11 Railroad Elements -->
+            <xs:complexType name="t_road_railroad">
+                <xs:sequence>
+                    <xs:element name="switch"   type="t_road_railroad_switch"   minOccurs="0"   maxOccurs="unbounded"/>
+                    <xs:group ref="g_additionalData"/>
+                </xs:sequence>
+            </xs:complexType> <!-- end t_road_railroad -->
+            
+                <!-- 5.3.11.1 Railroad Switches -->
+                <xs:complexType name="t_road_railroad_switch">
+                    <xs:sequence>                        
+                        <xs:element name="mainTrack"    type="t_road_railroad_switch_mainTrack" minOccurs="1"   maxOccurs="1"/>                        
+                        <xs:element name="sideTrack"    type="t_road_railroad_switch_sideTrack" minOccurs="1"   maxOccurs="1"/>
+                        <xs:element name="partner"      type="t_road_railroad_switch_partner"   minOccurs="0"   maxOccurs="1"/>
+                        <xs:group ref="g_additionalData"/>
+                    </xs:sequence>                    
+                    <xs:attribute name="name"       type="xs:string"                        use="required"/>
+                    <xs:attribute name="id"         type="xs:string"                        use="required"/>
+                    <xs:attribute name="position"   type="e_road_railroad_switch_position"  use="required"/>
+                </xs:complexType> <!-- end t_road_railroad_switch -->
+                
+                    <xs:simpleType name="e_road_railroad_switch_position">
+                        <xs:restriction base="xs:string">
+                            <xs:enumeration value="dynamic"/>
+                            <xs:enumeration value="straight"/>
+                            <xs:enumeration value="turn"/>
+                        </xs:restriction>
+                    </xs:simpleType> <!-- end e_road_railroad_switch_position -->
+                
+                    <!-- 5.3.11.1.1 Main Track -->
+                    <xs:complexType name="t_road_railroad_switch_mainTrack">
+                        <xs:group ref="g_additionalData"/>
+                        <xs:attribute name="id"     type="xs:string"    use="required"/>
+                        <xs:attribute name="s"      type="t_grEqZero"   use="required"/>
+                        <xs:attribute name="dir"    type="e_elementDir" use="required"/>
+                    </xs:complexType> <!-- end t_road_railroad_switch_mainTrack -->
+                    
+                    <!-- 5.3.11.1.2 Side Track -->
+                    <xs:complexType name="t_road_railroad_switch_sideTrack">
+                        <xs:group ref="g_additionalData"/>
+                        <xs:attribute name="id"     type="xs:string"    use="required"/>
+                        <xs:attribute name="s"      type="t_grEqZero"   use="required"/>
+                        <xs:attribute name="dir"    type="e_elementDir" use="required"/>
+                    </xs:complexType> <!-- end t_road_railroad_switch_sideTrack -->
+                    
+                    <!-- 5.3.11.1.3 Partner Switch -->
+                    <xs:complexType name="t_road_railroad_switch_partner">
+                        <xs:group ref="g_additionalData"/>
+                        <xs:attribute name="name"   type="xs:string"    use="optional"/>
+                        <xs:attribute name="id"     type="xs:string"    use="required"/>
+                    </xs:complexType> <!-- end t_road_railroad_switch_partner -->
+            
+        <!-- 5.4 Controller Record -->
+        <xs:complexType name="t_controller">
+            <xs:sequence>
+                <xs:element name="control"  type="t_controller_control"     minOccurs="1"   maxOccurs="unbounded"/>
+                <xs:group ref="g_additionalData"/>
+            </xs:sequence>            
+            <xs:attribute name="id"         type="xs:string"                use="required"/>
+            <xs:attribute name="name"       type="xs:string"                use="optional"/>
+            <xs:attribute name="sequence"   type="xs:nonNegativeInteger"    use="optional"/>
+        </xs:complexType> <!-- end t_controller -->
+        
+            <!-- 5.4.1 Control Entry Record -->
+            <xs:complexType name="t_controller_control">
+                <xs:group ref="g_additionalData"/>
+                <xs:attribute name="signalId"   type="xs:string"    use="required"/>
+                <xs:attribute name="type"       type="xs:string"    use="optional"/>
+            </xs:complexType> <!-- end t_controller_control -->
+                
+        <!-- 5.5 Junction Record -->
+        <xs:complexType name="t_junction">
+            <xs:sequence>                
+                <xs:element name="connection"   type="t_junction_connection"    minOccurs="1"   maxOccurs="unbounded"/>                
+                <xs:element name="priority"     type="t_junction_priority"      minOccurs="0"   maxOccurs="unbounded"/>                
+                <xs:element name="controller"   type="t_junction_controller"    minOccurs="0"   maxOccurs="unbounded"/>
+                <xs:element name="surface"      type="t_junction_surface"       minOccurs="0"   maxOccurs="1"/>
+                <xs:group ref="g_additionalData"/>
+            </xs:sequence>            
+            <xs:attribute name="name"   type="xs:string"        use="optional"/>
+            <xs:attribute name="id"     type="t_junction_id"    use="required"/>
+            <xs:attribute name="type"   type="e_junction_type"  use="optional"/> <!-- new in OpenDrive 1.5M -->
+        </xs:complexType> <!-- end t_junction -->
+        
+            <xs:simpleType name="e_junction_type">
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="default"/>
+                    <xs:enumeration value="virtual"/>
+                </xs:restriction>
+            </xs:simpleType> <!-- end e_junction_type -->
+        
+            <!-- 5.5.1 Connection Record -->
+            <xs:complexType name="t_junction_connection">
+                <xs:sequence>                    
+                    <xs:element name="predecessor"  type="t_junction_predecessorSuccessor"  minOccurs="0"   maxOccurs="1"/>
+                    <xs:element name="successor"    type="t_junction_predecessorSuccessor"  minOccurs="0"   maxOccurs="1"/>
+                    <xs:element name="laneLink"     type="t_junction_connection_laneLink"   minOccurs="0"   maxOccurs="unbounded"/>
+                    <xs:group ref="g_additionalData"/>
+                </xs:sequence>                
+                <xs:attribute name="id"                 type="xs:string"        use="required"/>
+                <xs:attribute name="incomingRoad"       type="xs:string"        use="required"/>
+                <xs:attribute name="connectingRoad"     type="xs:string"        use="required"/>
+                <xs:attribute name="contactPoint"       type="e_contactPoint"   use="required"/>
+                <xs:attribute name="connectionMaster"   type="xs:string"        use="optional"/> <!-- new in OpenDrive 1.5M -->
+                <xs:attribute name="type"               type="e_junction_type"  use="optional"/> <!-- new in OpenDrive 1.5M -->
+            </xs:complexType> <!-- end t_junction_connection -->
+            
+            <!-- 5.5.1.1 Junction Predecessor Record, 5.5.1.2 Junction Successor Record -->            
+            <xs:complexType name="t_junction_predecessorSuccessor">
+                <xs:group ref="g_additionalData"/>
+                <xs:attribute name="elementType"    type="xs:string"    fixed="road"    use="required"/>
+                <xs:attribute name="elementId"      type="xs:string"                    use="required"/>
+                <xs:attribute name="elementS"       type="t_grZero"                     use="required"/>
+                <xs:attribute name="elementDir"     type="e_elementDir"                 use="required"/>
+            </xs:complexType> <!-- end t_junction_predecessorSuccessor -->
+            
+                <!-- 5.5.1.3 Junction Lane Link Record -->
+                <xs:complexType name="t_junction_connection_laneLink" >           
+                    <xs:group ref="g_additionalData"/>
+                    <xs:attribute name="from"   type="xs:integer"   use="required"/>
+                    <xs:attribute name="to"     type="xs:integer"   use="required"/>
+                </xs:complexType> <!-- end t_junction_connection_laneLink -->
+            
+            <!-- 5.5.2 Junction Priority Record -->
+            <xs:complexType name="t_junction_priority">
+                <xs:group ref="g_additionalData"/>
+                <xs:attribute name="high"   type="xs:string"    use="optional"/>
+                <xs:attribute name="low"    type="xs:string"    use="optional"/>
+            </xs:complexType> <!-- end t_junction_priority -->
+            
+            <!-- 5.5.3 Junction Controller Record -->
+            <xs:complexType name="t_junction_controller">
+                <xs:group ref="g_additionalData"/>
+                <xs:attribute name="id"         type="xs:string"                use="required"/>
+                <xs:attribute name="type"       type="xs:string"                use="optional"/>
+                <xs:attribute name="sequence"   type="xs:nonNegativeInteger"    use="optional"/>
+            </xs:complexType> <!-- end t_junction_controller -->
+
+            <!-- 5.5.4 Surface (new in OpenDrive 1.5M) -->
+            <xs:complexType name="t_junction_surface">
+                <xs:sequence>                    
+                    <xs:element name="CRG"  type="t_junction_surface_CRG"   minOccurs="0"   maxOccurs="unbounded"/>      
+                    <xs:group ref="g_additionalData"/>
+                </xs:sequence>
+            </xs:complexType> <!-- end t_junction_surface -->
+            
+                <!-- 5.5.4.1 Curved Regular Grid Record (new in OpenDrive 1.5M) -->
+                <xs:complexType name="t_junction_surface_CRG">
+                    <xs:group ref="g_additionalData"/>
+                    <xs:attribute name="file"       type="xs:string"                                    use="required"/>
+                    <xs:attribute name="mode"       type="e_road_surface_CRG_mode"      fixed="global"  use="required"/>
+                    <xs:attribute name="purpose"    type="e_road_surface_CRG_purpose"                   use="optional"/>
+                    <xs:attribute name="zOffset"    type="xs:double"                                    use="optional"/>
+                    <xs:attribute name="zScale"     type="xs:double"                                    use="optional"/>
+                </xs:complexType> <!-- end t_junction_surface_CRG -->                        
+                
+        <!-- 5.6 Junction Group Record -->
+        <xs:complexType name="t_junctionGroup">
+            <xs:sequence>                
+                <xs:element name="junctionReference" type="t_junctionGroup_junctionReference" minOccurs="1" maxOccurs="unbounded"/>
+                <xs:group ref="g_additionalData"/>
+            </xs:sequence>            
+            <xs:attribute name="name"   type="xs:string"            use="optional"/>
+            <xs:attribute name="id"     type="xs:string"            use="required"/>
+            <xs:attribute name="type"   type="e_junctionGroup_type" use="required"/>
+        </xs:complexType> <!-- end t_junctionGroup -->
+        
+            <xs:simpleType name="e_junctionGroup_type">
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="roundabout"/>
+                    <xs:enumeration value="unknown"/>
+                </xs:restriction>
+            </xs:simpleType> <!-- end e_junctionGroup_type -->
+        
+            <!-- 5.6.1 Junction Reference Record -->
+            <xs:complexType name="t_junctionGroup_junctionReference">
+                <xs:group ref="g_additionalData"/>
+                <xs:attribute name="junction"   type="xs:string"    use="required"/>
+            </xs:complexType> <!-- end t_junctionGroup_junctionReference -->  
+    
+        <!-- 5.7 Stations -->
+        <xs:complexType name="t_station">
+            <xs:sequence>                
+                <xs:element name="platform" type="t_station_platform" minOccurs="1" maxOccurs="unbounded"/>    
+                <xs:group ref="g_additionalData"/>
+            </xs:sequence>            
+            <xs:attribute name="name"   type="xs:string"        use="required"/>
+            <xs:attribute name="id"     type="xs:string"        use="required"/>
+            <xs:attribute name="type"   type="e_station_type"   use="optional"/>
+        </xs:complexType> <!-- end t_station -->
+        
+            <xs:simpleType name="e_station_type">
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="small"/>
+                    <xs:enumeration value="medium"/>
+                    <xs:enumeration value="large"/>
+                </xs:restriction>
+            </xs:simpleType> <!-- end e_station_type -->
+        
+            <!-- 5.7.1 Platform Record -->
+            <xs:complexType name="t_station_platform">
+                <xs:sequence>                               
+                    <xs:element name="segment" type="t_station_platform_segment" minOccurs="1" maxOccurs="unbounded"/>
+                    <xs:group ref="g_additionalData"/>
+                </xs:sequence>                
+                <xs:attribute name="name"   type="xs:string"    use="optional"/>
+                <xs:attribute name="id"     type="xs:string"    use="required"/>
+            </xs:complexType> <!-- end t_station_platform -->
+            
+                <!-- 5.7.1.1 Segment Record -->
+                <xs:complexType name="t_station_platform_segment">
+                    <xs:group ref="g_additionalData"/>                    
+                    <xs:attribute name="roadId" type="xs:string"                        use="required"/>
+                    <xs:attribute name="sStart" type="t_grEqZero"                       use="required"/>
+                    <xs:attribute name="sEnd"   type="t_grEqZero"                       use="required"/>
+                    <xs:attribute name="side"   type="e_station_platform_segment_side"  use="required"/>
+                </xs:complexType> <!-- end t_station_platform_segment -->
+                
+                    <xs:simpleType name="e_station_platform_segment_side">
+                        <xs:restriction base="xs:string">
+                            <xs:enumeration value="left"/>
+                            <xs:enumeration value="right"/>
+                        </xs:restriction>
+                    </xs:simpleType> <!-- end e_station_platform_segment_side -->
+    
+        <!-- 5.8 Ancillary Data -->
+        <xs:complexType name="t_userData">
+            <xs:sequence>
+                <xs:any processContents="skip"  minOccurs="0"   maxOccurs="unbounded"/>
+            </xs:sequence>
+            <xs:attribute name="code"   type="xs:string"    use="required"/>
+            <xs:attribute name="value"  type="xs:string"    use="required"/>
+        </xs:complexType> <!-- end t_userData -->
+        
+        <!-- 5.9 Include Tag -->
+        <xs:complexType name="t_include">
+            <xs:attribute name="file" type="xs:string" use="required"/>
+        </xs:complexType> <!-- end t_include -->
+        
+        <!-- 5.11 Data Quality Description (new in OpenDrive 1.5M) -->
+        <xs:complexType name="t_dataQuality" >
+            <xs:sequence>                
+                <xs:element name="error"    type="t_dataQuality_Error"      minOccurs="0"   maxOccurs="1"/>                
+                <xs:element name="rawData"  type="t_dataQuality_RawData"    minOccurs="0"   maxOccurs="1"/>
+            </xs:sequence>
+        </xs:complexType> <!-- end t_dataQuality -->
+        
+        <!-- 5.11.1 Data Error Description (new in OpenDrive 1.5M) -->
+        <xs:complexType name="t_dataQuality_Error" >
+            <xs:attribute name="xyAbsolute" type="xs:double" use="required"/>
+            <xs:attribute name="zAbsolute"  type="xs:double" use="required"/>
+            <xs:attribute name="xyRelative" type="xs:double" use="required"/>
+            <xs:attribute name="zRelative"  type="xs:double" use="required"/>
+        </xs:complexType> <!-- end t_dataQuality_Error -->
+        
+        <!-- 5.11.2 Raw Data Description (new in OpenDrive 1.5M) -->
+        <xs:complexType name="t_dataQuality_RawData" >
+            <xs:attribute name="date"                  type="xs:string"                             use="required"/>
+            <xs:attribute name="source"                type="e_dataQuality_RawData_Source"          use="required"/>
+            <xs:attribute name="sourceComment"         type="xs:string"                             use="optional"/>
+            <xs:attribute name="postProcessing"        type="e_dataQuality_RawData_PostProcessing"  use="required"/>
+            <xs:attribute name="postProcessingComment" type="xs:string"                             use="optional"/>
+        </xs:complexType> <!-- end t_dataQuality_RawData -->
+        
+            <xs:simpleType name="e_dataQuality_RawData_Source">
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="sensor"/>
+                    <xs:enumeration value="cadaster"/>
+                    <xs:enumeration value="custom"/>
+                </xs:restriction>
+            </xs:simpleType> <!-- end e_dataQuality_RawData_Source -->
+            
+            <xs:simpleType name="e_dataQuality_RawData_PostProcessing">
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="raw"/>
+                    <xs:enumeration value="cleaned"/>
+                    <xs:enumeration value="processed"/>
+                    <xs:enumeration value="fused"/>
+                </xs:restriction>
+            </xs:simpleType> <!-- end e_dataQuality_RawData_PostProcessing -->
+            
+        <!-- group of tags that can appear anywhere in the document -->
+        <xs:group name="g_additionalData">
+            <xs:sequence>            
+                <xs:element name="userData"     type="t_userData"       minOccurs="0"   maxOccurs="unbounded"/>
+                <xs:element name="include"      type="t_include"        minOccurs="0"   maxOccurs="unbounded"/>
+                <xs:element name="dataQuality"  type="t_dataQuality"    minOccurs="0"   maxOccurs="1"/>
+            </xs:sequence>
+        </xs:group> <!-- end g_additionalData -->
+    
+    
+    <!-- enumerations -->
+    
+    <!-- unit enumerations -->
+    
+    <!-- 2.2 Units -->
+    <xs:simpleType name="e_unitDistance">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="m"/>
+            <xs:enumeration value="km"/>
+            <xs:enumeration value="ft"/>
+            <xs:enumeration value="mile"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_unitDistance -->
+    
+    <!-- 2.2 Units -->
+    <xs:simpleType name="e_unitSpeed">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="m/s"/>
+            <xs:enumeration value="mph"/>
+            <xs:enumeration value="km/h"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_unitSpeed -->
+    
+    <!-- 2.2 Units -->
+    <xs:simpleType name="e_unitMass">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="kg"/>
+            <xs:enumeration value="t"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_unitMass -->
+    
+    <!-- 2.2 Units -->
+    <xs:simpleType name="e_unitSlope">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="%"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_unitSlope -->
+    
+    <!-- 2.2 Units -->
+    <xs:simpleType name="e_unit">
+        <xs:union memberTypes="e_unitDistance e_unitSpeed e_unitMass e_unitSlope"/>
+    </xs:simpleType> <!-- end e_unit -->
+    
+    <!-- end unit enumerations -->
+    
+    <!-- OpenDrive constant enumerations -->
+        
+    <!-- 6.1 Road Type Information -->
+    <xs:simpleType name="e_roadType">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="unknown"/>
+            <xs:enumeration value="rural"/>
+            <xs:enumeration value="motorway"/>
+            <xs:enumeration value="town"/>
+            <xs:enumeration value="lowSpeed"/>
+            <xs:enumeration value="pedestrian"/>
+            <xs:enumeration value="bicycle"/>
+            <xs:enumeration value="townExpressway"/>    <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="townCollector"/>     <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="townArterial"/>      <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="townPrivate"/>       <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="townLocal"/>         <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="townPlayStreet"/>    <!-- new in OpenDrive 1.5M -->
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_roadType -->
+    
+    <!-- 6.2 Road Mark Type Information -->
+    <xs:simpleType name="e_roadMarkType">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="none"/>
+            <xs:enumeration value="solid"/>
+            <xs:enumeration value="broken"/>
+            <xs:enumeration value="solid solid"/>
+            <xs:enumeration value="solid broken"/>
+            <xs:enumeration value="broken solid"/>
+            <xs:enumeration value="broken broken"/>
+            <xs:enumeration value="botts dots"/>
+            <xs:enumeration value="grass"/>
+            <xs:enumeration value="curb"/>
+            <xs:enumeration value="custom"/>            <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="edge"/>              <!-- new in OpenDrive 1.5M -->
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_roadMarkType -->
+    
+    <!-- 6.3 Road Mark Weight Information -->
+    <xs:simpleType name="e_roadMarkWeight">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="standard"/>
+            <xs:enumeration value="bold"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_roadMarkWeight -->
+    
+    <!-- 6.4 Road Mark Color Information -->
+    <xs:simpleType name="e_roadMarkColor">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="standard"/>
+            <xs:enumeration value="blue"/>
+            <xs:enumeration value="green"/>
+            <xs:enumeration value="red"/>
+            <xs:enumeration value="white"/>
+            <xs:enumeration value="yellow"/>
+            <xs:enumeration value="orange"/>            <!-- new in OpenDrive 1.5M -->
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_roadMarkColor -->
+    
+    <!-- 6.5 Lane Type Information -->
+    <xs:simpleType name="e_laneType">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="none"/>
+            <xs:enumeration value="driving"/>
+            <xs:enumeration value="stop"/>
+            <xs:enumeration value="shoulder"/>
+            <xs:enumeration value="biking"/>
+            <xs:enumeration value="sidewalk"/>
+            <xs:enumeration value="border"/>
+            <xs:enumeration value="restricted"/>
+            <xs:enumeration value="parking"/>
+            <xs:enumeration value="bidirectional"/>
+            <xs:enumeration value="median"/>
+            <xs:enumeration value="special1"/>
+            <xs:enumeration value="special2"/>
+            <xs:enumeration value="special3"/>
+            <xs:enumeration value="roadWorks"/>
+            <xs:enumeration value="tram"/>
+            <xs:enumeration value="rail"/>
+            <xs:enumeration value="entry"/>
+            <xs:enumeration value="exit"/>
+            <xs:enumeration value="offRamp"/>
+            <xs:enumeration value="onRamp"/>
+            <xs:enumeration value="connectingRamp"/>    <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="bus"/>               <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="taxi"/>              <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="HOV"/>               <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="mwyEntry"/>          <!-- deprecated -->
+            <xs:enumeration value="mwyExit"/>           <!-- deprecated -->
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_laneType -->
+    
+    <!-- 6.6 Object Types -->
+    <xs:simpleType name="e_objectType">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="none"/>
+            <xs:enumeration value="obstacle"/>
+            <xs:enumeration value="car"/>               <!-- legacy -->
+            <xs:enumeration value="pole"/>
+            <xs:enumeration value="tree"/>
+            <xs:enumeration value="vegetation"/>
+            <xs:enumeration value="barrier"/>
+            <xs:enumeration value="building"/>
+            <xs:enumeration value="parkingSpace"/>
+            <xs:enumeration value="patch"/>
+            <xs:enumeration value="railing"/>           <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="trafficIsland"/>
+            <xs:enumeration value="crosswalk"/>
+            <xs:enumeration value="streetLamp"/>
+            <xs:enumeration value="gantry"/>
+            <xs:enumeration value="soundBarrier"/>
+            <xs:enumeration value="truck"/>             <!-- legacy -->
+            <xs:enumeration value="van"/>               <!-- legacy -->
+            <xs:enumeration value="bus"/>               <!-- legacy -->
+            <xs:enumeration value="trailer"/>           <!-- legacy -->
+            <xs:enumeration value="bike"/>              <!-- legacy -->
+            <xs:enumeration value="motorbike"/>         <!-- legacy -->
+            <xs:enumeration value="tram"/>              <!-- legacy -->
+            <xs:enumeration value="train"/>             <!-- legacy -->
+            <xs:enumeration value="pedestrian"/>        <!-- legacy -->
+            <xs:enumeration value="wind"/>              <!-- legacy -->
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_objectType -->
+    
+    <!-- 6.7 Tunnel Types -->
+    <xs:simpleType name="e_tunnelType">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="standard"/>
+            <xs:enumeration value="underpass"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_tunnelType -->
+    
+    <!-- 6.8 Bridge Types -->
+    <xs:simpleType name="e_bridgeType">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="concrete"/>
+            <xs:enumeration value="steel"/>
+            <xs:enumeration value="brick"/>
+            <xs:enumeration value="wood"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_bridgeType -->
+    
+    <!-- 6.9 Access Restriction Types -->
+    <xs:simpleType name="e_accessRestrictionType">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="simulator"/>
+            <xs:enumeration value="autonomousTraffic"/>
+            <xs:enumeration value="pedestrian"/>
+            <xs:enumeration value="passengerCar"/>      <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="bus"/>               <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="delivery"/>          <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="emergency"/>         <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="taxi"/>              <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="throughTraffic"/>    <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="truck"/>             <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="bicycle"/>           <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="motorcycle"/>        <!-- new in OpenDrive 1.5M -->
+            <xs:enumeration value="none"/>
+            <xs:enumeration value="trucks"/>            <!-- legacy (??? was not listed in version 1.4 either) -->
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_accessRestrictionType -->
+    
+    <!-- 6.10 Country Codes -->
+    <xs:simpleType name="e_countryCode">
+        <xs:union memberTypes="e_countryCode_deprecated e_countryCode_iso3166alpha3"/>
+    </xs:simpleType> <!-- end e_countryCode -->
+    
+        <xs:simpleType name="e_countryCode_deprecated">
+            <xs:restriction base="xs:string">
+                <xs:enumeration value="OpenDRIVE"/>
+                <xs:enumeration value="Austria"/>           <!-- deprecated -->
+                <xs:enumeration value="Brazil"/>            <!-- deprecated -->
+                <xs:enumeration value="China"/>             <!-- deprecated -->
+                <xs:enumeration value="France"/>            <!-- deprecated -->
+                <xs:enumeration value="Germany"/>           <!-- deprecated -->
+                <xs:enumeration value="Italy"/>             <!-- deprecated -->
+                <xs:enumeration value="Switzerland"/>       <!-- deprecated -->
+                <xs:enumeration value="USA"/>               <!-- deprecated -->
+            </xs:restriction>
+        </xs:simpleType> <!-- end e_countryCode_deprecated -->
+        
+        <xs:simpleType name="e_countryCode_iso3166alpha3">
+            <xs:restriction base="xs:string">
+                <xs:pattern value="[A-Z]{3}"/>
+            </xs:restriction>
+        </xs:simpleType> <!-- end e_countryCode_iso3166alpha3 -->
+    
+    <!-- 6.12 Side Types (new in OpenDrive 1.5M) -->
+    <xs:simpleType name="e_sideType">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="left"/>
+            <xs:enumeration value="right"/>
+            <xs:enumeration value="front"/>
+            <xs:enumeration value="rear"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_sideType -->
+    
+    <!-- 6.13 Outline Fill Types (new in OpenDrive 1.5M) -->
+    <xs:simpleType name="e_outlineFillType">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="grass"/>
+            <xs:enumeration value="concrete"/>
+            <xs:enumeration value="cobble"/>
+            <xs:enumeration value="asphalt"/>
+            <xs:enumeration value="pavement"/>
+            <xs:enumeration value="gravel"/>
+            <xs:enumeration value="soil"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_outlineFillType -->
+    
+    <!-- 6.14 Border Types (new in OpenDrive 1.5M) -->
+    <xs:simpleType name="e_borderType">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="concrete"/>
+            <xs:enumeration value="curb"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_borderType -->
+    
+    <!-- end OpenDrive constant enumerations -->
+    
+    
+    <!-- other enumerations -->
+    
+    <xs:simpleType name="e_contactPoint">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="start"/>
+            <xs:enumeration value="end"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_contactPoint -->    
+    
+    <xs:simpleType name="e_elementDir">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="+"/>
+            <xs:enumeration value="-"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_elementDir -->
+    
+    <xs:simpleType name="e_direction">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="same"/>
+            <xs:enumeration value="opposite"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_direction -->
+    
+    <xs:simpleType name="e_roadMarkRule">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="no passing"/>
+            <xs:enumeration value="caution"/>
+            <xs:enumeration value="none"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_roadMarkRule -->
+    
+    <xs:simpleType name="e_orientation">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="+"/>
+            <xs:enumeration value="-"/>
+            <xs:enumeration value="none"/>
+        </xs:restriction>
+    </xs:simpleType> <!-- end e_orientation -->
+                                                              
+    <!-- end enumerations -->
+    
+</xs:schema> <!-- end schema -->

+ 859 - 0
src/tool/opendriveParser/convert_opendrive.py

@@ -0,0 +1,859 @@
+# -*- coding=utf-8 -*-
+
+import opendrive_parser_14H as opendrive_parser
+from eulerspiral import EulerSpiral
+import numpy as np
+import math
+
+# pip install generateDS
+# https://pypi.org/project/generateDS/
+# ???????????
+# generateDS.py -o opendrive_parser_15M.py OpenDRIVE_1.5M.xsd 
+# generateDS.py -o opendrive_parser_14H.py OpenDRIVE_1.4H.xsd  ok
+# https://sourceforge.net/projects/generateds/
+# http://www.davekuhlman.org/generateDS.html
+
+# https://pypi.org/project/Shapely/
+# pip install Shapely
+# import shapely
+from shapely.geometry import (Point, LineString, Polygon, MultiPolygon, LinearRing, MultiPoint)
+from shapely.validation import explain_validity
+from shapely.ops import (unary_union, triangulate, polygonize, polygonize_full)
+
+# https://pypi.org/project/geojson/
+# pip install geojson
+import geojson
+import math
+
+class Geometry():
+    def __init__(self, start_position: float, heading: float, s : float, length: float):
+        self.start_position = np.array(start_position)  # Start position ([x, y] inertial)
+        # print(self.start_position)
+        self.length = length    # Length of the element?s reference line
+        self.heading = heading  # Start orientation (inertial heading)
+        self.s = s              # s-coordinate of start position
+
+    def calc_position(self, s_pos):
+        pass
+
+class Line(Geometry):
+    def calc_position(self, s_pos):        
+        pos = self.start_position + np.array( [s_pos * np.cos(self.heading), s_pos * np.sin(self.heading)] )
+        tangent = self.heading
+
+        return (pos, tangent)    
+    
+class Arc(Geometry):
+    def __init__(self, start_position, heading, s, length, curvature):
+        self.curvature = curvature
+        super().__init__(start_position=start_position, heading=heading, s = s, length=length)
+
+    def calc_position(self, s_pos):
+        c = self.curvature
+        hdg = self.heading - np.pi / 2
+
+        a = 2 / c * np.sin(s_pos * c / 2)
+        alpha = (np.pi - s_pos * c) / 2 - hdg
+
+        dx = -1 * a * np.cos(alpha)
+        dy = a * np.sin(alpha)
+
+        pos = self.start_position + np.array([dx, dy])
+        tangent = self.heading + s_pos * self.curvature
+
+        return (pos, tangent)
+    
+class Poly3(Geometry):
+    def __init__(self, start_position, heading, s, length, a, b, c, d):
+        self._a = a
+        self._b = b
+        self._c = c
+        self._d = d
+        super().__init__(start_position=start_position, heading=heading, s = s, length=length)       
+
+    def calc_position(self, s_pos):
+        # Calculate new point in s_pos/t coordinate system
+        coeffs = [self._a, self._b, self._c, self._d]
+
+        t = np.polynomial.polynomial.polyval(s_pos, coeffs)
+
+        # Rotate and translate
+        srot = s_pos * np.cos(self.heading) - t * np.sin(self.heading)
+        trot = s_pos * np.sin(self.heading) + t * np.cos(self.heading)
+
+        # Derivate to get heading change
+        dCoeffs = coeffs[1:] * np.array(np.arange(1, len(coeffs)))
+        tangent = np.polynomial.polynomial.polyval(s_pos, dCoeffs)
+
+        return (self.start_position + np.array([srot, trot]), self.heading + tangent)
+
+class Spiral(Geometry):
+    """This record describes a spiral as part of the road?s reference line.
+
+    For this type of spiral, the curvature
+    change between start and end of the element is linear.
+
+    (Section 5.3.4.1.2 of OpenDRIVE 1.4)
+    """
+    def __init__(self, start_position, heading, s, length, curvStart, curvEnd):
+        self._curvStart = curvStart
+        self._curvEnd = curvEnd
+        super().__init__(start_position=start_position, heading=heading, s = s, length=length)       
+        self._spiral = EulerSpiral.createFromLengthAndCurvature(
+            self.length, self._curvStart, self._curvEnd
+        )
+
+    def calc_position(self, s_pos):
+        (x,y,t) = self._spiral.calc(
+            s_pos,
+            self.start_position[0],
+            self.start_position[1],
+            self._curvStart,
+            self.heading
+        )
+
+        return (np.array([x,y]), t)
+
+
+class ConvertOpenDrive:
+    def __init__(self, open_drive, interval:float = 0.5):
+        self.open_drive = open_drive # openDRIVE????
+        self.interval = interval
+        # ????????
+        # self.road_inters = []
+        self.road_length = 0
+        self.road_geometrys = []
+        self.road_geometrys_pos = []
+        self.road_laneOffsets = []
+        self.road_laneOffsets_pos = []
+        self.road_laneSections = []
+        self.road_laneSections_pos = []
+        self.road_elevations = []
+        self.road_elevations_pos = []
+        self.lat = 39.12072740
+        self.lon= 117.02800329
+        self.x0,self.y0 = self.gaussProjCal(self.lon, self.lat)
+        self.lon1, self.lat1  = self.gaussProjInvCal(self.x0, self.y0)
+        print("----",self.x0, self.y0,self.lat1,self.lon1,self.lat,self.lon)
+        # self.road_geometry_inters = {}
+        # self.
+    # ???????????
+    def gaussProjCal(self, longitude, latitude):
+        ProjNo = 0
+        iPI = 0.0174532925199433
+        ZoneWide = 6
+        a = 6378245.0
+        f = 1.0 / 298.3
+        ProjNo = (int)(longitude / ZoneWide)
+        longitude0 = ProjNo * ZoneWide + ZoneWide / 2
+        longitude0 = longitude0 * iPI
+        latitude0 = 0
+        longitude1 = longitude * iPI
+        latitude1 = latitude * iPI
+        e2 = 2 * f - f * f
+        ee = e2 * (1.0 - e2)
+        NN = a / math.sqrt(1.0 - e2 * math.sin(latitude1)*math.sin(latitude1))
+        T = math.tan(latitude1)*math.tan(latitude1)
+        C = ee * math.cos(latitude1)*math.cos(latitude1)
+        A = (longitude1 - longitude0)*math.cos(latitude1)
+        M = a * ((1 - e2 / 4 - 3 * e2*e2 / 64 - 5 * e2*e2*e2 / 256)*latitude1 - (3 * e2 / 8 + 3 * e2*e2 / 32 \
+            + 45 * e2*e2*e2 / 1024)*math.sin(2 * latitude1)+ (15 * e2*e2 / 256 + 45 * e2*e2*e2 / 1024)*math.sin(4 * latitude1) \
+            - (35 * e2*e2*e2 / 3072)*math.sin(6 * latitude1))
+        xval = NN * (A + (1 - T + C)*A*A*A / 6 + (5 - 18 * T + T * T + 72 * C - 58 * ee)*A*A*A*A*A / 120)
+        yval = M + NN * math.tan(latitude1)*(A*A / 2 + (5 - T + 9 * C + 4 * C*C)*A*A*A*A / 24 \
+            + (61 - 58 * T + T * T + 600 * C - 330 * ee)*A*A*A*A*A*A / 720)
+        X0 = 1000000 * (ProjNo + 1) + 500000
+        Y0 = 0
+        xval = xval + X0
+        yval = yval + Y0
+        x = xval
+        y = yval
+        return (x, y)
+    
+    # ???????????
+    def gaussProjInvCal(self, X, Y):
+        iPI = 0.0174532925199433
+        a = 6378245.0
+        f = 1.0 / 298.3
+        ZoneWide = 6
+        ProjNo = (int)(X / 1000000)
+        longitude0 = (ProjNo - 1) * ZoneWide + ZoneWide / 2
+        longitude0 = longitude0 * iPI
+        X0 = ProjNo * 1000000 + 500000
+        Y0 = 0
+        xval = X - X0
+        yval = Y - Y0
+        e2 = 2 * f - f * f
+        e1 = (1.0 - math.sqrt(1 - e2)) / (1.0 + math.sqrt(1 - e2))
+        ee = e2 / (1 - e2)
+        M = yval
+        u = M / (a*(1 - e2 / 4 - 3 * e2*e2 / 64 - 5 * e2*e2*e2 / 256))
+        fai = u + (3 * e1 / 2 - 27 * e1*e1*e1 / 32)*math.sin(2 * u) + (21 * e1*e1 / 16 - 55 * e1*e1*e1*e1 / 32)*math.sin(4 * u) \
+            + (151 * e1*e1*e1 / 96)*math.sin(6 * u) + (1097 * e1*e1*e1*e1 / 512)*math.sin(8 * u)
+        C = ee * math.cos(fai)*math.cos(fai)
+        T = math.tan(fai)*math.tan(fai)
+        NN = a / math.sqrt(1.0 - e2 * math.sin(fai)*math.sin(fai))
+        R = a * (1 - e2) / math.sqrt((1 - e2 * math.sin(fai)*math.sin(fai))*(1 - e2 * math.sin(fai)*math.sin(fai))*(1 - e2 * math.sin(fai)*math.sin(fai)))
+        D = xval / NN
+        longitude1 = longitude0 + (D - (1 + 2 * T + C)*D*D*D / 6 + (5 - 2 * C + 28 * T - 3 * C*C + 8 * ee + 24 * T*T)*D*D*D*D*D / 120) / math.cos(fai)
+        latitude1 = fai - (NN*math.tan(fai) / R)*(D*D / 2 - (5 + 3 * T + 10 * C - 4 * C*C - 9 * ee)*D*D*D*D / 24 \
+            + (61 + 90 * T + 298 * C + 45 * T*T - 256 * ee - 3 * C*C)*D*D*D*D*D*D / 720)
+        longitude = longitude1 / iPI
+        latitude = latitude1 / iPI
+        return (longitude,latitude)
+
+    # ????
+    def calc_interpolates(self, pos_offset0, pos_offset1):
+        vals = []
+        p0 = pos_offset0
+        p1 = pos_offset1
+        if p1 > p0 :
+            vals = np.append(np.arange(p0, p1, self.interval), p1)        
+        return vals
+
+    def calc_lateral_offset(self, start_position, heading, lateral_offset, is_left) : 
+        pi_half = math.pi * 0.5 
+        if is_left == False:
+            pi_half *= -1.0    
+        pos = start_position + np.array( [lateral_offset * np.cos(heading + pi_half), lateral_offset * np.sin(heading + pi_half)] )
+        tangent = heading    
+        return (pos, tangent) 
+
+    def init_road(self, road):
+        # self.road_inters = []
+        self.road_length = road.length
+        self.road_geometrys = []
+        self.road_geometrys_pos = []
+        self.road_laneOffsets = []
+        self.road_laneOffsets_pos = []
+        self.road_laneSections = []
+        self.road_laneSections_pos = []
+        self.road_elevations = []
+        self.road_elevations_pos = []
+        # self.road_geometry_inters = {}
+
+        # self.road_inters = self.calc_interpolates(0, road.length)
+        # print(road.id, 'inters', len(self.road_inters))
+
+        for geometry in road.planView.get_geometry():
+            # print(geometry.s, geometry.x, geometry.y, geometry.hdg)
+            start_position = np.array([geometry.x, geometry.y])  
+            heading = geometry.hdg
+            start_pos = geometry.s
+            length = geometry.length
+            
+            self.road_geometrys_pos.append(geometry.s)
+
+            if geometry.line is not None:
+                # print('is line')
+                self.road_geometrys.append(Line(start_position, heading, start_pos, length))
+            elif geometry.arc is not None:
+                # print('is arc')
+                self.road_geometrys.append(Arc(start_position, heading, start_pos, length, geometry.arc.curvature))
+            elif geometry.poly3 is not None:
+                # print('is poly3')
+                self.road_geometrys.append(Poly3(start_position, heading, start_pos, length, geometry.poly3.a, geometry.poly3.b, geometry.poly3.c, geometry.poly3.d))
+            elif geometry.spiral is not None:
+                # print('is spiral')
+                self.road_geometrys.append(Spiral(start_position,heading, start_pos, length, geometry.spiral.curvStart, geometry.spiral.curvEnd))
+            elif geometry.paramPoly3 is not None:
+                print('is paramPoly3')
+
+        if road.lanes is not None:
+            for laneOffset in road.lanes.get_laneOffset():
+                self.road_laneOffsets.append(laneOffset)
+                self.road_laneOffsets_pos.append(laneOffset.s)
+            
+            if len(self.road_laneOffsets) == 0:
+                laneOffset = opendrive_parser.laneOffsetType(0,0,0,0,0)
+                self.road_laneOffsets.append(laneOffset)
+                self.road_laneOffsets_pos.append(laneOffset.s)
+
+            for laneSection in road.lanes.get_laneSection():
+                self.road_laneSections.append(laneSection)    
+                self.road_laneSections_pos.append(laneSection.s)   
+
+        if road.elevationProfile is not None:
+            for elevation in road.elevationProfile.elevation:
+                self.road_elevations.append(elevation)
+                self.road_elevations_pos.append(elevation.s)
+        # print(self.road_elevations_pos)
+
+    def json_all_baseroad(self, json_file):
+        fc = []
+        for road in self.open_drive.get_road(): 
+            self.init_road(road)
+            geometry_count = len(self.road_geometrys)
+            for geometry_idx, geometry in enumerate(self.road_geometrys):
+                pts = []
+                for s_pos in self.calc_interpolates(0, geometry.length):
+                    pos, tangent = geometry.calc_position(s_pos)
+                    pts.append(pos)
+                props = {}
+                props['road_id'] = road.id 
+                props['road_name'] = road.name  
+                props['road_length'] = road.length
+                props['geometry_length'] = geometry.length
+                props['geometry_index'] = geometry_idx
+                props['geometry_count'] = geometry_count
+
+                f = geojson.Feature(geometry=LineString(pts), properties=props)
+                fc.append(f)
+        self.save_json_features(fc, json_file)    
+        
+    def calc_abcd(self, a:float, b:float, c:float, d:float, s_pos:float):
+        ds = s_pos
+        return a + b * ds + c * ds * ds + d * ds * ds * ds
+    
+    # part_type == 1   planView geometry
+    # part_type == 2   laneOffset
+    # part_type == 3   laneSection
+    # part_type == 4   elevation
+    def calc_part_index(self, r_pos:float, part_type:int):
+        parts_pos = []
+        if part_type==1:
+            parts_pos = self.road_geometrys_pos.copy()
+        elif part_type==2:
+            parts_pos = self.road_laneOffsets_pos.copy()
+        elif part_type==3:
+            parts_pos = self.road_laneSections_pos.copy()
+        elif part_type==4:
+            parts_pos = self.road_elevations_pos.copy()
+        parts_pos.append(self.road_length)    
+        
+        part_index = -1
+        # TODO check
+        for idx, spos in enumerate(parts_pos[:-1]):
+            epos = parts_pos[idx+1]
+            if r_pos >= spos and r_pos <= epos:
+                part_index = idx
+                break
+        return part_index
+
+    def calc_geometry_position(self, r_pos:float):
+        tuple_pos = None
+        part_idx = self.calc_part_index(r_pos, part_type=1)
+        if part_idx > -1:
+            geometry = self.road_geometrys[part_idx]
+            s_pos = r_pos - geometry.s
+            tuple_pos = geometry.calc_position(s_pos)
+        return tuple_pos 
+
+    def calc_offset_value(self, r_pos:float):
+        val_offset = 0
+        part_idx = self.calc_part_index(r_pos, part_type=2)
+        if part_idx > -1:
+            offset = self.road_laneOffsets[part_idx]
+            s_pos = r_pos - offset.s
+            val_offset = self.calc_abcd(offset.a, offset.b, offset.c, offset.d, s_pos)
+        return val_offset 
+
+    def calc_road_section_lane_ids(self, lane_section):
+        lane_ids = []
+        lanes = []
+        if lane_section.left is not None:
+            lanes.extend(lane_section.left.lane)
+        if lane_section.right is not None:
+            lanes.extend(lane_section.right.lane)
+        if lane_section.center is not None:
+            lanes.append(lane_section.center.lane)
+
+        for lane in lanes:
+            lane_ids.append(lane.id)
+        return lane_ids
+
+    def calc_lane_width(self, lane, s_pos):
+        width = 0
+        if lane.id != 0:
+            lane_widths = lane.width.copy()
+            lane_widths.reverse()
+            for lane_width in lane_widths:
+                if s_pos >= lane_width.sOffset :
+                    width = self.calc_abcd(lane_width.a, lane_width.b, lane_width.c, lane_width.d, s_pos - lane_width.sOffset)
+                    break
+
+        return width   
+    
+    def calc_elevation(self, r_pos):
+        val_elev = 0
+        elevation_idx = self.calc_part_index(r_pos, part_type=4)
+        if elevation_idx > -1:
+            elevation = self.road_elevations[elevation_idx]
+            s_pos = r_pos - elevation.s
+            val_elev = self.calc_abcd(elevation.a, elevation.b, elevation.c, elevation.d, s_pos)
+        
+        return val_elev
+
+    def get_lane(self, lane_section, lane_id):
+        lane = None
+        
+        lanes = []
+        if lane_section.left is not None:
+            lanes.extend(lane_section.left.lane)
+        if lane_section.right is not None:
+            lanes.extend(lane_section.right.lane)
+        if lane_section.center is not None:
+            lanes.append(lane_section.center.lane)
+
+        for _lane in lanes:
+            if _lane.id == lane_id :
+                lane = _lane
+
+        return lane
+
+    def calc_road_section_lane_pts(self, road_id, section_id, lane_id):
+        sections_pos = self.road_laneSections_pos.copy()
+        sections_pos.append(self.road_length)        
+
+        laneSection = self.road_laneSections[section_id]
+        cur_section_s_pos = laneSection.s
+        cur_section_e_pos = sections_pos[section_id + 1]
+
+        pts = []
+        for r_pos in self.calc_interpolates(cur_section_s_pos, cur_section_e_pos):
+            s_pos = r_pos - cur_section_s_pos
+
+            pos, tangent = self.calc_geometry_position(r_pos)
+            val_offset = self.calc_offset_value(r_pos)
+            pos2, tangent2 = self.calc_lateral_offset(pos, tangent, abs(val_offset), True if val_offset > 0 else False)
+            
+            lane_ids = []
+            if lane_id == 0 :
+                lane_ids.append(lane_id)
+            elif lane_id > 0 :
+                for id in range(1, lane_id + 1):
+                    lane_ids.append(id)
+            elif lane_id < 0 :
+                for id in range(1, abs(lane_id) + 1):
+                    lane_ids.append(id * -1)
+
+            width_offset = 0        
+            for lane_id in lane_ids:
+                lane = self.get_lane(laneSection, lane_id)
+                width_offset += self.calc_lane_width(lane, s_pos)
+
+            pos3, tangent3 = self.calc_lateral_offset(pos2, tangent2, abs(width_offset), True if lane_id > 0 else False)
+
+            # add z value
+            x,y = pos3
+            z = self.calc_elevation(r_pos)
+            pos3 = (pos3[0], pos3[1], z)
+            x1 = self.x0 + x
+            y1 = self.y0 + y
+            lon, lat = self.gaussProjInvCal(x1,y1)
+            #print("######",self.x0, self.y0)
+            print(x,y,x1,y1,lon,lat)
+            #pos3 = (lon, lat, z)
+            pos3 = (lon, lat, 0)
+
+            pts.append(pos3)              
+        
+        return pts
+    
+    # ????mark??
+    def calc_road_section_lane_range_pts(self, road_id, section_id, lane_id, offset_pos0:float, offset_pos1:float):
+        sections_pos = self.road_laneSections_pos.copy()
+        sections_pos.append(self.road_length)        
+
+        laneSection = self.road_laneSections[section_id]
+        cur_section_s_pos = laneSection.s
+        cur_section_e_pos = sections_pos[section_id + 1]
+
+        pts = []
+        for r_pos in self.calc_interpolates(offset_pos0, offset_pos1):
+            s_pos = r_pos - cur_section_s_pos
+
+            # print(r_pos, s_pos, cur_section_s_pos, cur_section_e_pos, offset_pos0, offset_pos1)
+
+            pos, tangent = self.calc_geometry_position(r_pos)
+            val_offset = self.calc_offset_value(r_pos)
+            pos2, tangent2 = self.calc_lateral_offset(pos, tangent, abs(val_offset), True if val_offset > 0 else False)
+            
+            lane_ids = []
+            if lane_id == 0 :
+                lane_ids.append(lane_id)
+            elif lane_id > 0 :
+                for id in range(1, lane_id + 1):
+                    lane_ids.append(id)
+            elif lane_id < 0 :
+                for id in range(1, abs(lane_id) + 1):
+                    lane_ids.append(id * -1)
+
+            width_offset = 0        
+            for lane_id in lane_ids:
+                lane = self.get_lane(laneSection, lane_id)
+                width_offset += self.calc_lane_width(lane, s_pos)
+
+            pos3, tangent3 = self.calc_lateral_offset(pos2, tangent2, abs(width_offset), True if lane_id > 0 else False)
+
+            # add z value
+            x,y = pos3
+            z = self.calc_elevation(r_pos)
+            x1 = self.x0 + x
+            y1 = self.y0 + y
+            lon, lat = self.gaussProjInvCal(x1,y1)
+            #print("######",self.x0, self.y0)
+            #print(x,y,x1,y1,lon,lat)
+            # pos3 = (lon, lat, z)
+            pos3 = (lon, lat, 0)
+
+            pts.append(pos3)
+            # print(lane_ids)
+        
+        return pts
+
+    def json_all_baselane(self, json_file):
+        fc = []
+        for road in self.open_drive.get_road():  
+            self.init_road(road)
+            offset_count = len(self.road_laneOffsets)
+            offsets_pos = self.road_laneOffsets_pos.copy()
+            offsets_pos.append(road.length)
+
+            # print(road.id, offset_count)
+
+            for offset_idx, base_offset in enumerate(self.road_laneOffsets):
+                cur_offset_s_pos = base_offset.s
+                cur_offset_e_pos = offsets_pos[offset_idx + 1]                
+
+                pts = []
+                for r_pos in self.calc_interpolates(cur_offset_s_pos, cur_offset_e_pos):
+                    s_pos = r_pos - cur_offset_s_pos
+                    val_offset = self.calc_abcd(base_offset.a, base_offset.b, base_offset.c, base_offset.d, s_pos)
+                    pos, tangent = self.calc_geometry_position(r_pos)
+                    pos2, tangent2 = self.calc_lateral_offset(pos, tangent, abs(val_offset), True if val_offset > 0 else False)
+                    pts.append(pos2)
+
+                props = {}
+                props['road_id'] = road.id 
+                props['road_name'] = road.name  
+                props['road_length'] = road.length
+                props['offset_length'] = cur_offset_e_pos - cur_offset_s_pos
+                props['offset_idx'] = offset_idx
+                props['offset_count'] = offset_count
+
+                f = geojson.Feature(geometry=LineString(pts), properties=props)
+                fc.append(f)
+
+        self.save_json_features(fc, json_file)
+
+    def json_all_baselane2(self, json_file):
+        fc = []
+        for road in self.open_drive.get_road():  
+            self.init_road(road)
+            offset_count = len(self.road_laneOffsets)
+            
+            pts = []
+            for r_pos in self.calc_interpolates(0, road.length):
+                pos, tangent = self.calc_geometry_position(r_pos)
+                val_offset = self.calc_offset_value(r_pos)
+                pos2, tangent2 = self.calc_lateral_offset(pos, tangent, abs(val_offset), True if val_offset > 0 else False)
+                pts.append(pos2)
+
+            props = {}
+            props['road_id'] = road.id 
+            props['road_name'] = road.name  
+            props['road_length'] = road.length
+            # props['offset_length'] = cur_offset_e_pos - cur_offset_s_pos
+            # props['offset_idx'] = offset_idx
+            props['offset_count'] = offset_count
+
+            f = geojson.Feature(geometry=LineString(pts), properties=props)
+            fc.append(f)
+
+        self.save_json_features(fc, json_file)
+               
+    def json_all_lanes(self, json_file):
+        fc = []
+        for road in self.open_drive.get_road():  
+            self.init_road(road)
+            
+            for section_idx, laneSection in enumerate(self.road_laneSections):
+                
+                lane_ids = self.calc_road_section_lane_ids(laneSection)
+                for lane_id in lane_ids:
+                    pts = self.calc_road_section_lane_pts(road.id, section_idx, lane_id)
+                    
+                    props = {}
+                    props['road_id'] = road.id 
+                    props['road_name'] = road.name  
+                    props['road_length'] = road.length                    
+                    props['section_idx'] = section_idx
+                    props['lane_id'] = lane_id
+
+                    f = geojson.Feature(geometry=LineString(pts), properties=props)
+                    fc.append(f)
+
+        self.save_json_features(fc, json_file)    
+
+    def json_all_marks(self, json_file):
+        fc = []
+        for road in self.open_drive.get_road():  
+            self.init_road(road)
+
+            # if int(road.id) != 501:
+            #     continue
+
+            sections_pos = self.road_laneSections_pos.copy()
+            sections_pos.append(road.length)
+            
+            for section_idx, laneSection in enumerate(self.road_laneSections):
+                section_pos_range = laneSection.s, sections_pos[section_idx+1]
+                # print('section', road.id, section_idx, section_pos_range)
+                
+                lane_ids = self.calc_road_section_lane_ids(laneSection)
+                for lane_id in lane_ids:
+                    lane = self.get_lane(laneSection, lane_id)
+                    
+                    lanemarks_pos = []
+                    for lanemark in lane.roadMark:
+                        lanemarks_pos.append(lanemark.sOffset)
+                    lanemarks_pos.append(section_pos_range[1])
+                    
+                    for lane_mark_idx, lane_mark in enumerate(lane.roadMark):
+                        lane_mark_pos_range = section_pos_range[0] + lane_mark.sOffset, lanemarks_pos[lane_mark_idx+1]
+                        # print('lanemark', road.id, section_idx, lane_id, lane_mark_idx, lane_mark.sOffset, lane_mark_pos_range)
+
+                        pts = self.calc_road_section_lane_range_pts(road.id, section_idx, lane_id, lane_mark_pos_range[0], lane_mark_pos_range[1])
+                    
+                        props = {}
+                        props['road_id'] = road.id 
+                        props['road_name'] = road.name  
+                        props['road_length'] = road.length                    
+                        props['section_idx'] = section_idx
+                        props['lane_id'] = lane_id
+                        props['lane_mark_idx'] = lane_mark_idx
+                        props['lanemark_color'] = lane_mark.color
+                        props['lanemark_type'] = lane_mark.type_
+                        props['lanemark_weight'] = lane_mark.weight
+                        # color="standard" type="none" weight="standard
+
+                        f = geojson.Feature(geometry=LineString(pts), properties=props)
+                        fc.append(f)
+
+        self.save_json_features(fc, json_file) 
+
+    def json_all_objects(self, json_file):
+        fc = []
+        for road in self.open_drive.get_road():  
+            self.init_road(road)
+
+            for road_object in road.objects.object:
+                # print(road.id, road_object.id, road_object.s, road_object.t, road.length)   
+                
+                if road_object.s < 0 or road_object.s > road.length:
+                    continue
+
+                pos, tangent = self.calc_geometry_position(road_object.s)
+
+                offset = road_object.t
+                pos2, tangent2 = self.calc_lateral_offset(pos, tangent, abs(offset), True if offset>0 else False)
+
+                props = {}
+                props['roadid'] = road.id 
+                props['id'] = road_object.id 
+                props['type'] = road_object.type_
+                props['name'] = road_object.name
+                props['zOffset'] = road_object.zOffset                
+                props['length'] = road_object.length
+                props['width'] = road_object.width
+                props['height'] = road_object.height
+                props['hdg'] = road_object.hdg + tangent2
+                props['pitch'] = road_object.pitch
+                props['roll'] = road_object.roll   
+                
+                x,y = pos2
+                z = self.calc_elevation(road_object.s)
+                pos2 = (pos2[0], pos2[1], z)   
+
+                f = geojson.Feature(geometry=Point(pos2), properties=props)
+                fc.append(f)  
+
+        self.save_json_features(fc, json_file) 
+
+    def json_all_signals(self, json_file):
+        fc = []
+        for road in self.open_drive.get_road():  
+            self.init_road(road)
+
+            if road.signals is None:
+                continue
+
+            for signal in road.signals.signal:
+                if signal.s < 0 or signal.s > road.length:
+                    continue
+
+                pos, tangent = self.calc_geometry_position(signal.s)
+
+                offset = signal.t
+                pos2, tangent2 = self.calc_lateral_offset(pos, tangent, abs(offset), True if offset>0 else False)
+
+                # print(tangent, tangent2)
+        
+                props = {}
+                props['id'] = signal.id 
+                props['name'] = signal.name
+                props['dynamic'] = signal.dynamic 
+                props['orientation'] = signal.orientation
+                props['zOffset'] = signal.zOffset  
+                props['width'] = signal.width
+                props['height'] = signal.height
+                props['country'] = signal.country
+                props['type'] = signal.type_
+                props['subtype'] = signal.subtype
+                props['value'] = signal.value
+                props['text'] = signal.text
+                props['hOffset'] = signal.hOffset + tangent if signal.hOffset is not None else tangent
+                props['pitch'] = signal.pitch
+                props['roll'] = signal.roll
+                props['signal_tag'] = 'signal'                 
+
+                x,y = pos2
+                z = self.calc_elevation(signal.s)
+                pos2 = (pos2[0], pos2[1], z)             
+
+                f = geojson.Feature(geometry=Point(pos2), properties=props)
+                fc.append(f)  
+
+        self.save_json_features(fc, json_file)        
+
+    # ???????????
+    def calc_connection_lane_id(self, junction, connection_id):
+        from_lanes = []
+        to_lanes = []
+   
+        for connection in junction.connection:
+            if connection.id == connection_id:
+                for laneLink in connection.laneLink:
+                    from_lanes.append(laneLink.from_)
+                    from_lanes.append(laneLink.from_ + 1)
+                    to_lanes.append(laneLink.to)
+                    to_lanes.append(laneLink.to + 1)
+
+        # print(from_lanes, to_lanes)
+
+        from_lanes = list(set(from_lanes)) 
+        from_lanes.sort(reverse=True)
+
+        to_lanes = list(set(to_lanes))
+        to_lanes.sort(reverse=True)
+
+        # print(from_lanes, to_lanes)
+        return (from_lanes, to_lanes)
+    
+    # ????road??
+    def get_road(self, road_id):
+        road = None
+        for _road in self.open_drive.get_road():  
+            if _road.id == road_id:
+                road = _road
+        return road
+
+    # ????????
+    def json_all_crossings(self, json_file):
+        fc = []
+        for junction in self.open_drive.junction:
+            polygons = []
+            props = {}
+            for connection in junction.connection:
+                # print(junction.id, connection.id)
+                road = self.get_road(connection.connectingRoad)
+                self.init_road(road)
+                
+                from_lanes, to_lanes = self.calc_connection_lane_id(junction, connection.id)
+                # print(junction.id, connection.id, 'sections', len(self.road_laneSections), to_lanes)
+
+                # tail_pts = []
+                # section_id = 0
+                # for lane_id in to_lanes:
+                #     pts = self.calc_road_section_lane_pts(road.id, section_id, lane_id)
+                #     tail_pts.append(pts[0])
+
+                # head_pts = []
+                # section_id = len(self.road_laneSections) - 1 
+                # for lane_id in to_lanes:
+                #     pts = self.calc_road_section_lane_pts(road.id, section_id, lane_id)
+                #     head_pts.append(pts[0])
+
+                l_pts = []
+                for section_id, section in enumerate(self.road_laneSections):
+                    pts = self.calc_road_section_lane_pts(road.id, section_id, to_lanes[0])
+                    l_pts.extend(pts) 
+                    
+                r_pts = []
+                for section_id, section in enumerate(self.road_laneSections):
+                    pts = self.calc_road_section_lane_pts(road.id, section_id, to_lanes[-1])
+                    r_pts.extend(pts) 
+                
+                # ?????
+                fill_pts = []
+                # fill_pts.extend(tail_pts)
+                fill_pts.extend(r_pts)
+                # head_pts.reverse()
+                # fill_pts.extend(head_pts)
+                l_pts.reverse()
+                fill_pts.extend(l_pts)                
+                    
+                # ??????????
+                ring = LinearRing(fill_pts)
+                ring = ring.simplify(0.1)
+                gon = Polygon(ring)
+                polygon = gon.buffer(0)
+                polygons.append(polygon)
+    
+                # ??????
+                # props = {}
+                # f = geojson.Feature(geometry=polygon, properties=props)
+                # fc.append(f)    
+
+            out_gon = unary_union(polygons)
+            out_gon = out_gon.buffer(0.1)
+            # print(out_gon.area, out_gon.is_simple, out_gon.is_valid, out_gon.geom_type)
+
+            if out_gon.geom_type == 'MultiPolygon':   
+                for geom in out_gon.geoms:
+                    # print(geom)
+                    gon = Polygon(geom.exterior.coords)
+                    f = geojson.Feature(geometry=gon, properties=props)
+                    fc.append(f)
+            elif out_gon.geom_type == 'Polygon':
+                gon = Polygon(out_gon.exterior)
+                f = geojson.Feature(geometry=gon, properties=props)
+                fc.append(f)
+            else:
+                print('else else', out_gon.geometryType)               
+                        
+        self.save_json_features(fc, json_file)   
+
+    def save_json_features(self, fc, json_file):
+        with open(json_file , mode='w+') as f:
+            fs = geojson.FeatureCollection(fc)
+            dump = geojson.dumps(fs, sort_keys=True)
+            f.write(dump)
+            f.close()
+            
+            
+if __name__ == "__main__":
+
+    xodr_file = r'map_xiali.xodr'
+    opendrive = opendrive_parser.parse(xodr_file, silence=True)
+
+    convert = ConvertOpenDrive(opendrive, 0.5)
+
+    convert.json_all_baseroad(r'./tmp/all_baseroad_new.json')
+
+    convert.json_all_baselane(r'./tmp/all_baselane_new.json')
+
+    convert.json_all_baselane2(r'./tmp/all_baselane2_new.json')
+
+    convert.json_all_lanes(r'./tmp/all_lanes_new.json')
+
+    convert.json_all_marks(r'./tmp/all_marks_new.json')
+
+    convert.json_all_signals(r'./tmp/all_signals_new.json')
+
+    convert.json_all_objects(r'./tmp/all_objects_new.json')
+
+    convert.json_all_crossings(r'./tmp/all_crossings_new.json')
+
+

+ 87 - 0
src/tool/opendriveParser/eulerspiral.py

@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+
+import numpy as np
+from scipy import special
+
+
+__author__ = "Benjamin Orthen, Stefan Urban"
+__copyright__ = "TUM Cyber-Physical Systems Group"
+__credits__ = ["Priority Program SPP 1835 Cooperative Interacting Automobiles"]
+__version__ = "1.0.2"
+__maintainer__ = "Benjamin Orthen"
+__email__ = "commonroad-i06@in.tum.de"
+__status__ = "Released"
+
+
+class EulerSpiral:
+    """ """
+
+    def __init__(self, gamma):
+        self._gamma = gamma
+
+    @staticmethod
+    def createFromLengthAndCurvature(length, curvStart, curvEnd):
+        """Create an EulerSpiral from a given length with curveStart
+        and curvEnd. This is how the OpenDrive format specifies
+        EulerSpirals.
+
+        Args:
+          length: Length of EulerSpiral.
+          curvStart: Curvature at start of EulerSpiral.
+          curvEnd: Curvature at end of EulerSpiral.
+
+        Returns:
+          EulerSpiral: A new Clothoid.
+
+        """
+        # if length is zero, assume zero curvature
+        if length == 0:
+            return EulerSpiral(0)
+        return EulerSpiral(1 * (curvEnd - curvStart) / length)
+
+    def calc(self, s, x0=0, y0=0, kappa0=0, theta0=0):
+        """
+
+        Args:
+          s: 
+          x0:  (Default value = 0)
+          y0:  (Default value = 0)
+          kappa0:  (Default value = 0)
+          theta0:  (Default value = 0)
+
+        Returns:
+
+        """
+
+        # Start
+        C0 = x0 + 1j * y0
+
+        if self._gamma == 0 and kappa0 == 0:
+            # Straight line
+            Cs = C0 + np.exp(1j * theta0 * s)
+
+        elif self._gamma == 0 and kappa0 != 0:
+            # Arc
+            Cs = C0 + np.exp(1j * theta0) / kappa0 * (
+                np.sin(kappa0 * s) + 1j * (1 - np.cos(kappa0 * s))
+            )
+
+        else:
+            # Fresnel integrals
+            Sa, Ca = special.fresnel(
+                (kappa0 + self._gamma * s) / np.sqrt(np.pi * np.abs(self._gamma))
+            )
+            Sb, Cb = special.fresnel(kappa0 / np.sqrt(np.pi * np.abs(self._gamma)))
+
+            # Euler Spiral
+            Cs1 = np.sqrt(np.pi / np.abs(self._gamma)) * np.exp(
+                1j * (theta0 - kappa0 ** 2 / 2 / self._gamma)
+            )
+            Cs2 = np.sign(self._gamma) * (Ca - Cb) + 1j * Sa - 1j * Sb
+
+            Cs = C0 + Cs1 * Cs2
+
+        # Tangent at each point
+        theta = self._gamma * s ** 2 / 2 + kappa0 * s + theta0
+
+        return (Cs.real, Cs.imag, theta)

+ 17872 - 0
src/tool/opendriveParser/opendrive_parser_14H.py

@@ -0,0 +1,17872 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+#
+# Generated Mon Dec 13 16:16:53 2021 by generateDS.py version 2.40.6.
+# Python 3.9.7 (default, Sep 16 2021, 13:09:58)  [GCC 7.5.0]
+#
+# Command line options:
+#   ('-o', 'opendrive_parser_14H.py')
+#
+# Command line arguments:
+#   OpenDRIVE_1.4H.xsd
+#
+# Command line:
+#   /home/SENSETIME/jianxinyu/anaconda3/envs/neuralsim/bin/generateDS.py -o "opendrive_parser_14H.py" OpenDRIVE_1.4H.xsd
+#
+# Current working directory (os.getcwd()):
+#   OpendriveParser
+#
+
+import sys
+try:
+    ModulenotfoundExp_ = ModuleNotFoundError
+except NameError:
+    ModulenotfoundExp_ = ImportError
+from six.moves import zip_longest
+import os
+import re as re_
+import base64
+import datetime as datetime_
+import decimal as decimal_
+from lxml import etree as etree_
+
+
+Validate_simpletypes_ = True
+SaveElementTreeNode = True
+if sys.version_info.major == 2:
+    BaseStrType_ = basestring
+else:
+    BaseStrType_ = str
+
+
+def parsexml_(infile, parser=None, **kwargs):
+    if parser is None:
+        # Use the lxml ElementTree compatible parser so that, e.g.,
+        #   we ignore comments.
+        try:
+            parser = etree_.ETCompatXMLParser()
+        except AttributeError:
+            # fallback to xml.etree
+            parser = etree_.XMLParser()
+    try:
+        if isinstance(infile, os.PathLike):
+            infile = os.path.join(infile)
+    except AttributeError:
+        pass
+    doc = etree_.parse(infile, parser=parser, **kwargs)
+    return doc
+
+def parsexmlstring_(instring, parser=None, **kwargs):
+    if parser is None:
+        # Use the lxml ElementTree compatible parser so that, e.g.,
+        #   we ignore comments.
+        try:
+            parser = etree_.ETCompatXMLParser()
+        except AttributeError:
+            # fallback to xml.etree
+            parser = etree_.XMLParser()
+    element = etree_.fromstring(instring, parser=parser, **kwargs)
+    return element
+
+#
+# Namespace prefix definition table (and other attributes, too)
+#
+# The module generatedsnamespaces, if it is importable, must contain
+# a dictionary named GeneratedsNamespaceDefs.  This Python dictionary
+# should map element type names (strings) to XML schema namespace prefix
+# definitions.  The export method for any class for which there is
+# a namespace prefix definition, will export that definition in the
+# XML representation of that element.  See the export method of
+# any generated element type class for an example of the use of this
+# table.
+# A sample table is:
+#
+#     # File: generatedsnamespaces.py
+#
+#     GenerateDSNamespaceDefs = {
+#         "ElementtypeA": "http://www.xxx.com/namespaceA",
+#         "ElementtypeB": "http://www.xxx.com/namespaceB",
+#     }
+#
+# Additionally, the generatedsnamespaces module can contain a python
+# dictionary named GenerateDSNamespaceTypePrefixes that associates element
+# types with the namespace prefixes that are to be added to the
+# "xsi:type" attribute value.  See the _exportAttributes method of
+# any generated element type and the generation of "xsi:type" for an
+# example of the use of this table.
+# An example table:
+#
+#     # File: generatedsnamespaces.py
+#
+#     GenerateDSNamespaceTypePrefixes = {
+#         "ElementtypeC": "aaa:",
+#         "ElementtypeD": "bbb:",
+#     }
+#
+
+try:
+    from generatedsnamespaces import GenerateDSNamespaceDefs as GenerateDSNamespaceDefs_
+except ModulenotfoundExp_ :
+    GenerateDSNamespaceDefs_ = {}
+try:
+    from generatedsnamespaces import GenerateDSNamespaceTypePrefixes as GenerateDSNamespaceTypePrefixes_
+except ModulenotfoundExp_ :
+    GenerateDSNamespaceTypePrefixes_ = {}
+
+#
+# You can replace the following class definition by defining an
+# importable module named "generatedscollector" containing a class
+# named "GdsCollector".  See the default class definition below for
+# clues about the possible content of that class.
+#
+try:
+    from generatedscollector import GdsCollector as GdsCollector_
+except ModulenotfoundExp_ :
+
+    class GdsCollector_(object):
+
+        def __init__(self, messages=None):
+            if messages is None:
+                self.messages = []
+            else:
+                self.messages = messages
+
+        def add_message(self, msg):
+            self.messages.append(msg)
+
+        def get_messages(self):
+            return self.messages
+
+        def clear_messages(self):
+            self.messages = []
+
+        def print_messages(self):
+            for msg in self.messages:
+                print("Warning: {}".format(msg))
+
+        def write_messages(self, outstream):
+            for msg in self.messages:
+                outstream.write("Warning: {}\n".format(msg))
+
+
+#
+# The super-class for enum types
+#
+
+try:
+    from enum import Enum
+except ModulenotfoundExp_ :
+    Enum = object
+
+#
+# The root super-class for element type classes
+#
+# 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 ModulenotfoundExp_ as exp:
+    try:
+        from generatedssupersuper import GeneratedsSuperSuper
+    except ModulenotfoundExp_ as exp:
+        class GeneratedsSuperSuper(object):
+            pass
+    
+    class GeneratedsSuper(GeneratedsSuperSuper):
+        __hash__ = object.__hash__
+        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 __str__(self):
+            settings = {
+                'str_pretty_print': True,
+                'str_indent_level': 0,
+                'str_namespaceprefix': '',
+                'str_name': None,
+                'str_namespacedefs': '',
+            }
+            for n in settings:
+                if hasattr(self, n):
+                    setattr(settings[n], self[n])
+            if sys.version_info.major == 2:
+                from StringIO import StringIO
+            else:
+                from io import StringIO
+            output = StringIO()
+            self.export(
+                output,
+                settings['str_indent_level'],
+                pretty_print=settings['str_pretty_print'],
+                namespaceprefix_=settings['str_namespaceprefix'],
+                name_=settings['str_name'],
+                namespacedef_=settings['str_namespacedefs']
+            )
+            strval = output.getvalue()
+            output.close()
+            return strval
+        def gds_format_string(self, input_data, input_name=''):
+            return input_data
+        def gds_parse_string(self, input_data, node=None, input_name=''):
+            return input_data
+        def gds_validate_string(self, input_data, node=None, 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).decode('ascii')
+        def gds_validate_base64(self, input_data, node=None, input_name=''):
+            return input_data
+        def gds_format_integer(self, input_data, input_name=''):
+            return '%d' % int(input_data)
+        def gds_parse_integer(self, input_data, node=None, input_name=''):
+            try:
+                ival = int(input_data)
+            except (TypeError, ValueError) as exp:
+                raise_parse_error(node, 'Requires integer value: %s' % exp)
+            return ival
+        def gds_validate_integer(self, input_data, node=None, input_name=''):
+            try:
+                value = int(input_data)
+            except (TypeError, ValueError):
+                raise_parse_error(node, 'Requires integer value')
+            return value
+        def gds_format_integer_list(self, input_data, input_name=''):
+            if len(input_data) > 0 and not isinstance(input_data[0], BaseStrType_):
+                input_data = [str(s) for s in input_data]
+            return '%s' % ' '.join(input_data)
+        def gds_validate_integer_list(
+                self, input_data, node=None, input_name=''):
+            values = input_data.split()
+            for value in values:
+                try:
+                    int(value)
+                except (TypeError, ValueError):
+                    raise_parse_error(node, 'Requires sequence of integer values')
+            return values
+        def gds_format_float(self, input_data, input_name=''):
+            return ('%.15f' % float(input_data)).rstrip('0')
+        def gds_parse_float(self, input_data, node=None, input_name=''):
+            try:
+                fval_ = float(input_data)
+            except (TypeError, ValueError) as exp:
+                raise_parse_error(node, 'Requires float or double value: %s' % exp)
+            return fval_
+        def gds_validate_float(self, input_data, node=None, input_name=''):
+            try:
+                value = float(input_data)
+            except (TypeError, ValueError):
+                raise_parse_error(node, 'Requires float value')
+            return value
+        def gds_format_float_list(self, input_data, input_name=''):
+            if len(input_data) > 0 and not isinstance(input_data[0], BaseStrType_):
+                input_data = [str(s) for s in input_data]
+            return '%s' % ' '.join(input_data)
+        def gds_validate_float_list(
+                self, input_data, node=None, input_name=''):
+            values = input_data.split()
+            for value in values:
+                try:
+                    float(value)
+                except (TypeError, ValueError):
+                    raise_parse_error(node, 'Requires sequence of float values')
+            return values
+        def gds_format_decimal(self, input_data, input_name=''):
+            return_value = '%s' % input_data
+            if '.' in return_value:
+                return_value = return_value.rstrip('0')
+                if return_value.endswith('.'):
+                    return_value = return_value.rstrip('.')
+            return return_value
+        def gds_parse_decimal(self, input_data, node=None, input_name=''):
+            try:
+                decimal_value = decimal_.Decimal(input_data)
+            except (TypeError, ValueError):
+                raise_parse_error(node, 'Requires decimal value')
+            return decimal_value
+        def gds_validate_decimal(self, input_data, node=None, input_name=''):
+            try:
+                value = decimal_.Decimal(input_data)
+            except (TypeError, ValueError):
+                raise_parse_error(node, 'Requires decimal value')
+            return value
+        def gds_format_decimal_list(self, input_data, input_name=''):
+            if len(input_data) > 0 and not isinstance(input_data[0], BaseStrType_):
+                input_data = [str(s) for s in input_data]
+            return ' '.join([self.gds_format_decimal(item) for item in input_data])
+        def gds_validate_decimal_list(
+                self, input_data, node=None, input_name=''):
+            values = input_data.split()
+            for value in values:
+                try:
+                    decimal_.Decimal(value)
+                except (TypeError, ValueError):
+                    raise_parse_error(node, 'Requires sequence of decimal values')
+            return values
+        def gds_format_double(self, input_data, input_name=''):
+            return '%s' % input_data
+        def gds_parse_double(self, input_data, node=None, input_name=''):
+            try:
+                fval_ = float(input_data)
+            except (TypeError, ValueError) as exp:
+                raise_parse_error(node, 'Requires double or float value: %s' % exp)
+            return fval_
+        def gds_validate_double(self, input_data, node=None, input_name=''):
+            try:
+                value = float(input_data)
+            except (TypeError, ValueError):
+                raise_parse_error(node, 'Requires double or float value')
+            return value
+        def gds_format_double_list(self, input_data, input_name=''):
+            if len(input_data) > 0 and not isinstance(input_data[0], BaseStrType_):
+                input_data = [str(s) for s in input_data]
+            return '%s' % ' '.join(input_data)
+        def gds_validate_double_list(
+                self, input_data, node=None, input_name=''):
+            values = input_data.split()
+            for value in values:
+                try:
+                    float(value)
+                except (TypeError, ValueError):
+                    raise_parse_error(
+                        node, 'Requires sequence of double or float values')
+            return values
+        def gds_format_boolean(self, input_data, input_name=''):
+            return ('%s' % input_data).lower()
+        def gds_parse_boolean(self, input_data, node=None, input_name=''):
+            if input_data in ('true', '1'):
+                bval = True
+            elif input_data in ('false', '0'):
+                bval = False
+            else:
+                raise_parse_error(node, 'Requires boolean value')
+            return bval
+        def gds_validate_boolean(self, input_data, node=None, input_name=''):
+            if input_data not in (True, 1, False, 0, ):
+                raise_parse_error(
+                    node,
+                    'Requires boolean value '
+                    '(one of True, 1, False, 0)')
+            return input_data
+        def gds_format_boolean_list(self, input_data, input_name=''):
+            if len(input_data) > 0 and not isinstance(input_data[0], BaseStrType_):
+                input_data = [str(s) for s in input_data]
+            return '%s' % ' '.join(input_data)
+        def gds_validate_boolean_list(
+                self, input_data, node=None, input_name=''):
+            values = input_data.split()
+            for value in values:
+                value = self.gds_parse_boolean(value, node, input_name)
+                if value not in (True, 1, False, 0, ):
+                    raise_parse_error(
+                        node,
+                        'Requires sequence of boolean values '
+                        '(one of True, 1, False, 0)')
+            return values
+        def gds_validate_datetime(self, input_data, node=None, 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], "{}".format(micro_seconds).rjust(6, "0"), )
+                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=None, 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=None, 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
+        def gds_validate_simple_patterns(self, patterns, target):
+            # pat is a list of lists of strings/patterns.
+            # The target value must match at least one of the patterns
+            # in order for the test to succeed.
+            found1 = True
+            for patterns1 in patterns:
+                found2 = False
+                for patterns2 in patterns1:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
+                        found2 = True
+                        break
+                if not found2:
+                    found1 = False
+                    break
+            return found1
+        @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_check_cardinality_(
+                self, value, input_name,
+                min_occurs=0, max_occurs=1, required=None):
+            if value is None:
+                length = 0
+            elif isinstance(value, list):
+                length = len(value)
+            else:
+                length = 1
+            if required is not None :
+                if required and length < 1:
+                    self.gds_collector_.add_message(
+                        "Required value {}{} is missing".format(
+                            input_name, self.gds_get_node_lineno_()))
+            if length < min_occurs:
+                self.gds_collector_.add_message(
+                    "Number of values for {}{} is below "
+                    "the minimum allowed, "
+                    "expected at least {}, found {}".format(
+                        input_name, self.gds_get_node_lineno_(),
+                        min_occurs, length))
+            elif length > max_occurs:
+                self.gds_collector_.add_message(
+                    "Number of values for {}{} is above "
+                    "the maximum allowed, "
+                    "expected at most {}, found {}".format(
+                        input_name, self.gds_get_node_lineno_(),
+                        max_occurs, length))
+        def gds_validate_builtin_ST_(
+                self, validator, value, input_name,
+                min_occurs=None, max_occurs=None, required=None):
+            if value is not None:
+                try:
+                    validator(value, input_name=input_name)
+                except GDSParseError as parse_error:
+                    self.gds_collector_.add_message(str(parse_error))
+        def gds_validate_defined_ST_(
+                self, validator, value, input_name,
+                min_occurs=None, max_occurs=None, required=None):
+            if value is not None:
+                try:
+                    validator(value)
+                except GDSParseError as parse_error:
+                    self.gds_collector_.add_message(str(parse_error))
+        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):
+            # provide default value in case option --disable-xml is used.
+            content = ""
+            content = etree_.tostring(node, encoding="unicode")
+            return content
+        @classmethod
+        def gds_reverse_node_mapping(cls, mapping):
+            return dict(((v, k) for k, v in mapping.items()))
+        @staticmethod
+        def gds_encode(instring):
+            if sys.version_info.major == 2:
+                if ExternalEncoding:
+                    encoding = ExternalEncoding
+                else:
+                    encoding = 'utf-8'
+                return instring.encode(encoding)
+            else:
+                return instring
+        @staticmethod
+        def convert_unicode(instring):
+            if isinstance(instring, str):
+                result = quote_xml(instring)
+            elif sys.version_info.major == 2 and isinstance(instring, unicode):
+                result = quote_xml(instring).encode('utf8')
+            else:
+                result = GeneratedsSuper.gds_encode(str(instring))
+            return result
+        def __eq__(self, other):
+            def excl_select_objs_(obj):
+                return (obj[0] != 'parent_object_' and
+                        obj[0] != 'gds_collector_')
+            if type(self) != type(other):
+                return False
+            return all(x == y for x, y in zip_longest(
+                filter(excl_select_objs_, self.__dict__.items()),
+                filter(excl_select_objs_, other.__dict__.items())))
+        def __ne__(self, other):
+            return not self.__eq__(other)
+        # Django ETL transform hooks.
+        def gds_djo_etl_transform(self):
+            pass
+        def gds_djo_etl_transform_db_obj(self, dbobj):
+            pass
+        # SQLAlchemy ETL transform hooks.
+        def gds_sqa_etl_transform(self):
+            return 0, None
+        def gds_sqa_etl_transform_db_obj(self, dbobj):
+            pass
+        def gds_get_node_lineno_(self):
+            if (hasattr(self, "gds_elementtree_node_") and
+                    self.gds_elementtree_node_ is not None):
+                return ' near line {}'.format(
+                    self.gds_elementtree_node_.sourceline)
+            else:
+                return ""
+    
+    
+    def getSubclassFromModule_(module, class_):
+        '''Get the subclass of a class from a specific module.'''
+        name = class_.__name__ + 'Sub'
+        if hasattr(module, name):
+            return getattr(module, name)
+        else:
+            return None
+
+
+#
+# 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 = ''
+# Set this to false in order to deactivate during export, the use of
+# name space prefixes captured from the input document.
+UseCapturedNS_ = True
+CapturedNsmap_ = {}
+Tag_pattern_ = re_.compile(r'({.*})?(.*)')
+String_cleanup_pat_ = re_.compile(r"[\n\r\s]+")
+Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)')
+CDATA_pattern_ = re_.compile(r"<!\[CDATA\[.*?\]\]>", re_.DOTALL)
+
+# Change this to redirect the generated superclass module to use a
+# specific subclass module.
+CurrentSubclassModule_ = None
+
+#
+# Support/utility functions.
+#
+
+
+def showIndent(outfile, level, pretty_print=True):
+    if pretty_print:
+        for idx in range(level):
+            outfile.write('    ')
+
+
+def quote_xml(inStr):
+    "Escape markup chars, but do not modify CDATA sections."
+    if not inStr:
+        return ''
+    s1 = (isinstance(inStr, BaseStrType_) and inStr or '%s' % inStr)
+    s2 = ''
+    pos = 0
+    matchobjects = CDATA_pattern_.finditer(s1)
+    for mo in matchobjects:
+        s3 = s1[pos:mo.start()]
+        s2 += quote_xml_aux(s3)
+        s2 += s1[mo.start():mo.end()]
+        pos = mo.end()
+    s3 = s1[pos:]
+    s2 += quote_xml_aux(s3)
+    return s2
+
+
+def quote_xml_aux(inStr):
+    s1 = inStr.replace('&', '&amp;')
+    s1 = s1.replace('<', '&lt;')
+    s1 = s1.replace('>', '&gt;')
+    return s1
+
+
+def quote_attrib(inStr):
+    s1 = (isinstance(inStr, BaseStrType_) 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
+        if prefix == 'xml':
+            namespace = 'http://www.w3.org/XML/1998/namespace'
+        else:
+            namespace = node.nsmap.get(prefix)
+        if namespace is not None:
+            value = attrs.get('{%s}%s' % (namespace, name, ))
+    return value
+
+
+def encode_str_2_3(instr):
+    return instr
+
+
+class GDSParseError(Exception):
+    pass
+
+
+def raise_parse_error(node, msg):
+    if node is not None:
+        msg = '%s (element %s/line %d)' % (msg, node.tag, node.sourceline, )
+    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_=name,
+                pretty_print=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, mapping_=None, reverse_mapping_=None, nsmap_=None):
+        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, mapping_=None, reverse_mapping_=None, nsmap_=None):
+        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,
+            optional=0, child_attrs=None, choice=None):
+        self.name = name
+        self.data_type = data_type
+        self.container = container
+        self.child_attrs = child_attrs
+        self.choice = choice
+        self.optional = optional
+    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 set_child_attrs(self, child_attrs): self.child_attrs = child_attrs
+    def get_child_attrs(self): return self.child_attrs
+    def set_choice(self, choice): self.choice = choice
+    def get_choice(self): return self.choice
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
+
+
+def _cast(typ, value):
+    if typ is None or value is None:
+        return value
+    return typ(value)
+
+#
+# Data representation classes.
+#
+
+
+class access(str, Enum):
+    ALL='all'
+    CAR='car'
+    WOMEN='women'
+    HANDICAPPED='handicapped'
+    BUS='bus'
+    TRUCK='truck'
+    ELECTRIC='electric'
+    RESIDENTS='residents'
+
+
+class bridgeType(str, Enum):
+    CONCRETE='concrete'
+    STEEL='steel'
+    BRICK='brick'
+    WOOD='wood'
+
+
+class color(str, Enum):
+    STANDARD='standard'
+    BLUE='blue'
+    GREEN='green'
+    RED='red'
+    WHITE='white'
+    YELLOW='yellow'
+
+
+class contactPoint(str, Enum):
+    START='start'
+    END='end'
+
+
+class crossfallSide(str, Enum):
+    LEFT='left'
+    RIGHT='right'
+    BOTH='both'
+
+
+class dir(str, Enum):
+    _='+'
+    __1='-'
+
+
+class direction(str, Enum):
+    SAME='same'
+    OPPOSITE='opposite'
+
+
+class dynamic(str, Enum):
+    YES='yes'
+    NO='no'
+
+
+class elementType(str, Enum):
+    ROAD='road'
+    JUNCTION='junction'
+
+
+class junctionGroupType(str, Enum):
+    ROUNDABOUT='roundabout'
+    UNKNOWN='unknown'
+
+
+class laneChange(str, Enum):
+    INCREASE='increase'
+    DECREASE='decrease'
+    BOTH='both'
+    NONE='none'
+
+
+class laneType(str, Enum):
+    NONE='none'
+    DRIVING='driving'
+    STOP='stop'
+    SHOULDER='shoulder'
+    BIKING='biking'
+    SIDEWALK='sidewalk'
+    BORDER='border'
+    RESTRICTED='restricted'
+    PARKING='parking'
+    BIDIRECTIONAL='bidirectional'
+    MEDIAN='median'
+    SPECIAL_1='special1'
+    SPECIAL_2='special2'
+    SPECIAL_3='special3'
+    ROAD_WORKS='roadWorks'
+    TRAM='tram'
+    RAIL='rail'
+    ENTRY='entry'
+    EXIT='exit'
+    OFF_RAMP='offRamp'
+    ON_RAMP='onRamp'
+
+
+class max(str, Enum):
+    NOLIMIT='no limit'
+    UNDEFINED='undefined'
+
+
+class mode(str, Enum):
+    ATTACHED='attached'
+    ATTACHED_0='attached0'
+    GENUINE='genuine'
+
+
+class orientation(str, Enum):
+    _='+'
+    __1='-'
+    NONE='none'
+
+
+class pRange(str, Enum):
+    ARC_LENGTH='arcLength'
+    NORMALIZED='normalized'
+
+
+class parkingSpacemarkingSide(str, Enum):
+    FRONT='front'
+    REAR='rear'
+    LEFT='left'
+    RIGHT='right'
+
+
+class position(str, Enum):
+    DYNAMIC='dynamic'
+    STRAIGHT='straight'
+    TURN='turn'
+
+
+class purpose(str, Enum):
+    ELEVATION='elevation'
+    FRICTION='friction'
+
+
+class restriction(str, Enum):
+    SIMULATOR='simulator'
+    AUTONOMOUSTRAFFIC='autonomous traffic'
+    PEDESTRIAN='pedestrian'
+    NONE='none'
+
+
+class roadType(str, Enum):
+    UNKNOWN='unknown'
+    RURAL='rural'
+    MOTORWAY='motorway'
+    TOWN='town'
+    LOW_SPEED='lowSpeed'
+    PEDESTRIAN='pedestrian'
+    BICYCLE='bicycle'
+
+
+class roadmarkType(str, Enum):
+    NONE='none'
+    SOLID='solid'
+    BROKEN='broken'
+    SOLIDSOLID='solid solid'
+    SOLIDBROKEN='solid broken'
+    BROKENSOLID='broken solid'
+    BROKENBROKEN='broken broken'
+    BOTTSDOTS='botts dots'
+    GRASS='grass'
+    CURB='curb'
+
+
+class rule(str, Enum):
+    NOPASSING='no passing'
+    CAUTION='caution'
+    NONE='none'
+
+
+class side(str, Enum):
+    LEFT='left'
+    RIGHT='right'
+
+
+class singleSide(str, Enum):
+    TRUE='true'
+    FALSE='false'
+
+
+class stationType(str, Enum):
+    SMALL='small'
+    MEDIUM='medium'
+    LARGE='large'
+
+
+class surfaceOrientation(str, Enum):
+    SAME='same'
+    OPPOSITE='opposite'
+
+
+class tunnelType(str, Enum):
+    STANDARD='standard'
+    UNDERPASS='underpass'
+
+
+class unit(str, Enum):
+    M='m'
+    KM='km'
+    FT='ft'
+    MILE='mile'
+    MS='m/s'
+    MPH='mph'
+    KMH='km/h'
+    KG='kg'
+    T='t'
+    _='%'
+
+
+class weight(str, Enum):
+    STANDARD='standard'
+    BOLD='bold'
+
+
+class OpenDRIVE(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, header=None, road=None, controller=None, junction=None, junctionGroup=None, station=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.header = header
+        self.header_nsprefix_ = None
+        if road is None:
+            self.road = []
+        else:
+            self.road = road
+        self.road_nsprefix_ = None
+        if controller is None:
+            self.controller = []
+        else:
+            self.controller = controller
+        self.controller_nsprefix_ = None
+        if junction is None:
+            self.junction = []
+        else:
+            self.junction = junction
+        self.junction_nsprefix_ = None
+        if junctionGroup is None:
+            self.junctionGroup = []
+        else:
+            self.junctionGroup = junctionGroup
+        self.junctionGroup_nsprefix_ = None
+        if station is None:
+            self.station = []
+        else:
+            self.station = station
+        self.station_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, OpenDRIVE)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if OpenDRIVE.subclass:
+            return OpenDRIVE.subclass(*args_, **kwargs_)
+        else:
+            return OpenDRIVE(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_header(self):
+        return self.header
+    def set_header(self, header):
+        self.header = header
+    def get_road(self):
+        return self.road
+    def set_road(self, road):
+        self.road = road
+    def add_road(self, value):
+        self.road.append(value)
+    def insert_road_at(self, index, value):
+        self.road.insert(index, value)
+    def replace_road_at(self, index, value):
+        self.road[index] = value
+    def get_controller(self):
+        return self.controller
+    def set_controller(self, controller):
+        self.controller = controller
+    def add_controller(self, value):
+        self.controller.append(value)
+    def insert_controller_at(self, index, value):
+        self.controller.insert(index, value)
+    def replace_controller_at(self, index, value):
+        self.controller[index] = value
+    def get_junction(self):
+        return self.junction
+    def set_junction(self, junction):
+        self.junction = junction
+    def add_junction(self, value):
+        self.junction.append(value)
+    def insert_junction_at(self, index, value):
+        self.junction.insert(index, value)
+    def replace_junction_at(self, index, value):
+        self.junction[index] = value
+    def get_junctionGroup(self):
+        return self.junctionGroup
+    def set_junctionGroup(self, junctionGroup):
+        self.junctionGroup = junctionGroup
+    def add_junctionGroup(self, value):
+        self.junctionGroup.append(value)
+    def insert_junctionGroup_at(self, index, value):
+        self.junctionGroup.insert(index, value)
+    def replace_junctionGroup_at(self, index, value):
+        self.junctionGroup[index] = value
+    def get_station(self):
+        return self.station
+    def set_station(self, station):
+        self.station = station
+    def add_station(self, value):
+        self.station.append(value)
+    def insert_station_at(self, index, value):
+        self.station.insert(index, value)
+    def replace_station_at(self, index, value):
+        self.station[index] = value
+    def _hasContent(self):
+        if (
+            self.header is not None or
+            self.road or
+            self.controller or
+            self.junction or
+            self.junctionGroup or
+            self.station
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='OpenDRIVE', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('OpenDRIVE')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'OpenDRIVE':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='OpenDRIVE')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='OpenDRIVE', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='OpenDRIVE'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='OpenDRIVE', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.header is not None:
+            namespaceprefix_ = self.header_nsprefix_ + ':' if (UseCapturedNS_ and self.header_nsprefix_) else ''
+            self.header.export(outfile, level, namespaceprefix_, namespacedef_='', name_='header', pretty_print=pretty_print)
+        for road_ in self.road:
+            namespaceprefix_ = self.road_nsprefix_ + ':' if (UseCapturedNS_ and self.road_nsprefix_) else ''
+            road_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='road', pretty_print=pretty_print)
+        for controller_ in self.controller:
+            namespaceprefix_ = self.controller_nsprefix_ + ':' if (UseCapturedNS_ and self.controller_nsprefix_) else ''
+            controller_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='controller', pretty_print=pretty_print)
+        for junction_ in self.junction:
+            namespaceprefix_ = self.junction_nsprefix_ + ':' if (UseCapturedNS_ and self.junction_nsprefix_) else ''
+            junction_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='junction', pretty_print=pretty_print)
+        for junctionGroup_ in self.junctionGroup:
+            namespaceprefix_ = self.junctionGroup_nsprefix_ + ':' if (UseCapturedNS_ and self.junctionGroup_nsprefix_) else ''
+            junctionGroup_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='junctionGroup', pretty_print=pretty_print)
+        for station_ in self.station:
+            namespaceprefix_ = self.station_nsprefix_ + ':' if (UseCapturedNS_ and self.station_nsprefix_) else ''
+            station_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='station', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'header':
+            obj_ = headerType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.header = obj_
+            obj_.original_tagname_ = 'header'
+        elif nodeName_ == 'road':
+            obj_ = roadType1.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.road.append(obj_)
+            obj_.original_tagname_ = 'road'
+        elif nodeName_ == 'controller':
+            obj_ = controllerType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.controller.append(obj_)
+            obj_.original_tagname_ = 'controller'
+        elif nodeName_ == 'junction':
+            obj_ = junctionType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.junction.append(obj_)
+            obj_.original_tagname_ = 'junction'
+        elif nodeName_ == 'junctionGroup':
+            obj_ = junctionGroupType5.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.junctionGroup.append(obj_)
+            obj_.original_tagname_ = 'junctionGroup'
+        elif nodeName_ == 'station':
+            obj_ = stationType6.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.station.append(obj_)
+            obj_.original_tagname_ = 'station'
+# end class OpenDRIVE
+
+
+class userData(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, code=None, value=None, anytypeobjs_=None, valueOf_=None, mixedclass_=None, content_=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.code = _cast(None, code)
+        self.code_nsprefix_ = None
+        self.value = _cast(None, value)
+        self.value_nsprefix_ = None
+        if anytypeobjs_ is None:
+            self.anytypeobjs_ = []
+        else:
+            self.anytypeobjs_ = anytypeobjs_
+        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 CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, userData)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if userData.subclass:
+            return userData.subclass(*args_, **kwargs_)
+        else:
+            return userData(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_anytypeobjs_(self): return self.anytypeobjs_
+    def set_anytypeobjs_(self, anytypeobjs_): self.anytypeobjs_ = anytypeobjs_
+    def add_anytypeobjs_(self, value): self.anytypeobjs_.append(value)
+    def insert_anytypeobjs_(self, index, value): self._anytypeobjs_[index] = value
+    def get_code(self):
+        return self.code
+    def set_code(self, code):
+        self.code = code
+    def get_value(self):
+        return self.value
+    def set_value(self, value):
+        self.value = value
+    def get_valueOf_(self): return self.valueOf_
+    def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
+    def _hasContent(self):
+        if (
+            self.anytypeobjs_ or
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_) or
+            self.content_
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='userData', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('userData')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'userData':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='userData')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='userData', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='userData'):
+        if self.code is not None and 'code' not in already_processed:
+            already_processed.add('code')
+            outfile.write(' code=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.code), input_name='code')), ))
+        if self.value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            outfile.write(' value=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.value), input_name='value')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='userData', fromsubclass_=False, pretty_print=True):
+        if not fromsubclass_:
+            for item_ in self.content_:
+                item_.export(outfile, level, item_.name, namespaceprefix_, pretty_print=pretty_print)
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if not fromsubclass_:
+            for obj_ in self.anytypeobjs_:
+                showIndent(outfile, level, pretty_print)
+                outfile.write(obj_)
+                outfile.write('\n')
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('code', node)
+        if value is not None and 'code' not in already_processed:
+            already_processed.add('code')
+            self.code = value
+        value = find_attr_value_('value', node)
+        if value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            self.value = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == '':
+            obj_ = __ANY__.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            obj_ = self.mixedclass_(MixedContainer.CategoryComplex,
+                MixedContainer.TypeNone, '', obj_)
+            self.content_.append(obj_)
+            if hasattr(self, 'add_'):
+              self.add_(obj_.value)
+            elif hasattr(self, 'set_'):
+              self.set_(obj_.value)
+        if not fromsubclass_ and child_.tail is not None:
+            obj_ = self.mixedclass_(MixedContainer.CategoryText,
+                MixedContainer.TypeNone, '', child_.tail)
+            self.content_.append(obj_)
+# end class userData
+
+
+class include(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, file=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.file = _cast(None, file)
+        self.file_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, include)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if include.subclass:
+            return include.subclass(*args_, **kwargs_)
+        else:
+            return include(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_file(self):
+        return self.file
+    def set_file(self, file):
+        self.file = file
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='include', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('include')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'include':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='include')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='include', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='include'):
+        if self.file is not None and 'file' not in already_processed:
+            already_processed.add('file')
+            outfile.write(' file=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.file), input_name='file')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='include', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('file', node)
+        if value is not None and 'file' not in already_processed:
+            already_processed.add('file')
+            self.file = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class include
+
+
+class laneValidity(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, fromLane=None, toLane=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.fromLane = _cast(int, fromLane)
+        self.fromLane_nsprefix_ = None
+        self.toLane = _cast(int, toLane)
+        self.toLane_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, laneValidity)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if laneValidity.subclass:
+            return laneValidity.subclass(*args_, **kwargs_)
+        else:
+            return laneValidity(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_fromLane(self):
+        return self.fromLane
+    def set_fromLane(self, fromLane):
+        self.fromLane = fromLane
+    def get_toLane(self):
+        return self.toLane
+    def set_toLane(self, toLane):
+        self.toLane = toLane
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='laneValidity', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('laneValidity')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'laneValidity':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='laneValidity')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='laneValidity', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='laneValidity'):
+        if self.fromLane is not None and 'fromLane' not in already_processed:
+            already_processed.add('fromLane')
+            outfile.write(' fromLane="%s"' % self.gds_format_integer(self.fromLane, input_name='fromLane'))
+        if self.toLane is not None and 'toLane' not in already_processed:
+            already_processed.add('toLane')
+            outfile.write(' toLane="%s"' % self.gds_format_integer(self.toLane, input_name='toLane'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='laneValidity', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('fromLane', node)
+        if value is not None and 'fromLane' not in already_processed:
+            already_processed.add('fromLane')
+            self.fromLane = self.gds_parse_integer(value, node, 'fromLane')
+        value = find_attr_value_('toLane', node)
+        if value is not None and 'toLane' not in already_processed:
+            already_processed.add('toLane')
+            self.toLane = self.gds_parse_integer(value, node, 'toLane')
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class laneValidity
+
+
+class parkingSpace(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, access=None, restrictions=None, marking=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.access = _cast(None, access)
+        self.access_nsprefix_ = None
+        self.restrictions = _cast(None, restrictions)
+        self.restrictions_nsprefix_ = None
+        if marking is None:
+            self.marking = []
+        else:
+            self.marking = marking
+        self.marking_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, parkingSpace)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if parkingSpace.subclass:
+            return parkingSpace.subclass(*args_, **kwargs_)
+        else:
+            return parkingSpace(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_marking(self):
+        return self.marking
+    def set_marking(self, marking):
+        self.marking = marking
+    def add_marking(self, value):
+        self.marking.append(value)
+    def insert_marking_at(self, index, value):
+        self.marking.insert(index, value)
+    def replace_marking_at(self, index, value):
+        self.marking[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_access(self):
+        return self.access
+    def set_access(self, access):
+        self.access = access
+    def get_restrictions(self):
+        return self.restrictions
+    def set_restrictions(self, restrictions):
+        self.restrictions = restrictions
+    def validate_access(self, value):
+        # Validate type access, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['all', 'car', 'women', 'handicapped', 'bus', 'truck', 'electric', 'residents']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on access' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.marking or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='parkingSpace', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('parkingSpace')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'parkingSpace':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='parkingSpace')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='parkingSpace', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='parkingSpace'):
+        if self.access is not None and 'access' not in already_processed:
+            already_processed.add('access')
+            outfile.write(' access=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.access), input_name='access')), ))
+        if self.restrictions is not None and 'restrictions' not in already_processed:
+            already_processed.add('restrictions')
+            outfile.write(' restrictions=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.restrictions), input_name='restrictions')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='parkingSpace', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for marking_ in self.marking:
+            namespaceprefix_ = self.marking_nsprefix_ + ':' if (UseCapturedNS_ and self.marking_nsprefix_) else ''
+            marking_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='marking', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('access', node)
+        if value is not None and 'access' not in already_processed:
+            already_processed.add('access')
+            self.access = value
+            self.validate_access(self.access)    # validate type access
+        value = find_attr_value_('restrictions', node)
+        if value is not None and 'restrictions' not in already_processed:
+            already_processed.add('restrictions')
+            self.restrictions = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'marking':
+            obj_ = markingType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.marking.append(obj_)
+            obj_.original_tagname_ = 'marking'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class parkingSpace
+
+
+class lane(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, type_=None, level=None, link=None, width=None, border=None, roadMark=None, material=None, visibility=None, speed=None, access=None, height=None, rule=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(int, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.level = _cast(None, level)
+        self.level_nsprefix_ = None
+        self.link = link
+        self.link_nsprefix_ = None
+        if width is None:
+            self.width = []
+        else:
+            self.width = width
+        self.width_nsprefix_ = None
+        if border is None:
+            self.border = []
+        else:
+            self.border = border
+        self.border_nsprefix_ = None
+        if roadMark is None:
+            self.roadMark = []
+        else:
+            self.roadMark = roadMark
+        self.roadMark_nsprefix_ = None
+        if material is None:
+            self.material = []
+        else:
+            self.material = material
+        self.material_nsprefix_ = None
+        if visibility is None:
+            self.visibility = []
+        else:
+            self.visibility = visibility
+        self.visibility_nsprefix_ = None
+        if speed is None:
+            self.speed = []
+        else:
+            self.speed = speed
+        self.speed_nsprefix_ = None
+        if access is None:
+            self.access = []
+        else:
+            self.access = access
+        self.access_nsprefix_ = None
+        if height is None:
+            self.height = []
+        else:
+            self.height = height
+        self.height_nsprefix_ = None
+        if rule is None:
+            self.rule = []
+        else:
+            self.rule = rule
+        self.rule_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, lane)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if lane.subclass:
+            return lane.subclass(*args_, **kwargs_)
+        else:
+            return lane(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_link(self):
+        return self.link
+    def set_link(self, link):
+        self.link = link
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def add_width(self, value):
+        self.width.append(value)
+    def insert_width_at(self, index, value):
+        self.width.insert(index, value)
+    def replace_width_at(self, index, value):
+        self.width[index] = value
+    def get_border(self):
+        return self.border
+    def set_border(self, border):
+        self.border = border
+    def add_border(self, value):
+        self.border.append(value)
+    def insert_border_at(self, index, value):
+        self.border.insert(index, value)
+    def replace_border_at(self, index, value):
+        self.border[index] = value
+    def get_roadMark(self):
+        return self.roadMark
+    def set_roadMark(self, roadMark):
+        self.roadMark = roadMark
+    def add_roadMark(self, value):
+        self.roadMark.append(value)
+    def insert_roadMark_at(self, index, value):
+        self.roadMark.insert(index, value)
+    def replace_roadMark_at(self, index, value):
+        self.roadMark[index] = value
+    def get_material(self):
+        return self.material
+    def set_material(self, material):
+        self.material = material
+    def add_material(self, value):
+        self.material.append(value)
+    def insert_material_at(self, index, value):
+        self.material.insert(index, value)
+    def replace_material_at(self, index, value):
+        self.material[index] = value
+    def get_visibility(self):
+        return self.visibility
+    def set_visibility(self, visibility):
+        self.visibility = visibility
+    def add_visibility(self, value):
+        self.visibility.append(value)
+    def insert_visibility_at(self, index, value):
+        self.visibility.insert(index, value)
+    def replace_visibility_at(self, index, value):
+        self.visibility[index] = value
+    def get_speed(self):
+        return self.speed
+    def set_speed(self, speed):
+        self.speed = speed
+    def add_speed(self, value):
+        self.speed.append(value)
+    def insert_speed_at(self, index, value):
+        self.speed.insert(index, value)
+    def replace_speed_at(self, index, value):
+        self.speed[index] = value
+    def get_access(self):
+        return self.access
+    def set_access(self, access):
+        self.access = access
+    def add_access(self, value):
+        self.access.append(value)
+    def insert_access_at(self, index, value):
+        self.access.insert(index, value)
+    def replace_access_at(self, index, value):
+        self.access[index] = value
+    def get_height(self):
+        return self.height
+    def set_height(self, height):
+        self.height = height
+    def add_height(self, value):
+        self.height.append(value)
+    def insert_height_at(self, index, value):
+        self.height.insert(index, value)
+    def replace_height_at(self, index, value):
+        self.height[index] = value
+    def get_rule(self):
+        return self.rule
+    def set_rule(self, rule):
+        self.rule = rule
+    def add_rule(self, value):
+        self.rule.append(value)
+    def insert_rule_at(self, index, value):
+        self.rule.insert(index, value)
+    def replace_rule_at(self, index, value):
+        self.rule[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_level(self):
+        return self.level
+    def set_level(self, level):
+        self.level = level
+    def validate_laneType(self, value):
+        # Validate type laneType, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['none', 'driving', 'stop', 'shoulder', 'biking', 'sidewalk', 'border', 'restricted', 'parking', 'bidirectional', 'median', 'special1', 'special2', 'special3', 'roadWorks', 'tram', 'rail', 'entry', 'exit', 'offRamp', 'onRamp']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on laneType' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_singleSide(self, value):
+        # Validate type singleSide, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['true', 'false']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on singleSide' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.link is not None or
+            self.width or
+            self.border or
+            self.roadMark or
+            self.material or
+            self.visibility or
+            self.speed or
+            self.access or
+            self.height or
+            self.rule or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='lane', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('lane')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'lane':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='lane')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='lane', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='lane'):
+        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.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+        if self.level is not None and 'level' not in already_processed:
+            already_processed.add('level')
+            outfile.write(' level=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.level), input_name='level')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='lane', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.link is not None:
+            namespaceprefix_ = self.link_nsprefix_ + ':' if (UseCapturedNS_ and self.link_nsprefix_) else ''
+            self.link.export(outfile, level, namespaceprefix_, namespacedef_='', name_='link', pretty_print=pretty_print)
+        for width_ in self.width:
+            namespaceprefix_ = self.width_nsprefix_ + ':' if (UseCapturedNS_ and self.width_nsprefix_) else ''
+            width_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='width', pretty_print=pretty_print)
+        for border_ in self.border:
+            namespaceprefix_ = self.border_nsprefix_ + ':' if (UseCapturedNS_ and self.border_nsprefix_) else ''
+            border_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='border', pretty_print=pretty_print)
+        for roadMark_ in self.roadMark:
+            namespaceprefix_ = self.roadMark_nsprefix_ + ':' if (UseCapturedNS_ and self.roadMark_nsprefix_) else ''
+            roadMark_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='roadMark', pretty_print=pretty_print)
+        for material_ in self.material:
+            namespaceprefix_ = self.material_nsprefix_ + ':' if (UseCapturedNS_ and self.material_nsprefix_) else ''
+            material_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='material', pretty_print=pretty_print)
+        for visibility_ in self.visibility:
+            namespaceprefix_ = self.visibility_nsprefix_ + ':' if (UseCapturedNS_ and self.visibility_nsprefix_) else ''
+            visibility_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='visibility', pretty_print=pretty_print)
+        for speed_ in self.speed:
+            namespaceprefix_ = self.speed_nsprefix_ + ':' if (UseCapturedNS_ and self.speed_nsprefix_) else ''
+            speed_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='speed', pretty_print=pretty_print)
+        for access_ in self.access:
+            namespaceprefix_ = self.access_nsprefix_ + ':' if (UseCapturedNS_ and self.access_nsprefix_) else ''
+            access_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='access', pretty_print=pretty_print)
+        for height_ in self.height:
+            namespaceprefix_ = self.height_nsprefix_ + ':' if (UseCapturedNS_ and self.height_nsprefix_) else ''
+            height_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='height', pretty_print=pretty_print)
+        for rule_ in self.rule:
+            namespaceprefix_ = self.rule_nsprefix_ + ':' if (UseCapturedNS_ and self.rule_nsprefix_) else ''
+            rule_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='rule', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = self.gds_parse_integer(value, node, 'id')
+        value = find_attr_value_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            self.type_ = value
+            self.validate_laneType(self.type_)    # validate type laneType
+        value = find_attr_value_('level', node)
+        if value is not None and 'level' not in already_processed:
+            already_processed.add('level')
+            self.level = value
+            self.validate_singleSide(self.level)    # validate type singleSide
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'link':
+            obj_ = linkType7.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.link = obj_
+            obj_.original_tagname_ = 'link'
+        elif nodeName_ == 'width':
+            obj_ = widthType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.width.append(obj_)
+            obj_.original_tagname_ = 'width'
+        elif nodeName_ == 'border':
+            obj_ = borderType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.border.append(obj_)
+            obj_.original_tagname_ = 'border'
+        elif nodeName_ == 'roadMark':
+            obj_ = roadMarkType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.roadMark.append(obj_)
+            obj_.original_tagname_ = 'roadMark'
+        elif nodeName_ == 'material':
+            obj_ = materialType12.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.material.append(obj_)
+            obj_.original_tagname_ = 'material'
+        elif nodeName_ == 'visibility':
+            obj_ = visibilityType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.visibility.append(obj_)
+            obj_.original_tagname_ = 'visibility'
+        elif nodeName_ == 'speed':
+            obj_ = speedType13.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.speed.append(obj_)
+            obj_.original_tagname_ = 'speed'
+        elif nodeName_ == 'access':
+            obj_ = accessType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.access.append(obj_)
+            obj_.original_tagname_ = 'access'
+        elif nodeName_ == 'height':
+            obj_ = heightType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.height.append(obj_)
+            obj_.original_tagname_ = 'height'
+        elif nodeName_ == 'rule':
+            obj_ = ruleType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.rule.append(obj_)
+            obj_.original_tagname_ = 'rule'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class lane
+
+
+class centerLane(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, type_=None, level=None, link=None, roadMark=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(int, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.level = _cast(None, level)
+        self.level_nsprefix_ = None
+        self.link = link
+        self.link_nsprefix_ = None
+        if roadMark is None:
+            self.roadMark = []
+        else:
+            self.roadMark = roadMark
+        self.roadMark_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, centerLane)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if centerLane.subclass:
+            return centerLane.subclass(*args_, **kwargs_)
+        else:
+            return centerLane(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_link(self):
+        return self.link
+    def set_link(self, link):
+        self.link = link
+    def get_roadMark(self):
+        return self.roadMark
+    def set_roadMark(self, roadMark):
+        self.roadMark = roadMark
+    def add_roadMark(self, value):
+        self.roadMark.append(value)
+    def insert_roadMark_at(self, index, value):
+        self.roadMark.insert(index, value)
+    def replace_roadMark_at(self, index, value):
+        self.roadMark[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_level(self):
+        return self.level
+    def set_level(self, level):
+        self.level = level
+    def validate_laneType(self, value):
+        # Validate type laneType, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['none', 'driving', 'stop', 'shoulder', 'biking', 'sidewalk', 'border', 'restricted', 'parking', 'bidirectional', 'median', 'special1', 'special2', 'special3', 'roadWorks', 'tram', 'rail', 'entry', 'exit', 'offRamp', 'onRamp']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on laneType' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_singleSide(self, value):
+        # Validate type singleSide, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['true', 'false']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on singleSide' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.link is not None or
+            self.roadMark or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='centerLane', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('centerLane')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'centerLane':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='centerLane')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='centerLane', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='centerLane'):
+        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.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+        if self.level is not None and 'level' not in already_processed:
+            already_processed.add('level')
+            outfile.write(' level=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.level), input_name='level')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='centerLane', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.link is not None:
+            namespaceprefix_ = self.link_nsprefix_ + ':' if (UseCapturedNS_ and self.link_nsprefix_) else ''
+            self.link.export(outfile, level, namespaceprefix_, namespacedef_='', name_='link', pretty_print=pretty_print)
+        for roadMark_ in self.roadMark:
+            namespaceprefix_ = self.roadMark_nsprefix_ + ':' if (UseCapturedNS_ and self.roadMark_nsprefix_) else ''
+            roadMark_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='roadMark', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = self.gds_parse_integer(value, node, 'id')
+        value = find_attr_value_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            self.type_ = value
+            self.validate_laneType(self.type_)    # validate type laneType
+        value = find_attr_value_('level', node)
+        if value is not None and 'level' not in already_processed:
+            already_processed.add('level')
+            self.level = value
+            self.validate_singleSide(self.level)    # validate type singleSide
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'link':
+            obj_ = linkType14.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.link = obj_
+            obj_.original_tagname_ = 'link'
+        elif nodeName_ == 'roadMark':
+            obj_ = roadMarkType17.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.roadMark.append(obj_)
+            obj_.original_tagname_ = 'roadMark'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class centerLane
+
+
+class headerType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, revMajor=None, revMinor=None, name=None, version=None, date=None, north=None, south=None, east=None, west=None, vendor=None, geoReference=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.revMajor = _cast(int, revMajor)
+        self.revMajor_nsprefix_ = None
+        self.revMinor = _cast(int, revMinor)
+        self.revMinor_nsprefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.version = _cast(float, version)
+        self.version_nsprefix_ = None
+        self.date = _cast(None, date)
+        self.date_nsprefix_ = None
+        self.north = _cast(float, north)
+        self.north_nsprefix_ = None
+        self.south = _cast(float, south)
+        self.south_nsprefix_ = None
+        self.east = _cast(float, east)
+        self.east_nsprefix_ = None
+        self.west = _cast(float, west)
+        self.west_nsprefix_ = None
+        self.vendor = _cast(None, vendor)
+        self.vendor_nsprefix_ = None
+        self.geoReference = geoReference
+        self.geoReference_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, headerType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if headerType.subclass:
+            return headerType.subclass(*args_, **kwargs_)
+        else:
+            return headerType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_geoReference(self):
+        return self.geoReference
+    def set_geoReference(self, geoReference):
+        self.geoReference = geoReference
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_revMajor(self):
+        return self.revMajor
+    def set_revMajor(self, revMajor):
+        self.revMajor = revMajor
+    def get_revMinor(self):
+        return self.revMinor
+    def set_revMinor(self, revMinor):
+        self.revMinor = revMinor
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_version(self):
+        return self.version
+    def set_version(self, version):
+        self.version = version
+    def get_date(self):
+        return self.date
+    def set_date(self, date):
+        self.date = date
+    def get_north(self):
+        return self.north
+    def set_north(self, north):
+        self.north = north
+    def get_south(self):
+        return self.south
+    def set_south(self, south):
+        self.south = south
+    def get_east(self):
+        return self.east
+    def set_east(self, east):
+        self.east = east
+    def get_west(self):
+        return self.west
+    def set_west(self, west):
+        self.west = west
+    def get_vendor(self):
+        return self.vendor
+    def set_vendor(self, vendor):
+        self.vendor = vendor
+    def _hasContent(self):
+        if (
+            self.geoReference is not None or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='headerType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('headerType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'headerType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='headerType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='headerType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='headerType'):
+        if self.revMajor is not None and 'revMajor' not in already_processed:
+            already_processed.add('revMajor')
+            outfile.write(' revMajor="%s"' % self.gds_format_integer(self.revMajor, input_name='revMajor'))
+        if self.revMinor is not None and 'revMinor' not in already_processed:
+            already_processed.add('revMinor')
+            outfile.write(' revMinor="%s"' % self.gds_format_integer(self.revMinor, input_name='revMinor'))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.version is not None and 'version' not in already_processed:
+            already_processed.add('version')
+            outfile.write(' version="%s"' % self.gds_format_float(self.version, input_name='version'))
+        if self.date is not None and 'date' not in already_processed:
+            already_processed.add('date')
+            outfile.write(' date=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.date), input_name='date')), ))
+        if self.north is not None and 'north' not in already_processed:
+            already_processed.add('north')
+            outfile.write(' north="%s"' % self.gds_format_double(self.north, input_name='north'))
+        if self.south is not None and 'south' not in already_processed:
+            already_processed.add('south')
+            outfile.write(' south="%s"' % self.gds_format_double(self.south, input_name='south'))
+        if self.east is not None and 'east' not in already_processed:
+            already_processed.add('east')
+            outfile.write(' east="%s"' % self.gds_format_double(self.east, input_name='east'))
+        if self.west is not None and 'west' not in already_processed:
+            already_processed.add('west')
+            outfile.write(' west="%s"' % self.gds_format_double(self.west, input_name='west'))
+        if self.vendor is not None and 'vendor' not in already_processed:
+            already_processed.add('vendor')
+            outfile.write(' vendor=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.vendor), input_name='vendor')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='headerType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.geoReference is not None:
+            namespaceprefix_ = self.geoReference_nsprefix_ + ':' if (UseCapturedNS_ and self.geoReference_nsprefix_) else ''
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sgeoReference>%s</%sgeoReference>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.geoReference), input_name='geoReference')), namespaceprefix_ , eol_))
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('revMajor', node)
+        if value is not None and 'revMajor' not in already_processed:
+            already_processed.add('revMajor')
+            self.revMajor = self.gds_parse_integer(value, node, 'revMajor')
+        value = find_attr_value_('revMinor', node)
+        if value is not None and 'revMinor' not in already_processed:
+            already_processed.add('revMinor')
+            self.revMinor = self.gds_parse_integer(value, node, 'revMinor')
+        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_('version', node)
+        if value is not None and 'version' not in already_processed:
+            already_processed.add('version')
+            value = self.gds_parse_float(value, node, 'version')
+            self.version = value
+        value = find_attr_value_('date', node)
+        if value is not None and 'date' not in already_processed:
+            already_processed.add('date')
+            self.date = value
+        value = find_attr_value_('north', node)
+        if value is not None and 'north' not in already_processed:
+            already_processed.add('north')
+            value = self.gds_parse_double(value, node, 'north')
+            self.north = value
+        value = find_attr_value_('south', node)
+        if value is not None and 'south' not in already_processed:
+            already_processed.add('south')
+            value = self.gds_parse_double(value, node, 'south')
+            self.south = value
+        value = find_attr_value_('east', node)
+        if value is not None and 'east' not in already_processed:
+            already_processed.add('east')
+            value = self.gds_parse_double(value, node, 'east')
+            self.east = value
+        value = find_attr_value_('west', node)
+        if value is not None and 'west' not in already_processed:
+            already_processed.add('west')
+            value = self.gds_parse_double(value, node, 'west')
+            self.west = value
+        value = find_attr_value_('vendor', node)
+        if value is not None and 'vendor' not in already_processed:
+            already_processed.add('vendor')
+            self.vendor = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'geoReference':
+            value_ = child_.text
+            value_ = self.gds_parse_string(value_, node, 'geoReference')
+            value_ = self.gds_validate_string(value_, node, 'geoReference')
+            self.geoReference = value_
+            self.geoReference_nsprefix_ = child_.prefix
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class headerType
+
+
+class roadType1(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, length=None, id=None, junction=None, link=None, type_=None, planView=None, elevationProfile=None, lateralProfile=None, lanes=None, objects=None, signals=None, surface=None, railroad=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.junction = _cast(None, junction)
+        self.junction_nsprefix_ = None
+        self.link = link
+        self.link_nsprefix_ = None
+        if type_ is None:
+            self.type_ = []
+        else:
+            self.type_ = type_
+        self.type__nsprefix_ = None
+        self.planView = planView
+        self.planView_nsprefix_ = None
+        self.elevationProfile = elevationProfile
+        self.elevationProfile_nsprefix_ = None
+        self.lateralProfile = lateralProfile
+        self.lateralProfile_nsprefix_ = None
+        self.lanes = lanes
+        self.lanes_nsprefix_ = None
+        self.objects = objects
+        self.objects_nsprefix_ = None
+        self.signals = signals
+        self.signals_nsprefix_ = None
+        self.surface = surface
+        self.surface_nsprefix_ = None
+        self.railroad = railroad
+        self.railroad_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, roadType1)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if roadType1.subclass:
+            return roadType1.subclass(*args_, **kwargs_)
+        else:
+            return roadType1(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_link(self):
+        return self.link
+    def set_link(self, link):
+        self.link = link
+    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_planView(self):
+        return self.planView
+    def set_planView(self, planView):
+        self.planView = planView
+    def get_elevationProfile(self):
+        return self.elevationProfile
+    def set_elevationProfile(self, elevationProfile):
+        self.elevationProfile = elevationProfile
+    def get_lateralProfile(self):
+        return self.lateralProfile
+    def set_lateralProfile(self, lateralProfile):
+        self.lateralProfile = lateralProfile
+    def get_lanes(self):
+        return self.lanes
+    def set_lanes(self, lanes):
+        self.lanes = lanes
+    def get_objects(self):
+        return self.objects
+    def set_objects(self, objects):
+        self.objects = objects
+    def get_signals(self):
+        return self.signals
+    def set_signals(self, signals):
+        self.signals = signals
+    def get_surface(self):
+        return self.surface
+    def set_surface(self, surface):
+        self.surface = surface
+    def get_railroad(self):
+        return self.railroad
+    def set_railroad(self, railroad):
+        self.railroad = railroad
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_junction(self):
+        return self.junction
+    def set_junction(self, junction):
+        self.junction = junction
+    def _hasContent(self):
+        if (
+            self.link is not None or
+            self.type_ or
+            self.planView is not None or
+            self.elevationProfile is not None or
+            self.lateralProfile is not None or
+            self.lanes is not None or
+            self.objects is not None or
+            self.signals is not None or
+            self.surface is not None or
+            self.railroad is not None or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='roadType1', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('roadType1')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'roadType1':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='roadType1')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='roadType1', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='roadType1'):
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.length is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.junction is not None and 'junction' not in already_processed:
+            already_processed.add('junction')
+            outfile.write(' junction=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.junction), input_name='junction')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='roadType1', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.link is not None:
+            namespaceprefix_ = self.link_nsprefix_ + ':' if (UseCapturedNS_ and self.link_nsprefix_) else ''
+            self.link.export(outfile, level, namespaceprefix_, namespacedef_='', name_='link', pretty_print=pretty_print)
+        for type_ in self.type_:
+            namespaceprefix_ = self.type__nsprefix_ + ':' if (UseCapturedNS_ and self.type__nsprefix_) else ''
+            type_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='type', pretty_print=pretty_print)
+        if self.planView is not None:
+            namespaceprefix_ = self.planView_nsprefix_ + ':' if (UseCapturedNS_ and self.planView_nsprefix_) else ''
+            self.planView.export(outfile, level, namespaceprefix_, namespacedef_='', name_='planView', pretty_print=pretty_print)
+        if self.elevationProfile is not None:
+            namespaceprefix_ = self.elevationProfile_nsprefix_ + ':' if (UseCapturedNS_ and self.elevationProfile_nsprefix_) else ''
+            self.elevationProfile.export(outfile, level, namespaceprefix_, namespacedef_='', name_='elevationProfile', pretty_print=pretty_print)
+        if self.lateralProfile is not None:
+            namespaceprefix_ = self.lateralProfile_nsprefix_ + ':' if (UseCapturedNS_ and self.lateralProfile_nsprefix_) else ''
+            self.lateralProfile.export(outfile, level, namespaceprefix_, namespacedef_='', name_='lateralProfile', pretty_print=pretty_print)
+        if self.lanes is not None:
+            namespaceprefix_ = self.lanes_nsprefix_ + ':' if (UseCapturedNS_ and self.lanes_nsprefix_) else ''
+            self.lanes.export(outfile, level, namespaceprefix_, namespacedef_='', name_='lanes', pretty_print=pretty_print)
+        if self.objects is not None:
+            namespaceprefix_ = self.objects_nsprefix_ + ':' if (UseCapturedNS_ and self.objects_nsprefix_) else ''
+            self.objects.export(outfile, level, namespaceprefix_, namespacedef_='', name_='objects', pretty_print=pretty_print)
+        if self.signals is not None:
+            namespaceprefix_ = self.signals_nsprefix_ + ':' if (UseCapturedNS_ and self.signals_nsprefix_) else ''
+            self.signals.export(outfile, level, namespaceprefix_, namespacedef_='', name_='signals', pretty_print=pretty_print)
+        if self.surface is not None:
+            namespaceprefix_ = self.surface_nsprefix_ + ':' if (UseCapturedNS_ and self.surface_nsprefix_) else ''
+            self.surface.export(outfile, level, namespaceprefix_, namespacedef_='', name_='surface', pretty_print=pretty_print)
+        if self.railroad is not None:
+            namespaceprefix_ = self.railroad_nsprefix_ + ':' if (UseCapturedNS_ and self.railroad_nsprefix_) else ''
+            self.railroad.export(outfile, level, namespaceprefix_, namespacedef_='', name_='railroad', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        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_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            value = self.gds_parse_double(value, node, 'length')
+            self.length = 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
+        value = find_attr_value_('junction', node)
+        if value is not None and 'junction' not in already_processed:
+            already_processed.add('junction')
+            self.junction = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'link':
+            obj_ = linkType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.link = obj_
+            obj_.original_tagname_ = 'link'
+        elif nodeName_ == 'type':
+            obj_ = typeType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.type_.append(obj_)
+            obj_.original_tagname_ = 'type'
+        elif nodeName_ == 'planView':
+            obj_ = planViewType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.planView = obj_
+            obj_.original_tagname_ = 'planView'
+        elif nodeName_ == 'elevationProfile':
+            obj_ = elevationProfileType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.elevationProfile = obj_
+            obj_.original_tagname_ = 'elevationProfile'
+        elif nodeName_ == 'lateralProfile':
+            obj_ = lateralProfileType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.lateralProfile = obj_
+            obj_.original_tagname_ = 'lateralProfile'
+        elif nodeName_ == 'lanes':
+            obj_ = lanesType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.lanes = obj_
+            obj_.original_tagname_ = 'lanes'
+        elif nodeName_ == 'objects':
+            obj_ = objectsType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.objects = obj_
+            obj_.original_tagname_ = 'objects'
+        elif nodeName_ == 'signals':
+            obj_ = signalsType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.signals = obj_
+            obj_.original_tagname_ = 'signals'
+        elif nodeName_ == 'surface':
+            obj_ = surfaceType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.surface = obj_
+            obj_.original_tagname_ = 'surface'
+        elif nodeName_ == 'railroad':
+            obj_ = railroadType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.railroad = obj_
+            obj_.original_tagname_ = 'railroad'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class roadType1
+
+
+class linkType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, predecessor=None, successor=None, neighbor=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.predecessor = predecessor
+        self.predecessor_nsprefix_ = None
+        self.successor = successor
+        self.successor_nsprefix_ = None
+        if neighbor is None:
+            self.neighbor = []
+        else:
+            self.neighbor = neighbor
+        self.neighbor_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, linkType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if linkType.subclass:
+            return linkType.subclass(*args_, **kwargs_)
+        else:
+            return linkType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_predecessor(self):
+        return self.predecessor
+    def set_predecessor(self, predecessor):
+        self.predecessor = predecessor
+    def get_successor(self):
+        return self.successor
+    def set_successor(self, successor):
+        self.successor = successor
+    def get_neighbor(self):
+        return self.neighbor
+    def set_neighbor(self, neighbor):
+        self.neighbor = neighbor
+    def add_neighbor(self, value):
+        self.neighbor.append(value)
+    def insert_neighbor_at(self, index, value):
+        self.neighbor.insert(index, value)
+    def replace_neighbor_at(self, index, value):
+        self.neighbor[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def _hasContent(self):
+        if (
+            self.predecessor is not None or
+            self.successor is not None or
+            self.neighbor or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='linkType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('linkType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'linkType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='linkType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='linkType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='linkType'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='linkType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.predecessor is not None:
+            namespaceprefix_ = self.predecessor_nsprefix_ + ':' if (UseCapturedNS_ and self.predecessor_nsprefix_) else ''
+            self.predecessor.export(outfile, level, namespaceprefix_, namespacedef_='', name_='predecessor', pretty_print=pretty_print)
+        if self.successor is not None:
+            namespaceprefix_ = self.successor_nsprefix_ + ':' if (UseCapturedNS_ and self.successor_nsprefix_) else ''
+            self.successor.export(outfile, level, namespaceprefix_, namespacedef_='', name_='successor', pretty_print=pretty_print)
+        for neighbor_ in self.neighbor:
+            namespaceprefix_ = self.neighbor_nsprefix_ + ':' if (UseCapturedNS_ and self.neighbor_nsprefix_) else ''
+            neighbor_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='neighbor', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'predecessor':
+            obj_ = predecessorType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.predecessor = obj_
+            obj_.original_tagname_ = 'predecessor'
+        elif nodeName_ == 'successor':
+            obj_ = successorType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.successor = obj_
+            obj_.original_tagname_ = 'successor'
+        elif nodeName_ == 'neighbor':
+            obj_ = neighborType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.neighbor.append(obj_)
+            obj_.original_tagname_ = 'neighbor'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class linkType
+
+
+class predecessorType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, elementType=None, elementId=None, contactPoint=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.elementType = _cast(None, elementType)
+        self.elementType_nsprefix_ = None
+        self.elementId = _cast(None, elementId)
+        self.elementId_nsprefix_ = None
+        self.contactPoint = _cast(None, contactPoint)
+        self.contactPoint_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, predecessorType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if predecessorType.subclass:
+            return predecessorType.subclass(*args_, **kwargs_)
+        else:
+            return predecessorType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_elementType(self):
+        return self.elementType
+    def set_elementType(self, elementType):
+        self.elementType = elementType
+    def get_elementId(self):
+        return self.elementId
+    def set_elementId(self, elementId):
+        self.elementId = elementId
+    def get_contactPoint(self):
+        return self.contactPoint
+    def set_contactPoint(self, contactPoint):
+        self.contactPoint = contactPoint
+    def validate_elementType(self, value):
+        # Validate type elementType, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['road', 'junction']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on elementType' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_contactPoint(self, value):
+        # Validate type contactPoint, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['start', 'end']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on contactPoint' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='predecessorType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('predecessorType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'predecessorType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='predecessorType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='predecessorType', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='predecessorType'):
+        if self.elementType is not None and 'elementType' not in already_processed:
+            already_processed.add('elementType')
+            outfile.write(' elementType=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.elementType), input_name='elementType')), ))
+        if self.elementId is not None and 'elementId' not in already_processed:
+            already_processed.add('elementId')
+            outfile.write(' elementId=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.elementId), input_name='elementId')), ))
+        if self.contactPoint is not None and 'contactPoint' not in already_processed:
+            already_processed.add('contactPoint')
+            outfile.write(' contactPoint=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.contactPoint), input_name='contactPoint')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='predecessorType', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('elementType', node)
+        if value is not None and 'elementType' not in already_processed:
+            already_processed.add('elementType')
+            self.elementType = value
+            self.validate_elementType(self.elementType)    # validate type elementType
+        value = find_attr_value_('elementId', node)
+        if value is not None and 'elementId' not in already_processed:
+            already_processed.add('elementId')
+            self.elementId = value
+        value = find_attr_value_('contactPoint', node)
+        if value is not None and 'contactPoint' not in already_processed:
+            already_processed.add('contactPoint')
+            self.contactPoint = value
+            self.validate_contactPoint(self.contactPoint)    # validate type contactPoint
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class predecessorType
+
+
+class successorType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, elementType=None, elementId=None, contactPoint=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.elementType = _cast(None, elementType)
+        self.elementType_nsprefix_ = None
+        self.elementId = _cast(None, elementId)
+        self.elementId_nsprefix_ = None
+        self.contactPoint = _cast(None, contactPoint)
+        self.contactPoint_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, successorType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if successorType.subclass:
+            return successorType.subclass(*args_, **kwargs_)
+        else:
+            return successorType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_elementType(self):
+        return self.elementType
+    def set_elementType(self, elementType):
+        self.elementType = elementType
+    def get_elementId(self):
+        return self.elementId
+    def set_elementId(self, elementId):
+        self.elementId = elementId
+    def get_contactPoint(self):
+        return self.contactPoint
+    def set_contactPoint(self, contactPoint):
+        self.contactPoint = contactPoint
+    def validate_elementType(self, value):
+        # Validate type elementType, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['road', 'junction']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on elementType' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_contactPoint(self, value):
+        # Validate type contactPoint, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['start', 'end']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on contactPoint' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='successorType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('successorType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'successorType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='successorType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='successorType', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='successorType'):
+        if self.elementType is not None and 'elementType' not in already_processed:
+            already_processed.add('elementType')
+            outfile.write(' elementType=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.elementType), input_name='elementType')), ))
+        if self.elementId is not None and 'elementId' not in already_processed:
+            already_processed.add('elementId')
+            outfile.write(' elementId=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.elementId), input_name='elementId')), ))
+        if self.contactPoint is not None and 'contactPoint' not in already_processed:
+            already_processed.add('contactPoint')
+            outfile.write(' contactPoint=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.contactPoint), input_name='contactPoint')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='successorType', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('elementType', node)
+        if value is not None and 'elementType' not in already_processed:
+            already_processed.add('elementType')
+            self.elementType = value
+            self.validate_elementType(self.elementType)    # validate type elementType
+        value = find_attr_value_('elementId', node)
+        if value is not None and 'elementId' not in already_processed:
+            already_processed.add('elementId')
+            self.elementId = value
+        value = find_attr_value_('contactPoint', node)
+        if value is not None and 'contactPoint' not in already_processed:
+            already_processed.add('contactPoint')
+            self.contactPoint = value
+            self.validate_contactPoint(self.contactPoint)    # validate type contactPoint
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class successorType
+
+
+class neighborType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, side=None, elementId=None, direction=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.side = _cast(None, side)
+        self.side_nsprefix_ = None
+        self.elementId = _cast(None, elementId)
+        self.elementId_nsprefix_ = None
+        self.direction = _cast(None, direction)
+        self.direction_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, neighborType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if neighborType.subclass:
+            return neighborType.subclass(*args_, **kwargs_)
+        else:
+            return neighborType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_side(self):
+        return self.side
+    def set_side(self, side):
+        self.side = side
+    def get_elementId(self):
+        return self.elementId
+    def set_elementId(self, elementId):
+        self.elementId = elementId
+    def get_direction(self):
+        return self.direction
+    def set_direction(self, direction):
+        self.direction = direction
+    def validate_side(self, value):
+        # Validate type side, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['left', 'right']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on side' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_direction(self, value):
+        # Validate type direction, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['same', 'opposite']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on direction' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='neighborType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('neighborType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'neighborType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='neighborType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='neighborType', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='neighborType'):
+        if self.side is not None and 'side' not in already_processed:
+            already_processed.add('side')
+            outfile.write(' side=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.side), input_name='side')), ))
+        if self.elementId is not None and 'elementId' not in already_processed:
+            already_processed.add('elementId')
+            outfile.write(' elementId=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.elementId), input_name='elementId')), ))
+        if self.direction is not None and 'direction' not in already_processed:
+            already_processed.add('direction')
+            outfile.write(' direction=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.direction), input_name='direction')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='neighborType', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('side', node)
+        if value is not None and 'side' not in already_processed:
+            already_processed.add('side')
+            self.side = value
+            self.validate_side(self.side)    # validate type side
+        value = find_attr_value_('elementId', node)
+        if value is not None and 'elementId' not in already_processed:
+            already_processed.add('elementId')
+            self.elementId = value
+        value = find_attr_value_('direction', node)
+        if value is not None and 'direction' not in already_processed:
+            already_processed.add('direction')
+            self.direction = value
+            self.validate_direction(self.direction)    # validate type direction
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class neighborType
+
+
+class typeType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, type_=None, speed=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.speed = speed
+        self.speed_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, typeType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if typeType.subclass:
+            return typeType.subclass(*args_, **kwargs_)
+        else:
+            return typeType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_speed(self):
+        return self.speed
+    def set_speed(self, speed):
+        self.speed = speed
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def validate_roadType(self, value):
+        # Validate type roadType, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['unknown', 'rural', 'motorway', 'town', 'lowSpeed', 'pedestrian', 'bicycle']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on roadType' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.speed is not None or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='typeType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('typeType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'typeType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='typeType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='typeType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='typeType'):
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='typeType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.speed is not None:
+            namespaceprefix_ = self.speed_nsprefix_ + ':' if (UseCapturedNS_ and self.speed_nsprefix_) else ''
+            self.speed.export(outfile, level, namespaceprefix_, namespacedef_='', name_='speed', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = 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
+            self.validate_roadType(self.type_)    # validate type roadType
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'speed':
+            obj_ = speedType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.speed = obj_
+            obj_.original_tagname_ = 'speed'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class typeType
+
+
+class speedType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, max=None, unit=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.max = _cast(int, max)
+        self.max_nsprefix_ = None
+        self.unit = _cast(None, unit)
+        self.unit_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, speedType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if speedType.subclass:
+            return speedType.subclass(*args_, **kwargs_)
+        else:
+            return speedType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_max(self):
+        return self.max
+    def set_max(self, max):
+        self.max = max
+    def get_unit(self):
+        return self.unit
+    def set_unit(self, unit):
+        self.unit = unit
+    def validate_max(self, value):
+        # Validate type max, a restriction on xsd:integer.
+        pass
+    def validate_unit(self, value):
+        # Validate type unit, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['m', 'km', 'ft', 'mile', 'm/s', 'mph', 'km/h', 'kg', 't', '%']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on unit' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='speedType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('speedType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'speedType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='speedType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='speedType', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='speedType'):
+        if self.max is not None and 'max' not in already_processed:
+            already_processed.add('max')
+            outfile.write(' max="%s"' % self.gds_format_integer(self.max, input_name='max'))
+        if self.unit is not None and 'unit' not in already_processed:
+            already_processed.add('unit')
+            outfile.write(' unit=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.unit), input_name='unit')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='speedType', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('max', node)
+        if value is not None and 'max' not in already_processed:
+            already_processed.add('max')
+            self.max = self.gds_parse_integer(value, node, 'max')
+            self.validate_max(self.max)    # validate type max
+        value = find_attr_value_('unit', node)
+        if value is not None and 'unit' not in already_processed:
+            already_processed.add('unit')
+            self.unit = value
+            self.validate_unit(self.unit)    # validate type unit
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class speedType
+
+
+class planViewType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, geometry=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if geometry is None:
+            self.geometry = []
+        else:
+            self.geometry = geometry
+        self.geometry_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, planViewType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if planViewType.subclass:
+            return planViewType.subclass(*args_, **kwargs_)
+        else:
+            return planViewType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_geometry(self):
+        return self.geometry
+    def set_geometry(self, geometry):
+        self.geometry = geometry
+    def add_geometry(self, value):
+        self.geometry.append(value)
+    def insert_geometry_at(self, index, value):
+        self.geometry.insert(index, value)
+    def replace_geometry_at(self, index, value):
+        self.geometry[index] = value
+    def _hasContent(self):
+        if (
+            self.geometry
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='planViewType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('planViewType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'planViewType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='planViewType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='planViewType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='planViewType'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='planViewType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for geometry_ in self.geometry:
+            namespaceprefix_ = self.geometry_nsprefix_ + ':' if (UseCapturedNS_ and self.geometry_nsprefix_) else ''
+            geometry_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='geometry', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'geometry':
+            obj_ = geometryType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.geometry.append(obj_)
+            obj_.original_tagname_ = 'geometry'
+# end class planViewType
+
+
+class geometryType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, x=None, y=None, hdg=None, length=None, line=None, spiral=None, arc=None, poly3=None, paramPoly3=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.x = _cast(float, x)
+        self.x_nsprefix_ = None
+        self.y = _cast(float, y)
+        self.y_nsprefix_ = None
+        self.hdg = _cast(float, hdg)
+        self.hdg_nsprefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.line = line
+        self.line_nsprefix_ = None
+        self.spiral = spiral
+        self.spiral_nsprefix_ = None
+        self.arc = arc
+        self.arc_nsprefix_ = None
+        self.poly3 = poly3
+        self.poly3_nsprefix_ = None
+        self.paramPoly3 = paramPoly3
+        self.paramPoly3_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, geometryType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if geometryType.subclass:
+            return geometryType.subclass(*args_, **kwargs_)
+        else:
+            return geometryType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_line(self):
+        return self.line
+    def set_line(self, line):
+        self.line = line
+    def get_spiral(self):
+        return self.spiral
+    def set_spiral(self, spiral):
+        self.spiral = spiral
+    def get_arc(self):
+        return self.arc
+    def set_arc(self, arc):
+        self.arc = arc
+    def get_poly3(self):
+        return self.poly3
+    def set_poly3(self, poly3):
+        self.poly3 = poly3
+    def get_paramPoly3(self):
+        return self.paramPoly3
+    def set_paramPoly3(self, paramPoly3):
+        self.paramPoly3 = paramPoly3
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_x(self):
+        return self.x
+    def set_x(self, x):
+        self.x = x
+    def get_y(self):
+        return self.y
+    def set_y(self, y):
+        self.y = y
+    def get_hdg(self):
+        return self.hdg
+    def set_hdg(self, hdg):
+        self.hdg = hdg
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def _hasContent(self):
+        if (
+            self.line is not None or
+            self.spiral is not None or
+            self.arc is not None or
+            self.poly3 is not None or
+            self.paramPoly3 is not None or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='geometryType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('geometryType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'geometryType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='geometryType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='geometryType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='geometryType'):
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.x is not None and 'x' not in already_processed:
+            already_processed.add('x')
+            outfile.write(' x="%s"' % self.gds_format_double(self.x, input_name='x'))
+        if self.y is not None and 'y' not in already_processed:
+            already_processed.add('y')
+            outfile.write(' y="%s"' % self.gds_format_double(self.y, input_name='y'))
+        if self.hdg is not None and 'hdg' not in already_processed:
+            already_processed.add('hdg')
+            outfile.write(' hdg="%s"' % self.gds_format_double(self.hdg, input_name='hdg'))
+        if self.length is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='geometryType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.line is not None:
+            namespaceprefix_ = self.line_nsprefix_ + ':' if (UseCapturedNS_ and self.line_nsprefix_) else ''
+            self.line.export(outfile, level, namespaceprefix_, namespacedef_='', name_='line', pretty_print=pretty_print)
+        if self.spiral is not None:
+            namespaceprefix_ = self.spiral_nsprefix_ + ':' if (UseCapturedNS_ and self.spiral_nsprefix_) else ''
+            self.spiral.export(outfile, level, namespaceprefix_, namespacedef_='', name_='spiral', pretty_print=pretty_print)
+        if self.arc is not None:
+            namespaceprefix_ = self.arc_nsprefix_ + ':' if (UseCapturedNS_ and self.arc_nsprefix_) else ''
+            self.arc.export(outfile, level, namespaceprefix_, namespacedef_='', name_='arc', pretty_print=pretty_print)
+        if self.poly3 is not None:
+            namespaceprefix_ = self.poly3_nsprefix_ + ':' if (UseCapturedNS_ and self.poly3_nsprefix_) else ''
+            self.poly3.export(outfile, level, namespaceprefix_, namespacedef_='', name_='poly3', pretty_print=pretty_print)
+        if self.paramPoly3 is not None:
+            namespaceprefix_ = self.paramPoly3_nsprefix_ + ':' if (UseCapturedNS_ and self.paramPoly3_nsprefix_) else ''
+            self.paramPoly3.export(outfile, level, namespaceprefix_, namespacedef_='', name_='paramPoly3', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('x', node)
+        if value is not None and 'x' not in already_processed:
+            already_processed.add('x')
+            value = self.gds_parse_double(value, node, 'x')
+            self.x = value
+        value = find_attr_value_('y', node)
+        if value is not None and 'y' not in already_processed:
+            already_processed.add('y')
+            value = self.gds_parse_double(value, node, 'y')
+            self.y = value
+        value = find_attr_value_('hdg', node)
+        if value is not None and 'hdg' not in already_processed:
+            already_processed.add('hdg')
+            value = self.gds_parse_double(value, node, 'hdg')
+            self.hdg = value
+        value = find_attr_value_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            value = self.gds_parse_double(value, node, 'length')
+            self.length = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'line':
+            obj_ = lineType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.line = obj_
+            obj_.original_tagname_ = 'line'
+        elif nodeName_ == 'spiral':
+            obj_ = spiralType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.spiral = obj_
+            obj_.original_tagname_ = 'spiral'
+        elif nodeName_ == 'arc':
+            obj_ = arcType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.arc = obj_
+            obj_.original_tagname_ = 'arc'
+        elif nodeName_ == 'poly3':
+            obj_ = poly3Type.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.poly3 = obj_
+            obj_.original_tagname_ = 'poly3'
+        elif nodeName_ == 'paramPoly3':
+            obj_ = paramPoly3Type.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.paramPoly3 = obj_
+            obj_.original_tagname_ = 'paramPoly3'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class geometryType
+
+
+class lineType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, lineType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if lineType.subclass:
+            return lineType.subclass(*args_, **kwargs_)
+        else:
+            return lineType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='lineType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('lineType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'lineType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='lineType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='lineType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='lineType'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='lineType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class lineType
+
+
+class spiralType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, curvStart=None, curvEnd=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.curvStart = _cast(float, curvStart)
+        self.curvStart_nsprefix_ = None
+        self.curvEnd = _cast(float, curvEnd)
+        self.curvEnd_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, spiralType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if spiralType.subclass:
+            return spiralType.subclass(*args_, **kwargs_)
+        else:
+            return spiralType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_curvStart(self):
+        return self.curvStart
+    def set_curvStart(self, curvStart):
+        self.curvStart = curvStart
+    def get_curvEnd(self):
+        return self.curvEnd
+    def set_curvEnd(self, curvEnd):
+        self.curvEnd = curvEnd
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='spiralType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('spiralType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'spiralType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='spiralType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='spiralType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='spiralType'):
+        if self.curvStart is not None and 'curvStart' not in already_processed:
+            already_processed.add('curvStart')
+            outfile.write(' curvStart="%s"' % self.gds_format_double(self.curvStart, input_name='curvStart'))
+        if self.curvEnd is not None and 'curvEnd' not in already_processed:
+            already_processed.add('curvEnd')
+            outfile.write(' curvEnd="%s"' % self.gds_format_double(self.curvEnd, input_name='curvEnd'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='spiralType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('curvStart', node)
+        if value is not None and 'curvStart' not in already_processed:
+            already_processed.add('curvStart')
+            value = self.gds_parse_double(value, node, 'curvStart')
+            self.curvStart = value
+        value = find_attr_value_('curvEnd', node)
+        if value is not None and 'curvEnd' not in already_processed:
+            already_processed.add('curvEnd')
+            value = self.gds_parse_double(value, node, 'curvEnd')
+            self.curvEnd = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class spiralType
+
+
+class arcType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, curvature=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.curvature = _cast(float, curvature)
+        self.curvature_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, arcType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if arcType.subclass:
+            return arcType.subclass(*args_, **kwargs_)
+        else:
+            return arcType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_curvature(self):
+        return self.curvature
+    def set_curvature(self, curvature):
+        self.curvature = curvature
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='arcType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('arcType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'arcType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='arcType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='arcType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='arcType'):
+        if self.curvature is not None and 'curvature' not in already_processed:
+            already_processed.add('curvature')
+            outfile.write(' curvature="%s"' % self.gds_format_double(self.curvature, input_name='curvature'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='arcType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('curvature', node)
+        if value is not None and 'curvature' not in already_processed:
+            already_processed.add('curvature')
+            value = self.gds_parse_double(value, node, 'curvature')
+            self.curvature = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class arcType
+
+
+class poly3Type(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, a=None, b=None, c=None, d=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, poly3Type)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if poly3Type.subclass:
+            return poly3Type.subclass(*args_, **kwargs_)
+        else:
+            return poly3Type(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='poly3Type', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('poly3Type')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'poly3Type':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='poly3Type')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='poly3Type', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='poly3Type'):
+        if self.a is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if self.b is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if self.c is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if self.d is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='poly3Type', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            value = self.gds_parse_double(value, node, 'a')
+            self.a = value
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            value = self.gds_parse_double(value, node, 'b')
+            self.b = value
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            value = self.gds_parse_double(value, node, 'c')
+            self.c = value
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            value = self.gds_parse_double(value, node, 'd')
+            self.d = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class poly3Type
+
+
+class paramPoly3Type(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, aU=None, bU=None, cU=None, dU=None, aV=None, bV=None, cV=None, dV=None, pRange=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.aU = _cast(float, aU)
+        self.aU_nsprefix_ = None
+        self.bU = _cast(float, bU)
+        self.bU_nsprefix_ = None
+        self.cU = _cast(float, cU)
+        self.cU_nsprefix_ = None
+        self.dU = _cast(float, dU)
+        self.dU_nsprefix_ = None
+        self.aV = _cast(float, aV)
+        self.aV_nsprefix_ = None
+        self.bV = _cast(float, bV)
+        self.bV_nsprefix_ = None
+        self.cV = _cast(float, cV)
+        self.cV_nsprefix_ = None
+        self.dV = _cast(float, dV)
+        self.dV_nsprefix_ = None
+        self.pRange = _cast(None, pRange)
+        self.pRange_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, paramPoly3Type)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if paramPoly3Type.subclass:
+            return paramPoly3Type.subclass(*args_, **kwargs_)
+        else:
+            return paramPoly3Type(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_aU(self):
+        return self.aU
+    def set_aU(self, aU):
+        self.aU = aU
+    def get_bU(self):
+        return self.bU
+    def set_bU(self, bU):
+        self.bU = bU
+    def get_cU(self):
+        return self.cU
+    def set_cU(self, cU):
+        self.cU = cU
+    def get_dU(self):
+        return self.dU
+    def set_dU(self, dU):
+        self.dU = dU
+    def get_aV(self):
+        return self.aV
+    def set_aV(self, aV):
+        self.aV = aV
+    def get_bV(self):
+        return self.bV
+    def set_bV(self, bV):
+        self.bV = bV
+    def get_cV(self):
+        return self.cV
+    def set_cV(self, cV):
+        self.cV = cV
+    def get_dV(self):
+        return self.dV
+    def set_dV(self, dV):
+        self.dV = dV
+    def get_pRange(self):
+        return self.pRange
+    def set_pRange(self, pRange):
+        self.pRange = pRange
+    def validate_pRange(self, value):
+        # Validate type pRange, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['arcLength', 'normalized']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on pRange' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='paramPoly3Type', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('paramPoly3Type')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'paramPoly3Type':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='paramPoly3Type')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='paramPoly3Type', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='paramPoly3Type'):
+        if self.aU is not None and 'aU' not in already_processed:
+            already_processed.add('aU')
+            outfile.write(' aU="%s"' % self.gds_format_double(self.aU, input_name='aU'))
+        if self.bU is not None and 'bU' not in already_processed:
+            already_processed.add('bU')
+            outfile.write(' bU="%s"' % self.gds_format_double(self.bU, input_name='bU'))
+        if self.cU is not None and 'cU' not in already_processed:
+            already_processed.add('cU')
+            outfile.write(' cU="%s"' % self.gds_format_double(self.cU, input_name='cU'))
+        if self.dU is not None and 'dU' not in already_processed:
+            already_processed.add('dU')
+            outfile.write(' dU="%s"' % self.gds_format_double(self.dU, input_name='dU'))
+        if self.aV is not None and 'aV' not in already_processed:
+            already_processed.add('aV')
+            outfile.write(' aV="%s"' % self.gds_format_double(self.aV, input_name='aV'))
+        if self.bV is not None and 'bV' not in already_processed:
+            already_processed.add('bV')
+            outfile.write(' bV="%s"' % self.gds_format_double(self.bV, input_name='bV'))
+        if self.cV is not None and 'cV' not in already_processed:
+            already_processed.add('cV')
+            outfile.write(' cV="%s"' % self.gds_format_double(self.cV, input_name='cV'))
+        if self.dV is not None and 'dV' not in already_processed:
+            already_processed.add('dV')
+            outfile.write(' dV="%s"' % self.gds_format_double(self.dV, input_name='dV'))
+        if self.pRange is not None and 'pRange' not in already_processed:
+            already_processed.add('pRange')
+            outfile.write(' pRange=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.pRange), input_name='pRange')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='paramPoly3Type', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('aU', node)
+        if value is not None and 'aU' not in already_processed:
+            already_processed.add('aU')
+            value = self.gds_parse_double(value, node, 'aU')
+            self.aU = value
+        value = find_attr_value_('bU', node)
+        if value is not None and 'bU' not in already_processed:
+            already_processed.add('bU')
+            value = self.gds_parse_double(value, node, 'bU')
+            self.bU = value
+        value = find_attr_value_('cU', node)
+        if value is not None and 'cU' not in already_processed:
+            already_processed.add('cU')
+            value = self.gds_parse_double(value, node, 'cU')
+            self.cU = value
+        value = find_attr_value_('dU', node)
+        if value is not None and 'dU' not in already_processed:
+            already_processed.add('dU')
+            value = self.gds_parse_double(value, node, 'dU')
+            self.dU = value
+        value = find_attr_value_('aV', node)
+        if value is not None and 'aV' not in already_processed:
+            already_processed.add('aV')
+            value = self.gds_parse_double(value, node, 'aV')
+            self.aV = value
+        value = find_attr_value_('bV', node)
+        if value is not None and 'bV' not in already_processed:
+            already_processed.add('bV')
+            value = self.gds_parse_double(value, node, 'bV')
+            self.bV = value
+        value = find_attr_value_('cV', node)
+        if value is not None and 'cV' not in already_processed:
+            already_processed.add('cV')
+            value = self.gds_parse_double(value, node, 'cV')
+            self.cV = value
+        value = find_attr_value_('dV', node)
+        if value is not None and 'dV' not in already_processed:
+            already_processed.add('dV')
+            value = self.gds_parse_double(value, node, 'dV')
+            self.dV = value
+        value = find_attr_value_('pRange', node)
+        if value is not None and 'pRange' not in already_processed:
+            already_processed.add('pRange')
+            self.pRange = value
+            self.validate_pRange(self.pRange)    # validate type pRange
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class paramPoly3Type
+
+
+class elevationProfileType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, elevation=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if elevation is None:
+            self.elevation = []
+        else:
+            self.elevation = elevation
+        self.elevation_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, elevationProfileType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if elevationProfileType.subclass:
+            return elevationProfileType.subclass(*args_, **kwargs_)
+        else:
+            return elevationProfileType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_elevation(self):
+        return self.elevation
+    def set_elevation(self, elevation):
+        self.elevation = elevation
+    def add_elevation(self, value):
+        self.elevation.append(value)
+    def insert_elevation_at(self, index, value):
+        self.elevation.insert(index, value)
+    def replace_elevation_at(self, index, value):
+        self.elevation[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def _hasContent(self):
+        if (
+            self.elevation or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='elevationProfileType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('elevationProfileType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'elevationProfileType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='elevationProfileType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='elevationProfileType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='elevationProfileType'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='elevationProfileType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for elevation_ in self.elevation:
+            namespaceprefix_ = self.elevation_nsprefix_ + ':' if (UseCapturedNS_ and self.elevation_nsprefix_) else ''
+            elevation_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='elevation', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'elevation':
+            obj_ = elevationType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.elevation.append(obj_)
+            obj_.original_tagname_ = 'elevation'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class elevationProfileType
+
+
+class elevationType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, a=None, b=None, c=None, d=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, elevationType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if elevationType.subclass:
+            return elevationType.subclass(*args_, **kwargs_)
+        else:
+            return elevationType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='elevationType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('elevationType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'elevationType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='elevationType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='elevationType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='elevationType'):
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.a is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if self.b is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if self.c is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if self.d is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='elevationType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            value = self.gds_parse_double(value, node, 'a')
+            self.a = value
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            value = self.gds_parse_double(value, node, 'b')
+            self.b = value
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            value = self.gds_parse_double(value, node, 'c')
+            self.c = value
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            value = self.gds_parse_double(value, node, 'd')
+            self.d = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class elevationType
+
+
+class lateralProfileType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, superelevation=None, crossfall=None, shape=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if superelevation is None:
+            self.superelevation = []
+        else:
+            self.superelevation = superelevation
+        self.superelevation_nsprefix_ = None
+        if crossfall is None:
+            self.crossfall = []
+        else:
+            self.crossfall = crossfall
+        self.crossfall_nsprefix_ = None
+        if shape is None:
+            self.shape = []
+        else:
+            self.shape = shape
+        self.shape_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, lateralProfileType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if lateralProfileType.subclass:
+            return lateralProfileType.subclass(*args_, **kwargs_)
+        else:
+            return lateralProfileType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_superelevation(self):
+        return self.superelevation
+    def set_superelevation(self, superelevation):
+        self.superelevation = superelevation
+    def add_superelevation(self, value):
+        self.superelevation.append(value)
+    def insert_superelevation_at(self, index, value):
+        self.superelevation.insert(index, value)
+    def replace_superelevation_at(self, index, value):
+        self.superelevation[index] = value
+    def get_crossfall(self):
+        return self.crossfall
+    def set_crossfall(self, crossfall):
+        self.crossfall = crossfall
+    def add_crossfall(self, value):
+        self.crossfall.append(value)
+    def insert_crossfall_at(self, index, value):
+        self.crossfall.insert(index, value)
+    def replace_crossfall_at(self, index, value):
+        self.crossfall[index] = value
+    def get_shape(self):
+        return self.shape
+    def set_shape(self, shape):
+        self.shape = shape
+    def add_shape(self, value):
+        self.shape.append(value)
+    def insert_shape_at(self, index, value):
+        self.shape.insert(index, value)
+    def replace_shape_at(self, index, value):
+        self.shape[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def _hasContent(self):
+        if (
+            self.superelevation or
+            self.crossfall or
+            self.shape or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='lateralProfileType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('lateralProfileType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'lateralProfileType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='lateralProfileType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='lateralProfileType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='lateralProfileType'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='lateralProfileType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for superelevation_ in self.superelevation:
+            namespaceprefix_ = self.superelevation_nsprefix_ + ':' if (UseCapturedNS_ and self.superelevation_nsprefix_) else ''
+            superelevation_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='superelevation', pretty_print=pretty_print)
+        for crossfall_ in self.crossfall:
+            namespaceprefix_ = self.crossfall_nsprefix_ + ':' if (UseCapturedNS_ and self.crossfall_nsprefix_) else ''
+            crossfall_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='crossfall', pretty_print=pretty_print)
+        for shape_ in self.shape:
+            namespaceprefix_ = self.shape_nsprefix_ + ':' if (UseCapturedNS_ and self.shape_nsprefix_) else ''
+            shape_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='shape', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'superelevation':
+            obj_ = superelevationType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.superelevation.append(obj_)
+            obj_.original_tagname_ = 'superelevation'
+        elif nodeName_ == 'crossfall':
+            obj_ = crossfallType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.crossfall.append(obj_)
+            obj_.original_tagname_ = 'crossfall'
+        elif nodeName_ == 'shape':
+            obj_ = shapeType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.shape.append(obj_)
+            obj_.original_tagname_ = 'shape'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class lateralProfileType
+
+
+class superelevationType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, a=None, b=None, c=None, d=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, superelevationType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if superelevationType.subclass:
+            return superelevationType.subclass(*args_, **kwargs_)
+        else:
+            return superelevationType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='superelevationType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('superelevationType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'superelevationType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='superelevationType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='superelevationType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='superelevationType'):
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.a is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if self.b is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if self.c is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if self.d is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='superelevationType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            value = self.gds_parse_double(value, node, 'a')
+            self.a = value
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            value = self.gds_parse_double(value, node, 'b')
+            self.b = value
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            value = self.gds_parse_double(value, node, 'c')
+            self.c = value
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            value = self.gds_parse_double(value, node, 'd')
+            self.d = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class superelevationType
+
+
+class crossfallType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, side=None, s=None, a=None, b=None, c=None, d=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.side = _cast(None, side)
+        self.side_nsprefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, crossfallType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if crossfallType.subclass:
+            return crossfallType.subclass(*args_, **kwargs_)
+        else:
+            return crossfallType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_side(self):
+        return self.side
+    def set_side(self, side):
+        self.side = side
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def validate_crossfallSide(self, value):
+        # Validate type crossfallSide, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['left', 'right', 'both']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on crossfallSide' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='crossfallType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('crossfallType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'crossfallType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='crossfallType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='crossfallType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='crossfallType'):
+        if self.side is not None and 'side' not in already_processed:
+            already_processed.add('side')
+            outfile.write(' side=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.side), input_name='side')), ))
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.a is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if self.b is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if self.c is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if self.d is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='crossfallType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('side', node)
+        if value is not None and 'side' not in already_processed:
+            already_processed.add('side')
+            self.side = value
+            self.validate_crossfallSide(self.side)    # validate type crossfallSide
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            value = self.gds_parse_double(value, node, 'a')
+            self.a = value
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            value = self.gds_parse_double(value, node, 'b')
+            self.b = value
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            value = self.gds_parse_double(value, node, 'c')
+            self.c = value
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            value = self.gds_parse_double(value, node, 'd')
+            self.d = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class crossfallType
+
+
+class shapeType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, t=None, a=None, b=None, c=None, d=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.t = _cast(float, t)
+        self.t_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, shapeType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if shapeType.subclass:
+            return shapeType.subclass(*args_, **kwargs_)
+        else:
+            return shapeType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_t(self):
+        return self.t
+    def set_t(self, t):
+        self.t = t
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='shapeType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('shapeType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'shapeType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='shapeType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='shapeType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='shapeType'):
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.t is not None and 't' not in already_processed:
+            already_processed.add('t')
+            outfile.write(' t="%s"' % self.gds_format_double(self.t, input_name='t'))
+        if self.a is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if self.b is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if self.c is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if self.d is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='shapeType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('t', node)
+        if value is not None and 't' not in already_processed:
+            already_processed.add('t')
+            value = self.gds_parse_double(value, node, 't')
+            self.t = value
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            value = self.gds_parse_double(value, node, 'a')
+            self.a = value
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            value = self.gds_parse_double(value, node, 'b')
+            self.b = value
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            value = self.gds_parse_double(value, node, 'c')
+            self.c = value
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            value = self.gds_parse_double(value, node, 'd')
+            self.d = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class shapeType
+
+
+class lanesType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, laneOffset=None, laneSection=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if laneOffset is None:
+            self.laneOffset = []
+        else:
+            self.laneOffset = laneOffset
+        self.laneOffset_nsprefix_ = None
+        if laneSection is None:
+            self.laneSection = []
+        else:
+            self.laneSection = laneSection
+        self.laneSection_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, lanesType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if lanesType.subclass:
+            return lanesType.subclass(*args_, **kwargs_)
+        else:
+            return lanesType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_laneOffset(self):
+        return self.laneOffset
+    def set_laneOffset(self, laneOffset):
+        self.laneOffset = laneOffset
+    def add_laneOffset(self, value):
+        self.laneOffset.append(value)
+    def insert_laneOffset_at(self, index, value):
+        self.laneOffset.insert(index, value)
+    def replace_laneOffset_at(self, index, value):
+        self.laneOffset[index] = value
+    def get_laneSection(self):
+        return self.laneSection
+    def set_laneSection(self, laneSection):
+        self.laneSection = laneSection
+    def add_laneSection(self, value):
+        self.laneSection.append(value)
+    def insert_laneSection_at(self, index, value):
+        self.laneSection.insert(index, value)
+    def replace_laneSection_at(self, index, value):
+        self.laneSection[index] = value
+    def _hasContent(self):
+        if (
+            self.laneOffset or
+            self.laneSection
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='lanesType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('lanesType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'lanesType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='lanesType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='lanesType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='lanesType'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='lanesType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for laneOffset_ in self.laneOffset:
+            namespaceprefix_ = self.laneOffset_nsprefix_ + ':' if (UseCapturedNS_ and self.laneOffset_nsprefix_) else ''
+            laneOffset_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='laneOffset', pretty_print=pretty_print)
+        for laneSection_ in self.laneSection:
+            namespaceprefix_ = self.laneSection_nsprefix_ + ':' if (UseCapturedNS_ and self.laneSection_nsprefix_) else ''
+            laneSection_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='laneSection', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'laneOffset':
+            obj_ = laneOffsetType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.laneOffset.append(obj_)
+            obj_.original_tagname_ = 'laneOffset'
+        elif nodeName_ == 'laneSection':
+            obj_ = laneSectionType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.laneSection.append(obj_)
+            obj_.original_tagname_ = 'laneSection'
+# end class lanesType
+
+
+class laneOffsetType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, a=None, b=None, c=None, d=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, laneOffsetType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if laneOffsetType.subclass:
+            return laneOffsetType.subclass(*args_, **kwargs_)
+        else:
+            return laneOffsetType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='laneOffsetType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('laneOffsetType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'laneOffsetType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='laneOffsetType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='laneOffsetType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='laneOffsetType'):
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.a is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if self.b is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if self.c is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if self.d is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='laneOffsetType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            value = self.gds_parse_double(value, node, 'a')
+            self.a = value
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            value = self.gds_parse_double(value, node, 'b')
+            self.b = value
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            value = self.gds_parse_double(value, node, 'c')
+            self.c = value
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            value = self.gds_parse_double(value, node, 'd')
+            self.d = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class laneOffsetType
+
+
+class laneSectionType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, singleSide=None, left=None, center=None, right=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.singleSide = _cast(None, singleSide)
+        self.singleSide_nsprefix_ = None
+        self.left = left
+        self.left_nsprefix_ = None
+        self.center = center
+        self.center_nsprefix_ = None
+        self.right = right
+        self.right_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, laneSectionType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if laneSectionType.subclass:
+            return laneSectionType.subclass(*args_, **kwargs_)
+        else:
+            return laneSectionType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_left(self):
+        return self.left
+    def set_left(self, left):
+        self.left = left
+    def get_center(self):
+        return self.center
+    def set_center(self, center):
+        self.center = center
+    def get_right(self):
+        return self.right
+    def set_right(self, right):
+        self.right = right
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_singleSide(self):
+        return self.singleSide
+    def set_singleSide(self, singleSide):
+        self.singleSide = singleSide
+    def validate_singleSide(self, value):
+        # Validate type singleSide, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['true', 'false']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on singleSide' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.left is not None or
+            self.center is not None or
+            self.right is not None or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='laneSectionType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('laneSectionType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'laneSectionType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='laneSectionType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='laneSectionType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='laneSectionType'):
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.singleSide is not None and 'singleSide' not in already_processed:
+            already_processed.add('singleSide')
+            outfile.write(' singleSide=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.singleSide), input_name='singleSide')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='laneSectionType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.left is not None:
+            namespaceprefix_ = self.left_nsprefix_ + ':' if (UseCapturedNS_ and self.left_nsprefix_) else ''
+            self.left.export(outfile, level, namespaceprefix_, namespacedef_='', name_='left', pretty_print=pretty_print)
+        if self.center is not None:
+            namespaceprefix_ = self.center_nsprefix_ + ':' if (UseCapturedNS_ and self.center_nsprefix_) else ''
+            self.center.export(outfile, level, namespaceprefix_, namespacedef_='', name_='center', pretty_print=pretty_print)
+        if self.right is not None:
+            namespaceprefix_ = self.right_nsprefix_ + ':' if (UseCapturedNS_ and self.right_nsprefix_) else ''
+            self.right.export(outfile, level, namespaceprefix_, namespacedef_='', name_='right', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('singleSide', node)
+        if value is not None and 'singleSide' not in already_processed:
+            already_processed.add('singleSide')
+            self.singleSide = value
+            self.validate_singleSide(self.singleSide)    # validate type singleSide
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'left':
+            obj_ = leftType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.left = obj_
+            obj_.original_tagname_ = 'left'
+        elif nodeName_ == 'center':
+            obj_ = centerType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.center = obj_
+            obj_.original_tagname_ = 'center'
+        elif nodeName_ == 'right':
+            obj_ = rightType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.right = obj_
+            obj_.original_tagname_ = 'right'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class laneSectionType
+
+
+class leftType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, lane=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if lane is None:
+            self.lane = []
+        else:
+            self.lane = lane
+        self.lane_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, leftType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if leftType.subclass:
+            return leftType.subclass(*args_, **kwargs_)
+        else:
+            return leftType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_lane(self):
+        return self.lane
+    def set_lane(self, lane):
+        self.lane = lane
+    def add_lane(self, value):
+        self.lane.append(value)
+    def insert_lane_at(self, index, value):
+        self.lane.insert(index, value)
+    def replace_lane_at(self, index, value):
+        self.lane[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def _hasContent(self):
+        if (
+            self.lane or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='leftType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('leftType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'leftType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='leftType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='leftType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='leftType'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='leftType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for lane_ in self.lane:
+            namespaceprefix_ = self.lane_nsprefix_ + ':' if (UseCapturedNS_ and self.lane_nsprefix_) else ''
+            lane_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='lane', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'lane':
+            obj_ = lane.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.lane.append(obj_)
+            obj_.original_tagname_ = 'lane'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class leftType
+
+
+class centerType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, lane=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.lane = lane
+        self.lane_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, centerType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if centerType.subclass:
+            return centerType.subclass(*args_, **kwargs_)
+        else:
+            return centerType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_lane(self):
+        return self.lane
+    def set_lane(self, lane):
+        self.lane = lane
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def _hasContent(self):
+        if (
+            self.lane is not None or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='centerType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('centerType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'centerType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='centerType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='centerType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='centerType'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='centerType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.lane is not None:
+            namespaceprefix_ = self.lane_nsprefix_ + ':' if (UseCapturedNS_ and self.lane_nsprefix_) else ''
+            self.lane.export(outfile, level, namespaceprefix_, namespacedef_='', name_='lane', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'lane':
+            obj_ = centerLane.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.lane = obj_
+            obj_.original_tagname_ = 'lane'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class centerType
+
+
+class rightType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, lane=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if lane is None:
+            self.lane = []
+        else:
+            self.lane = lane
+        self.lane_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, rightType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if rightType.subclass:
+            return rightType.subclass(*args_, **kwargs_)
+        else:
+            return rightType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_lane(self):
+        return self.lane
+    def set_lane(self, lane):
+        self.lane = lane
+    def add_lane(self, value):
+        self.lane.append(value)
+    def insert_lane_at(self, index, value):
+        self.lane.insert(index, value)
+    def replace_lane_at(self, index, value):
+        self.lane[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def _hasContent(self):
+        if (
+            self.lane or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='rightType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('rightType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'rightType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='rightType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='rightType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='rightType'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='rightType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for lane_ in self.lane:
+            namespaceprefix_ = self.lane_nsprefix_ + ':' if (UseCapturedNS_ and self.lane_nsprefix_) else ''
+            lane_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='lane', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'lane':
+            obj_ = lane.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.lane.append(obj_)
+            obj_.original_tagname_ = 'lane'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class rightType
+
+
+class objectsType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, object=None, objectReference=None, tunnel=None, bridge=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if object is None:
+            self.object = []
+        else:
+            self.object = object
+        self.object_nsprefix_ = None
+        if objectReference is None:
+            self.objectReference = []
+        else:
+            self.objectReference = objectReference
+        self.objectReference_nsprefix_ = None
+        if tunnel is None:
+            self.tunnel = []
+        else:
+            self.tunnel = tunnel
+        self.tunnel_nsprefix_ = None
+        if bridge is None:
+            self.bridge = []
+        else:
+            self.bridge = bridge
+        self.bridge_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, objectsType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if objectsType.subclass:
+            return objectsType.subclass(*args_, **kwargs_)
+        else:
+            return objectsType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_object(self):
+        return self.object
+    def set_object(self, object):
+        self.object = object
+    def add_object(self, value):
+        self.object.append(value)
+    def insert_object_at(self, index, value):
+        self.object.insert(index, value)
+    def replace_object_at(self, index, value):
+        self.object[index] = value
+    def get_objectReference(self):
+        return self.objectReference
+    def set_objectReference(self, objectReference):
+        self.objectReference = objectReference
+    def add_objectReference(self, value):
+        self.objectReference.append(value)
+    def insert_objectReference_at(self, index, value):
+        self.objectReference.insert(index, value)
+    def replace_objectReference_at(self, index, value):
+        self.objectReference[index] = value
+    def get_tunnel(self):
+        return self.tunnel
+    def set_tunnel(self, tunnel):
+        self.tunnel = tunnel
+    def add_tunnel(self, value):
+        self.tunnel.append(value)
+    def insert_tunnel_at(self, index, value):
+        self.tunnel.insert(index, value)
+    def replace_tunnel_at(self, index, value):
+        self.tunnel[index] = value
+    def get_bridge(self):
+        return self.bridge
+    def set_bridge(self, bridge):
+        self.bridge = bridge
+    def add_bridge(self, value):
+        self.bridge.append(value)
+    def insert_bridge_at(self, index, value):
+        self.bridge.insert(index, value)
+    def replace_bridge_at(self, index, value):
+        self.bridge[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def _hasContent(self):
+        if (
+            self.object or
+            self.objectReference or
+            self.tunnel or
+            self.bridge or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='objectsType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('objectsType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'objectsType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='objectsType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='objectsType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='objectsType'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='objectsType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for object_ in self.object:
+            namespaceprefix_ = self.object_nsprefix_ + ':' if (UseCapturedNS_ and self.object_nsprefix_) else ''
+            object_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='object', pretty_print=pretty_print)
+        for objectReference_ in self.objectReference:
+            namespaceprefix_ = self.objectReference_nsprefix_ + ':' if (UseCapturedNS_ and self.objectReference_nsprefix_) else ''
+            objectReference_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='objectReference', pretty_print=pretty_print)
+        for tunnel_ in self.tunnel:
+            namespaceprefix_ = self.tunnel_nsprefix_ + ':' if (UseCapturedNS_ and self.tunnel_nsprefix_) else ''
+            tunnel_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='tunnel', pretty_print=pretty_print)
+        for bridge_ in self.bridge:
+            namespaceprefix_ = self.bridge_nsprefix_ + ':' if (UseCapturedNS_ and self.bridge_nsprefix_) else ''
+            bridge_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='bridge', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'object':
+            obj_ = objectType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.object.append(obj_)
+            obj_.original_tagname_ = 'object'
+        elif nodeName_ == 'objectReference':
+            obj_ = objectReferenceType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.objectReference.append(obj_)
+            obj_.original_tagname_ = 'objectReference'
+        elif nodeName_ == 'tunnel':
+            obj_ = tunnelType2.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.tunnel.append(obj_)
+            obj_.original_tagname_ = 'tunnel'
+        elif nodeName_ == 'bridge':
+            obj_ = bridgeType3.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.bridge.append(obj_)
+            obj_.original_tagname_ = 'bridge'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class objectsType
+
+
+class objectType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, type_=None, name=None, id=None, s=None, t=None, zOffset=None, validLength=None, orientation=None, length=None, width=None, radius=None, height=None, hdg=None, pitch=None, roll=None, repeat=None, outline=None, material=None, validity=None, parkingSpace=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.t = _cast(float, t)
+        self.t_nsprefix_ = None
+        self.zOffset = _cast(float, zOffset)
+        self.zOffset_nsprefix_ = None
+        self.validLength = _cast(float, validLength)
+        self.validLength_nsprefix_ = None
+        self.orientation = _cast(None, orientation)
+        self.orientation_nsprefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        self.radius = _cast(float, radius)
+        self.radius_nsprefix_ = None
+        self.height = _cast(float, height)
+        self.height_nsprefix_ = None
+        self.hdg = _cast(float, hdg)
+        self.hdg_nsprefix_ = None
+        self.pitch = _cast(float, pitch)
+        self.pitch_nsprefix_ = None
+        self.roll = _cast(float, roll)
+        self.roll_nsprefix_ = None
+        if repeat is None:
+            self.repeat = []
+        else:
+            self.repeat = repeat
+        self.repeat_nsprefix_ = None
+        self.outline = outline
+        self.outline_nsprefix_ = None
+        self.material = material
+        self.material_nsprefix_ = None
+        if validity is None:
+            self.validity = []
+        else:
+            self.validity = validity
+        self.validity_nsprefix_ = None
+        self.parkingSpace = parkingSpace
+        self.parkingSpace_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, objectType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if objectType.subclass:
+            return objectType.subclass(*args_, **kwargs_)
+        else:
+            return objectType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_repeat(self):
+        return self.repeat
+    def set_repeat(self, repeat):
+        self.repeat = repeat
+    def add_repeat(self, value):
+        self.repeat.append(value)
+    def insert_repeat_at(self, index, value):
+        self.repeat.insert(index, value)
+    def replace_repeat_at(self, index, value):
+        self.repeat[index] = value
+    def get_outline(self):
+        return self.outline
+    def set_outline(self, outline):
+        self.outline = outline
+    def get_material(self):
+        return self.material
+    def set_material(self, material):
+        self.material = material
+    def get_validity(self):
+        return self.validity
+    def set_validity(self, validity):
+        self.validity = validity
+    def add_validity(self, value):
+        self.validity.append(value)
+    def insert_validity_at(self, index, value):
+        self.validity.insert(index, value)
+    def replace_validity_at(self, index, value):
+        self.validity[index] = value
+    def get_parkingSpace(self):
+        return self.parkingSpace
+    def set_parkingSpace(self, parkingSpace):
+        self.parkingSpace = parkingSpace
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    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 get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_t(self):
+        return self.t
+    def set_t(self, t):
+        self.t = t
+    def get_zOffset(self):
+        return self.zOffset
+    def set_zOffset(self, zOffset):
+        self.zOffset = zOffset
+    def get_validLength(self):
+        return self.validLength
+    def set_validLength(self, validLength):
+        self.validLength = validLength
+    def get_orientation(self):
+        return self.orientation
+    def set_orientation(self, orientation):
+        self.orientation = orientation
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def get_radius(self):
+        return self.radius
+    def set_radius(self, radius):
+        self.radius = radius
+    def get_height(self):
+        return self.height
+    def set_height(self, height):
+        self.height = height
+    def get_hdg(self):
+        return self.hdg
+    def set_hdg(self, hdg):
+        self.hdg = hdg
+    def get_pitch(self):
+        return self.pitch
+    def set_pitch(self, pitch):
+        self.pitch = pitch
+    def get_roll(self):
+        return self.roll
+    def set_roll(self, roll):
+        self.roll = roll
+    def validate_orientation(self, value):
+        # Validate type orientation, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['+', '-', 'none']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on orientation' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.repeat or
+            self.outline is not None or
+            self.material is not None or
+            self.validity or
+            self.parkingSpace is not None or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='objectType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('objectType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'objectType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='objectType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='objectType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='objectType'):
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(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_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.t is not None and 't' not in already_processed:
+            already_processed.add('t')
+            outfile.write(' t="%s"' % self.gds_format_double(self.t, input_name='t'))
+        if self.zOffset is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            outfile.write(' zOffset="%s"' % self.gds_format_double(self.zOffset, input_name='zOffset'))
+        if self.validLength is not None and 'validLength' not in already_processed:
+            already_processed.add('validLength')
+            outfile.write(' validLength="%s"' % self.gds_format_double(self.validLength, input_name='validLength'))
+        if self.orientation is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            outfile.write(' orientation=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.orientation), input_name='orientation')), ))
+        if self.length is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+        if self.width is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+        if self.radius is not None and 'radius' not in already_processed:
+            already_processed.add('radius')
+            outfile.write(' radius="%s"' % self.gds_format_double(self.radius, input_name='radius'))
+        if self.height is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            outfile.write(' height="%s"' % self.gds_format_double(self.height, input_name='height'))
+        if self.hdg is not None and 'hdg' not in already_processed:
+            already_processed.add('hdg')
+            outfile.write(' hdg="%s"' % self.gds_format_double(self.hdg, input_name='hdg'))
+        if self.pitch is not None and 'pitch' not in already_processed:
+            already_processed.add('pitch')
+            outfile.write(' pitch="%s"' % self.gds_format_double(self.pitch, input_name='pitch'))
+        if self.roll is not None and 'roll' not in already_processed:
+            already_processed.add('roll')
+            outfile.write(' roll="%s"' % self.gds_format_double(self.roll, input_name='roll'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='objectType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for repeat_ in self.repeat:
+            namespaceprefix_ = self.repeat_nsprefix_ + ':' if (UseCapturedNS_ and self.repeat_nsprefix_) else ''
+            repeat_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='repeat', pretty_print=pretty_print)
+        if self.outline is not None:
+            namespaceprefix_ = self.outline_nsprefix_ + ':' if (UseCapturedNS_ and self.outline_nsprefix_) else ''
+            self.outline.export(outfile, level, namespaceprefix_, namespacedef_='', name_='outline', pretty_print=pretty_print)
+        if self.material is not None:
+            namespaceprefix_ = self.material_nsprefix_ + ':' if (UseCapturedNS_ and self.material_nsprefix_) else ''
+            self.material.export(outfile, level, namespaceprefix_, namespacedef_='', name_='material', pretty_print=pretty_print)
+        for validity_ in self.validity:
+            namespaceprefix_ = self.validity_nsprefix_ + ':' if (UseCapturedNS_ and self.validity_nsprefix_) else ''
+            validity_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='validity', pretty_print=pretty_print)
+        if self.parkingSpace is not None:
+            namespaceprefix_ = self.parkingSpace_nsprefix_ + ':' if (UseCapturedNS_ and self.parkingSpace_nsprefix_) else ''
+            self.parkingSpace.export(outfile, level, namespaceprefix_, namespacedef_='', name_='parkingSpace', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        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_('name', node)
+        if value is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            self.name = 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
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('t', node)
+        if value is not None and 't' not in already_processed:
+            already_processed.add('t')
+            value = self.gds_parse_double(value, node, 't')
+            self.t = value
+        value = find_attr_value_('zOffset', node)
+        if value is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            value = self.gds_parse_double(value, node, 'zOffset')
+            self.zOffset = value
+        value = find_attr_value_('validLength', node)
+        if value is not None and 'validLength' not in already_processed:
+            already_processed.add('validLength')
+            value = self.gds_parse_double(value, node, 'validLength')
+            self.validLength = value
+        value = find_attr_value_('orientation', node)
+        if value is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            self.orientation = value
+            self.validate_orientation(self.orientation)    # validate type orientation
+        value = find_attr_value_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            value = self.gds_parse_double(value, node, 'length')
+            self.length = value
+        value = find_attr_value_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            value = self.gds_parse_double(value, node, 'width')
+            self.width = value
+        value = find_attr_value_('radius', node)
+        if value is not None and 'radius' not in already_processed:
+            already_processed.add('radius')
+            value = self.gds_parse_double(value, node, 'radius')
+            self.radius = value
+        value = find_attr_value_('height', node)
+        if value is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            value = self.gds_parse_double(value, node, 'height')
+            self.height = value
+        value = find_attr_value_('hdg', node)
+        if value is not None and 'hdg' not in already_processed:
+            already_processed.add('hdg')
+            value = self.gds_parse_double(value, node, 'hdg')
+            self.hdg = value
+        value = find_attr_value_('pitch', node)
+        if value is not None and 'pitch' not in already_processed:
+            already_processed.add('pitch')
+            value = self.gds_parse_double(value, node, 'pitch')
+            self.pitch = value
+        value = find_attr_value_('roll', node)
+        if value is not None and 'roll' not in already_processed:
+            already_processed.add('roll')
+            value = self.gds_parse_double(value, node, 'roll')
+            self.roll = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'repeat':
+            obj_ = repeatType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.repeat.append(obj_)
+            obj_.original_tagname_ = 'repeat'
+        elif nodeName_ == 'outline':
+            obj_ = outlineType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.outline = obj_
+            obj_.original_tagname_ = 'outline'
+        elif nodeName_ == 'material':
+            obj_ = materialType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.material = obj_
+            obj_.original_tagname_ = 'material'
+        elif nodeName_ == 'validity':
+            obj_ = laneValidity.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.validity.append(obj_)
+            obj_.original_tagname_ = 'validity'
+        elif nodeName_ == 'parkingSpace':
+            obj_ = parkingSpace.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.parkingSpace = obj_
+            obj_.original_tagname_ = 'parkingSpace'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class objectType
+
+
+class repeatType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, length=None, distance=None, tStart=None, tEnd=None, widthStart=None, widthEnd=None, heightStart=None, heightEnd=None, zOffsetStart=None, zOffsetEnd=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.distance = _cast(float, distance)
+        self.distance_nsprefix_ = None
+        self.tStart = _cast(float, tStart)
+        self.tStart_nsprefix_ = None
+        self.tEnd = _cast(float, tEnd)
+        self.tEnd_nsprefix_ = None
+        self.widthStart = _cast(float, widthStart)
+        self.widthStart_nsprefix_ = None
+        self.widthEnd = _cast(float, widthEnd)
+        self.widthEnd_nsprefix_ = None
+        self.heightStart = _cast(float, heightStart)
+        self.heightStart_nsprefix_ = None
+        self.heightEnd = _cast(float, heightEnd)
+        self.heightEnd_nsprefix_ = None
+        self.zOffsetStart = _cast(float, zOffsetStart)
+        self.zOffsetStart_nsprefix_ = None
+        self.zOffsetEnd = _cast(float, zOffsetEnd)
+        self.zOffsetEnd_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, repeatType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if repeatType.subclass:
+            return repeatType.subclass(*args_, **kwargs_)
+        else:
+            return repeatType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def get_distance(self):
+        return self.distance
+    def set_distance(self, distance):
+        self.distance = distance
+    def get_tStart(self):
+        return self.tStart
+    def set_tStart(self, tStart):
+        self.tStart = tStart
+    def get_tEnd(self):
+        return self.tEnd
+    def set_tEnd(self, tEnd):
+        self.tEnd = tEnd
+    def get_widthStart(self):
+        return self.widthStart
+    def set_widthStart(self, widthStart):
+        self.widthStart = widthStart
+    def get_widthEnd(self):
+        return self.widthEnd
+    def set_widthEnd(self, widthEnd):
+        self.widthEnd = widthEnd
+    def get_heightStart(self):
+        return self.heightStart
+    def set_heightStart(self, heightStart):
+        self.heightStart = heightStart
+    def get_heightEnd(self):
+        return self.heightEnd
+    def set_heightEnd(self, heightEnd):
+        self.heightEnd = heightEnd
+    def get_zOffsetStart(self):
+        return self.zOffsetStart
+    def set_zOffsetStart(self, zOffsetStart):
+        self.zOffsetStart = zOffsetStart
+    def get_zOffsetEnd(self):
+        return self.zOffsetEnd
+    def set_zOffsetEnd(self, zOffsetEnd):
+        self.zOffsetEnd = zOffsetEnd
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='repeatType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('repeatType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'repeatType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='repeatType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='repeatType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='repeatType'):
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.length is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+        if self.distance is not None and 'distance' not in already_processed:
+            already_processed.add('distance')
+            outfile.write(' distance="%s"' % self.gds_format_double(self.distance, input_name='distance'))
+        if self.tStart is not None and 'tStart' not in already_processed:
+            already_processed.add('tStart')
+            outfile.write(' tStart="%s"' % self.gds_format_double(self.tStart, input_name='tStart'))
+        if self.tEnd is not None and 'tEnd' not in already_processed:
+            already_processed.add('tEnd')
+            outfile.write(' tEnd="%s"' % self.gds_format_double(self.tEnd, input_name='tEnd'))
+        if self.widthStart is not None and 'widthStart' not in already_processed:
+            already_processed.add('widthStart')
+            outfile.write(' widthStart="%s"' % self.gds_format_double(self.widthStart, input_name='widthStart'))
+        if self.widthEnd is not None and 'widthEnd' not in already_processed:
+            already_processed.add('widthEnd')
+            outfile.write(' widthEnd="%s"' % self.gds_format_double(self.widthEnd, input_name='widthEnd'))
+        if self.heightStart is not None and 'heightStart' not in already_processed:
+            already_processed.add('heightStart')
+            outfile.write(' heightStart="%s"' % self.gds_format_double(self.heightStart, input_name='heightStart'))
+        if self.heightEnd is not None and 'heightEnd' not in already_processed:
+            already_processed.add('heightEnd')
+            outfile.write(' heightEnd="%s"' % self.gds_format_double(self.heightEnd, input_name='heightEnd'))
+        if self.zOffsetStart is not None and 'zOffsetStart' not in already_processed:
+            already_processed.add('zOffsetStart')
+            outfile.write(' zOffsetStart="%s"' % self.gds_format_double(self.zOffsetStart, input_name='zOffsetStart'))
+        if self.zOffsetEnd is not None and 'zOffsetEnd' not in already_processed:
+            already_processed.add('zOffsetEnd')
+            outfile.write(' zOffsetEnd="%s"' % self.gds_format_double(self.zOffsetEnd, input_name='zOffsetEnd'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='repeatType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            value = self.gds_parse_double(value, node, 'length')
+            self.length = value
+        value = find_attr_value_('distance', node)
+        if value is not None and 'distance' not in already_processed:
+            already_processed.add('distance')
+            value = self.gds_parse_double(value, node, 'distance')
+            self.distance = value
+        value = find_attr_value_('tStart', node)
+        if value is not None and 'tStart' not in already_processed:
+            already_processed.add('tStart')
+            value = self.gds_parse_double(value, node, 'tStart')
+            self.tStart = value
+        value = find_attr_value_('tEnd', node)
+        if value is not None and 'tEnd' not in already_processed:
+            already_processed.add('tEnd')
+            value = self.gds_parse_double(value, node, 'tEnd')
+            self.tEnd = value
+        value = find_attr_value_('widthStart', node)
+        if value is not None and 'widthStart' not in already_processed:
+            already_processed.add('widthStart')
+            value = self.gds_parse_double(value, node, 'widthStart')
+            self.widthStart = value
+        value = find_attr_value_('widthEnd', node)
+        if value is not None and 'widthEnd' not in already_processed:
+            already_processed.add('widthEnd')
+            value = self.gds_parse_double(value, node, 'widthEnd')
+            self.widthEnd = value
+        value = find_attr_value_('heightStart', node)
+        if value is not None and 'heightStart' not in already_processed:
+            already_processed.add('heightStart')
+            value = self.gds_parse_double(value, node, 'heightStart')
+            self.heightStart = value
+        value = find_attr_value_('heightEnd', node)
+        if value is not None and 'heightEnd' not in already_processed:
+            already_processed.add('heightEnd')
+            value = self.gds_parse_double(value, node, 'heightEnd')
+            self.heightEnd = value
+        value = find_attr_value_('zOffsetStart', node)
+        if value is not None and 'zOffsetStart' not in already_processed:
+            already_processed.add('zOffsetStart')
+            value = self.gds_parse_double(value, node, 'zOffsetStart')
+            self.zOffsetStart = value
+        value = find_attr_value_('zOffsetEnd', node)
+        if value is not None and 'zOffsetEnd' not in already_processed:
+            already_processed.add('zOffsetEnd')
+            value = self.gds_parse_double(value, node, 'zOffsetEnd')
+            self.zOffsetEnd = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class repeatType
+
+
+class outlineType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, cornerRoad=None, cornerLocal=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if cornerRoad is None:
+            self.cornerRoad = []
+        else:
+            self.cornerRoad = cornerRoad
+        self.cornerRoad_nsprefix_ = None
+        if cornerLocal is None:
+            self.cornerLocal = []
+        else:
+            self.cornerLocal = cornerLocal
+        self.cornerLocal_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, outlineType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if outlineType.subclass:
+            return outlineType.subclass(*args_, **kwargs_)
+        else:
+            return outlineType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_cornerRoad(self):
+        return self.cornerRoad
+    def set_cornerRoad(self, cornerRoad):
+        self.cornerRoad = cornerRoad
+    def add_cornerRoad(self, value):
+        self.cornerRoad.append(value)
+    def insert_cornerRoad_at(self, index, value):
+        self.cornerRoad.insert(index, value)
+    def replace_cornerRoad_at(self, index, value):
+        self.cornerRoad[index] = value
+    def get_cornerLocal(self):
+        return self.cornerLocal
+    def set_cornerLocal(self, cornerLocal):
+        self.cornerLocal = cornerLocal
+    def add_cornerLocal(self, value):
+        self.cornerLocal.append(value)
+    def insert_cornerLocal_at(self, index, value):
+        self.cornerLocal.insert(index, value)
+    def replace_cornerLocal_at(self, index, value):
+        self.cornerLocal[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def _hasContent(self):
+        if (
+            self.cornerRoad or
+            self.cornerLocal or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='outlineType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('outlineType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'outlineType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='outlineType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='outlineType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='outlineType'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='outlineType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for cornerRoad_ in self.cornerRoad:
+            namespaceprefix_ = self.cornerRoad_nsprefix_ + ':' if (UseCapturedNS_ and self.cornerRoad_nsprefix_) else ''
+            cornerRoad_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='cornerRoad', pretty_print=pretty_print)
+        for cornerLocal_ in self.cornerLocal:
+            namespaceprefix_ = self.cornerLocal_nsprefix_ + ':' if (UseCapturedNS_ and self.cornerLocal_nsprefix_) else ''
+            cornerLocal_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='cornerLocal', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'cornerRoad':
+            obj_ = cornerRoadType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.cornerRoad.append(obj_)
+            obj_.original_tagname_ = 'cornerRoad'
+        elif nodeName_ == 'cornerLocal':
+            obj_ = cornerLocalType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.cornerLocal.append(obj_)
+            obj_.original_tagname_ = 'cornerLocal'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class outlineType
+
+
+class cornerRoadType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, t=None, dz=None, height=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.t = _cast(float, t)
+        self.t_nsprefix_ = None
+        self.dz = _cast(float, dz)
+        self.dz_nsprefix_ = None
+        self.height = _cast(float, height)
+        self.height_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, cornerRoadType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if cornerRoadType.subclass:
+            return cornerRoadType.subclass(*args_, **kwargs_)
+        else:
+            return cornerRoadType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_t(self):
+        return self.t
+    def set_t(self, t):
+        self.t = t
+    def get_dz(self):
+        return self.dz
+    def set_dz(self, dz):
+        self.dz = dz
+    def get_height(self):
+        return self.height
+    def set_height(self, height):
+        self.height = height
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='cornerRoadType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('cornerRoadType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'cornerRoadType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='cornerRoadType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='cornerRoadType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='cornerRoadType'):
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.t is not None and 't' not in already_processed:
+            already_processed.add('t')
+            outfile.write(' t="%s"' % self.gds_format_double(self.t, input_name='t'))
+        if self.dz is not None and 'dz' not in already_processed:
+            already_processed.add('dz')
+            outfile.write(' dz="%s"' % self.gds_format_double(self.dz, input_name='dz'))
+        if self.height is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            outfile.write(' height="%s"' % self.gds_format_double(self.height, input_name='height'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='cornerRoadType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('t', node)
+        if value is not None and 't' not in already_processed:
+            already_processed.add('t')
+            value = self.gds_parse_double(value, node, 't')
+            self.t = value
+        value = find_attr_value_('dz', node)
+        if value is not None and 'dz' not in already_processed:
+            already_processed.add('dz')
+            value = self.gds_parse_double(value, node, 'dz')
+            self.dz = value
+        value = find_attr_value_('height', node)
+        if value is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            value = self.gds_parse_double(value, node, 'height')
+            self.height = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class cornerRoadType
+
+
+class cornerLocalType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, u=None, v=None, z=None, height=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.u = _cast(float, u)
+        self.u_nsprefix_ = None
+        self.v = _cast(float, v)
+        self.v_nsprefix_ = None
+        self.z = _cast(float, z)
+        self.z_nsprefix_ = None
+        self.height = _cast(float, height)
+        self.height_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, cornerLocalType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if cornerLocalType.subclass:
+            return cornerLocalType.subclass(*args_, **kwargs_)
+        else:
+            return cornerLocalType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_u(self):
+        return self.u
+    def set_u(self, u):
+        self.u = u
+    def get_v(self):
+        return self.v
+    def set_v(self, v):
+        self.v = v
+    def get_z(self):
+        return self.z
+    def set_z(self, z):
+        self.z = z
+    def get_height(self):
+        return self.height
+    def set_height(self, height):
+        self.height = height
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='cornerLocalType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('cornerLocalType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'cornerLocalType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='cornerLocalType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='cornerLocalType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='cornerLocalType'):
+        if self.u is not None and 'u' not in already_processed:
+            already_processed.add('u')
+            outfile.write(' u="%s"' % self.gds_format_double(self.u, input_name='u'))
+        if self.v is not None and 'v' not in already_processed:
+            already_processed.add('v')
+            outfile.write(' v="%s"' % self.gds_format_double(self.v, input_name='v'))
+        if self.z is not None and 'z' not in already_processed:
+            already_processed.add('z')
+            outfile.write(' z="%s"' % self.gds_format_double(self.z, input_name='z'))
+        if self.height is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            outfile.write(' height="%s"' % self.gds_format_double(self.height, input_name='height'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='cornerLocalType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('u', node)
+        if value is not None and 'u' not in already_processed:
+            already_processed.add('u')
+            value = self.gds_parse_double(value, node, 'u')
+            self.u = value
+        value = find_attr_value_('v', node)
+        if value is not None and 'v' not in already_processed:
+            already_processed.add('v')
+            value = self.gds_parse_double(value, node, 'v')
+            self.v = value
+        value = find_attr_value_('z', node)
+        if value is not None and 'z' not in already_processed:
+            already_processed.add('z')
+            value = self.gds_parse_double(value, node, 'z')
+            self.z = value
+        value = find_attr_value_('height', node)
+        if value is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            value = self.gds_parse_double(value, node, 'height')
+            self.height = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class cornerLocalType
+
+
+class materialType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, surface=None, friction=None, roughness=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.surface = _cast(None, surface)
+        self.surface_nsprefix_ = None
+        self.friction = _cast(float, friction)
+        self.friction_nsprefix_ = None
+        self.roughness = _cast(float, roughness)
+        self.roughness_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, materialType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if materialType.subclass:
+            return materialType.subclass(*args_, **kwargs_)
+        else:
+            return materialType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_surface(self):
+        return self.surface
+    def set_surface(self, surface):
+        self.surface = surface
+    def get_friction(self):
+        return self.friction
+    def set_friction(self, friction):
+        self.friction = friction
+    def get_roughness(self):
+        return self.roughness
+    def set_roughness(self, roughness):
+        self.roughness = roughness
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='materialType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('materialType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'materialType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='materialType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='materialType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='materialType'):
+        if self.surface is not None and 'surface' not in already_processed:
+            already_processed.add('surface')
+            outfile.write(' surface=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.surface), input_name='surface')), ))
+        if self.friction is not None and 'friction' not in already_processed:
+            already_processed.add('friction')
+            outfile.write(' friction="%s"' % self.gds_format_double(self.friction, input_name='friction'))
+        if self.roughness is not None and 'roughness' not in already_processed:
+            already_processed.add('roughness')
+            outfile.write(' roughness="%s"' % self.gds_format_double(self.roughness, input_name='roughness'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='materialType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('surface', node)
+        if value is not None and 'surface' not in already_processed:
+            already_processed.add('surface')
+            self.surface = value
+        value = find_attr_value_('friction', node)
+        if value is not None and 'friction' not in already_processed:
+            already_processed.add('friction')
+            value = self.gds_parse_double(value, node, 'friction')
+            self.friction = value
+        value = find_attr_value_('roughness', node)
+        if value is not None and 'roughness' not in already_processed:
+            already_processed.add('roughness')
+            value = self.gds_parse_double(value, node, 'roughness')
+            self.roughness = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class materialType
+
+
+class objectReferenceType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, t=None, id=None, zOffset=None, validLength=None, orientation=None, validity=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.t = _cast(float, t)
+        self.t_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.zOffset = _cast(float, zOffset)
+        self.zOffset_nsprefix_ = None
+        self.validLength = _cast(float, validLength)
+        self.validLength_nsprefix_ = None
+        self.orientation = _cast(None, orientation)
+        self.orientation_nsprefix_ = None
+        if validity is None:
+            self.validity = []
+        else:
+            self.validity = validity
+        self.validity_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, objectReferenceType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if objectReferenceType.subclass:
+            return objectReferenceType.subclass(*args_, **kwargs_)
+        else:
+            return objectReferenceType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_validity(self):
+        return self.validity
+    def set_validity(self, validity):
+        self.validity = validity
+    def add_validity(self, value):
+        self.validity.append(value)
+    def insert_validity_at(self, index, value):
+        self.validity.insert(index, value)
+    def replace_validity_at(self, index, value):
+        self.validity[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_t(self):
+        return self.t
+    def set_t(self, t):
+        self.t = t
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_zOffset(self):
+        return self.zOffset
+    def set_zOffset(self, zOffset):
+        self.zOffset = zOffset
+    def get_validLength(self):
+        return self.validLength
+    def set_validLength(self, validLength):
+        self.validLength = validLength
+    def get_orientation(self):
+        return self.orientation
+    def set_orientation(self, orientation):
+        self.orientation = orientation
+    def validate_orientation(self, value):
+        # Validate type orientation, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['+', '-', 'none']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on orientation' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.validity or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='objectReferenceType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('objectReferenceType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'objectReferenceType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='objectReferenceType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='objectReferenceType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='objectReferenceType'):
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.t is not None and 't' not in already_processed:
+            already_processed.add('t')
+            outfile.write(' t="%s"' % self.gds_format_double(self.t, input_name='t'))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.zOffset is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            outfile.write(' zOffset="%s"' % self.gds_format_double(self.zOffset, input_name='zOffset'))
+        if self.validLength is not None and 'validLength' not in already_processed:
+            already_processed.add('validLength')
+            outfile.write(' validLength="%s"' % self.gds_format_double(self.validLength, input_name='validLength'))
+        if self.orientation is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            outfile.write(' orientation=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.orientation), input_name='orientation')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='objectReferenceType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for validity_ in self.validity:
+            namespaceprefix_ = self.validity_nsprefix_ + ':' if (UseCapturedNS_ and self.validity_nsprefix_) else ''
+            validity_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='validity', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('t', node)
+        if value is not None and 't' not in already_processed:
+            already_processed.add('t')
+            value = self.gds_parse_double(value, node, 't')
+            self.t = 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
+        value = find_attr_value_('zOffset', node)
+        if value is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            value = self.gds_parse_double(value, node, 'zOffset')
+            self.zOffset = value
+        value = find_attr_value_('validLength', node)
+        if value is not None and 'validLength' not in already_processed:
+            already_processed.add('validLength')
+            value = self.gds_parse_double(value, node, 'validLength')
+            self.validLength = value
+        value = find_attr_value_('orientation', node)
+        if value is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            self.orientation = value
+            self.validate_orientation(self.orientation)    # validate type orientation
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'validity':
+            obj_ = laneValidity.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.validity.append(obj_)
+            obj_.original_tagname_ = 'validity'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class objectReferenceType
+
+
+class tunnelType2(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, length=None, name=None, id=None, type_=None, lighting=None, daylight=None, validity=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.lighting = _cast(float, lighting)
+        self.lighting_nsprefix_ = None
+        self.daylight = _cast(float, daylight)
+        self.daylight_nsprefix_ = None
+        if validity is None:
+            self.validity = []
+        else:
+            self.validity = validity
+        self.validity_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, tunnelType2)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if tunnelType2.subclass:
+            return tunnelType2.subclass(*args_, **kwargs_)
+        else:
+            return tunnelType2(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_validity(self):
+        return self.validity
+    def set_validity(self, validity):
+        self.validity = validity
+    def add_validity(self, value):
+        self.validity.append(value)
+    def insert_validity_at(self, index, value):
+        self.validity.insert(index, value)
+    def replace_validity_at(self, index, value):
+        self.validity[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_lighting(self):
+        return self.lighting
+    def set_lighting(self, lighting):
+        self.lighting = lighting
+    def get_daylight(self):
+        return self.daylight
+    def set_daylight(self, daylight):
+        self.daylight = daylight
+    def validate_tunnelType(self, value):
+        # Validate type tunnelType, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['standard', 'underpass']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on tunnelType' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.validity or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='tunnelType2', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('tunnelType2')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'tunnelType2':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='tunnelType2')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='tunnelType2', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='tunnelType2'):
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.length is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+        if self.lighting is not None and 'lighting' not in already_processed:
+            already_processed.add('lighting')
+            outfile.write(' lighting="%s"' % self.gds_format_double(self.lighting, input_name='lighting'))
+        if self.daylight is not None and 'daylight' not in already_processed:
+            already_processed.add('daylight')
+            outfile.write(' daylight="%s"' % self.gds_format_double(self.daylight, input_name='daylight'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='tunnelType2', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for validity_ in self.validity:
+            namespaceprefix_ = self.validity_nsprefix_ + ':' if (UseCapturedNS_ and self.validity_nsprefix_) else ''
+            validity_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='validity', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            value = self.gds_parse_double(value, node, 'length')
+            self.length = value
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = 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
+            self.validate_tunnelType(self.type_)    # validate type tunnelType
+        value = find_attr_value_('lighting', node)
+        if value is not None and 'lighting' not in already_processed:
+            already_processed.add('lighting')
+            value = self.gds_parse_double(value, node, 'lighting')
+            self.lighting = value
+        value = find_attr_value_('daylight', node)
+        if value is not None and 'daylight' not in already_processed:
+            already_processed.add('daylight')
+            value = self.gds_parse_double(value, node, 'daylight')
+            self.daylight = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'validity':
+            obj_ = laneValidity.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.validity.append(obj_)
+            obj_.original_tagname_ = 'validity'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class tunnelType2
+
+
+class bridgeType3(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, length=None, name=None, id=None, type_=None, validity=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        if validity is None:
+            self.validity = []
+        else:
+            self.validity = validity
+        self.validity_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, bridgeType3)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if bridgeType3.subclass:
+            return bridgeType3.subclass(*args_, **kwargs_)
+        else:
+            return bridgeType3(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_validity(self):
+        return self.validity
+    def set_validity(self, validity):
+        self.validity = validity
+    def add_validity(self, value):
+        self.validity.append(value)
+    def insert_validity_at(self, index, value):
+        self.validity.insert(index, value)
+    def replace_validity_at(self, index, value):
+        self.validity[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def validate_bridgeType(self, value):
+        # Validate type bridgeType, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['concrete', 'steel', 'brick', 'wood']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on bridgeType' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.validity or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='bridgeType3', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('bridgeType3')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'bridgeType3':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='bridgeType3')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='bridgeType3', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='bridgeType3'):
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.length is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='bridgeType3', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for validity_ in self.validity:
+            namespaceprefix_ = self.validity_nsprefix_ + ':' if (UseCapturedNS_ and self.validity_nsprefix_) else ''
+            validity_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='validity', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            value = self.gds_parse_double(value, node, 'length')
+            self.length = value
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = 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
+            self.validate_bridgeType(self.type_)    # validate type bridgeType
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'validity':
+            obj_ = laneValidity.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.validity.append(obj_)
+            obj_.original_tagname_ = 'validity'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class bridgeType3
+
+
+class signalsType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, signal=None, signalReference=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if signal is None:
+            self.signal = []
+        else:
+            self.signal = signal
+        self.signal_nsprefix_ = None
+        if signalReference is None:
+            self.signalReference = []
+        else:
+            self.signalReference = signalReference
+        self.signalReference_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, signalsType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if signalsType.subclass:
+            return signalsType.subclass(*args_, **kwargs_)
+        else:
+            return signalsType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_signal(self):
+        return self.signal
+    def set_signal(self, signal):
+        self.signal = signal
+    def add_signal(self, value):
+        self.signal.append(value)
+    def insert_signal_at(self, index, value):
+        self.signal.insert(index, value)
+    def replace_signal_at(self, index, value):
+        self.signal[index] = value
+    def get_signalReference(self):
+        return self.signalReference
+    def set_signalReference(self, signalReference):
+        self.signalReference = signalReference
+    def add_signalReference(self, value):
+        self.signalReference.append(value)
+    def insert_signalReference_at(self, index, value):
+        self.signalReference.insert(index, value)
+    def replace_signalReference_at(self, index, value):
+        self.signalReference[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def _hasContent(self):
+        if (
+            self.signal or
+            self.signalReference or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='signalsType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('signalsType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'signalsType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='signalsType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='signalsType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='signalsType'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='signalsType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for signal_ in self.signal:
+            namespaceprefix_ = self.signal_nsprefix_ + ':' if (UseCapturedNS_ and self.signal_nsprefix_) else ''
+            signal_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='signal', pretty_print=pretty_print)
+        for signalReference_ in self.signalReference:
+            namespaceprefix_ = self.signalReference_nsprefix_ + ':' if (UseCapturedNS_ and self.signalReference_nsprefix_) else ''
+            signalReference_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='signalReference', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'signal':
+            obj_ = signalType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.signal.append(obj_)
+            obj_.original_tagname_ = 'signal'
+        elif nodeName_ == 'signalReference':
+            obj_ = signalReferenceType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.signalReference.append(obj_)
+            obj_.original_tagname_ = 'signalReference'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class signalsType
+
+
+class signalType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, t=None, id=None, name=None, dynamic=None, orientation=None, zOffset=None, country=None, type_=None, subtype=None, value=None, unit=None, height=None, width=None, text=None, hOffset=None, pitch=None, roll=None, validity=None, dependency=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.t = _cast(float, t)
+        self.t_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.dynamic = _cast(None, dynamic)
+        self.dynamic_nsprefix_ = None
+        self.orientation = _cast(None, orientation)
+        self.orientation_nsprefix_ = None
+        self.zOffset = _cast(float, zOffset)
+        self.zOffset_nsprefix_ = None
+        self.country = _cast(None, country)
+        self.country_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.subtype = _cast(None, subtype)
+        self.subtype_nsprefix_ = None
+        self.value = _cast(float, value)
+        self.value_nsprefix_ = None
+        self.unit = _cast(None, unit)
+        self.unit_nsprefix_ = None
+        self.height = _cast(float, height)
+        self.height_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        self.text = _cast(None, text)
+        self.text_nsprefix_ = None
+        self.hOffset = _cast(float, hOffset)
+        self.hOffset_nsprefix_ = None
+        self.pitch = _cast(float, pitch)
+        self.pitch_nsprefix_ = None
+        self.roll = _cast(float, roll)
+        self.roll_nsprefix_ = None
+        if validity is None:
+            self.validity = []
+        else:
+            self.validity = validity
+        self.validity_nsprefix_ = None
+        if dependency is None:
+            self.dependency = []
+        else:
+            self.dependency = dependency
+        self.dependency_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, signalType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if signalType.subclass:
+            return signalType.subclass(*args_, **kwargs_)
+        else:
+            return signalType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_validity(self):
+        return self.validity
+    def set_validity(self, validity):
+        self.validity = validity
+    def add_validity(self, value):
+        self.validity.append(value)
+    def insert_validity_at(self, index, value):
+        self.validity.insert(index, value)
+    def replace_validity_at(self, index, value):
+        self.validity[index] = value
+    def get_dependency(self):
+        return self.dependency
+    def set_dependency(self, dependency):
+        self.dependency = dependency
+    def add_dependency(self, value):
+        self.dependency.append(value)
+    def insert_dependency_at(self, index, value):
+        self.dependency.insert(index, value)
+    def replace_dependency_at(self, index, value):
+        self.dependency[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_t(self):
+        return self.t
+    def set_t(self, t):
+        self.t = t
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_dynamic(self):
+        return self.dynamic
+    def set_dynamic(self, dynamic):
+        self.dynamic = dynamic
+    def get_orientation(self):
+        return self.orientation
+    def set_orientation(self, orientation):
+        self.orientation = orientation
+    def get_zOffset(self):
+        return self.zOffset
+    def set_zOffset(self, zOffset):
+        self.zOffset = zOffset
+    def get_country(self):
+        return self.country
+    def set_country(self, country):
+        self.country = country
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_subtype(self):
+        return self.subtype
+    def set_subtype(self, subtype):
+        self.subtype = subtype
+    def get_value(self):
+        return self.value
+    def set_value(self, value):
+        self.value = value
+    def get_unit(self):
+        return self.unit
+    def set_unit(self, unit):
+        self.unit = unit
+    def get_height(self):
+        return self.height
+    def set_height(self, height):
+        self.height = height
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def get_text(self):
+        return self.text
+    def set_text(self, text):
+        self.text = text
+    def get_hOffset(self):
+        return self.hOffset
+    def set_hOffset(self, hOffset):
+        self.hOffset = hOffset
+    def get_pitch(self):
+        return self.pitch
+    def set_pitch(self, pitch):
+        self.pitch = pitch
+    def get_roll(self):
+        return self.roll
+    def set_roll(self, roll):
+        self.roll = roll
+    def validate_dynamic(self, value):
+        # Validate type dynamic, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['yes', 'no']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on dynamic' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_orientation(self, value):
+        # Validate type orientation, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['+', '-', 'none']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on orientation' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_unit(self, value):
+        # Validate type unit, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['m', 'km', 'ft', 'mile', 'm/s', 'mph', 'km/h', 'kg', 't', '%']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on unit' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.validity or
+            self.dependency or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='signalType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('signalType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'signalType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='signalType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='signalType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='signalType'):
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.t is not None and 't' not in already_processed:
+            already_processed.add('t')
+            outfile.write(' t="%s"' % self.gds_format_double(self.t, input_name='t'))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.dynamic is not None and 'dynamic' not in already_processed:
+            already_processed.add('dynamic')
+            outfile.write(' dynamic=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.dynamic), input_name='dynamic')), ))
+        if self.orientation is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            outfile.write(' orientation=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.orientation), input_name='orientation')), ))
+        if self.zOffset is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            outfile.write(' zOffset="%s"' % self.gds_format_double(self.zOffset, input_name='zOffset'))
+        if self.country is not None and 'country' not in already_processed:
+            already_processed.add('country')
+            outfile.write(' country=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.country), input_name='country')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+        if self.subtype is not None and 'subtype' not in already_processed:
+            already_processed.add('subtype')
+            outfile.write(' subtype=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.subtype), input_name='subtype')), ))
+        if self.value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            outfile.write(' value="%s"' % self.gds_format_double(self.value, input_name='value'))
+        if self.unit is not None and 'unit' not in already_processed:
+            already_processed.add('unit')
+            outfile.write(' unit=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.unit), input_name='unit')), ))
+        if self.height is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            outfile.write(' height="%s"' % self.gds_format_double(self.height, input_name='height'))
+        if self.width is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+        if self.text is not None and 'text' not in already_processed:
+            already_processed.add('text')
+            outfile.write(' text=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.text), input_name='text')), ))
+        if self.hOffset is not None and 'hOffset' not in already_processed:
+            already_processed.add('hOffset')
+            outfile.write(' hOffset="%s"' % self.gds_format_double(self.hOffset, input_name='hOffset'))
+        if self.pitch is not None and 'pitch' not in already_processed:
+            already_processed.add('pitch')
+            outfile.write(' pitch="%s"' % self.gds_format_double(self.pitch, input_name='pitch'))
+        if self.roll is not None and 'roll' not in already_processed:
+            already_processed.add('roll')
+            outfile.write(' roll="%s"' % self.gds_format_double(self.roll, input_name='roll'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='signalType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for validity_ in self.validity:
+            namespaceprefix_ = self.validity_nsprefix_ + ':' if (UseCapturedNS_ and self.validity_nsprefix_) else ''
+            validity_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='validity', pretty_print=pretty_print)
+        for dependency_ in self.dependency:
+            namespaceprefix_ = self.dependency_nsprefix_ + ':' if (UseCapturedNS_ and self.dependency_nsprefix_) else ''
+            dependency_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dependency', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('t', node)
+        if value is not None and 't' not in already_processed:
+            already_processed.add('t')
+            value = self.gds_parse_double(value, node, 't')
+            self.t = 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
+        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_('dynamic', node)
+        if value is not None and 'dynamic' not in already_processed:
+            already_processed.add('dynamic')
+            self.dynamic = value
+            self.validate_dynamic(self.dynamic)    # validate type dynamic
+        value = find_attr_value_('orientation', node)
+        if value is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            self.orientation = value
+            self.validate_orientation(self.orientation)    # validate type orientation
+        value = find_attr_value_('zOffset', node)
+        if value is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            value = self.gds_parse_double(value, node, 'zOffset')
+            self.zOffset = value
+        value = find_attr_value_('country', node)
+        if value is not None and 'country' not in already_processed:
+            already_processed.add('country')
+            self.country = 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_('subtype', node)
+        if value is not None and 'subtype' not in already_processed:
+            already_processed.add('subtype')
+            self.subtype = value
+        value = find_attr_value_('value', node)
+        if value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            value = self.gds_parse_double(value, node, 'value')
+            self.value = value
+        value = find_attr_value_('unit', node)
+        if value is not None and 'unit' not in already_processed:
+            already_processed.add('unit')
+            self.unit = value
+            self.validate_unit(self.unit)    # validate type unit
+        value = find_attr_value_('height', node)
+        if value is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            value = self.gds_parse_double(value, node, 'height')
+            self.height = value
+        value = find_attr_value_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            value = self.gds_parse_double(value, node, 'width')
+            self.width = value
+        value = find_attr_value_('text', node)
+        if value is not None and 'text' not in already_processed:
+            already_processed.add('text')
+            self.text = value
+        value = find_attr_value_('hOffset', node)
+        if value is not None and 'hOffset' not in already_processed:
+            already_processed.add('hOffset')
+            value = self.gds_parse_double(value, node, 'hOffset')
+            self.hOffset = value
+        value = find_attr_value_('pitch', node)
+        if value is not None and 'pitch' not in already_processed:
+            already_processed.add('pitch')
+            value = self.gds_parse_double(value, node, 'pitch')
+            self.pitch = value
+        value = find_attr_value_('roll', node)
+        if value is not None and 'roll' not in already_processed:
+            already_processed.add('roll')
+            value = self.gds_parse_double(value, node, 'roll')
+            self.roll = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'validity':
+            obj_ = laneValidity.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.validity.append(obj_)
+            obj_.original_tagname_ = 'validity'
+        elif nodeName_ == 'dependency':
+            obj_ = dependencyType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.dependency.append(obj_)
+            obj_.original_tagname_ = 'dependency'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class signalType
+
+
+class dependencyType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, type_=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, dependencyType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if dependencyType.subclass:
+            return dependencyType.subclass(*args_, **kwargs_)
+        else:
+            return dependencyType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='dependencyType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('dependencyType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'dependencyType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='dependencyType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='dependencyType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='dependencyType'):
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='dependencyType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = 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
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class dependencyType
+
+
+class signalReferenceType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, t=None, id=None, orientation=None, validity=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.t = _cast(float, t)
+        self.t_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.orientation = _cast(None, orientation)
+        self.orientation_nsprefix_ = None
+        if validity is None:
+            self.validity = []
+        else:
+            self.validity = validity
+        self.validity_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, signalReferenceType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if signalReferenceType.subclass:
+            return signalReferenceType.subclass(*args_, **kwargs_)
+        else:
+            return signalReferenceType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_validity(self):
+        return self.validity
+    def set_validity(self, validity):
+        self.validity = validity
+    def add_validity(self, value):
+        self.validity.append(value)
+    def insert_validity_at(self, index, value):
+        self.validity.insert(index, value)
+    def replace_validity_at(self, index, value):
+        self.validity[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_t(self):
+        return self.t
+    def set_t(self, t):
+        self.t = t
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_orientation(self):
+        return self.orientation
+    def set_orientation(self, orientation):
+        self.orientation = orientation
+    def validate_orientation(self, value):
+        # Validate type orientation, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['+', '-', 'none']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on orientation' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.validity or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='signalReferenceType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('signalReferenceType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'signalReferenceType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='signalReferenceType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='signalReferenceType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='signalReferenceType'):
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.t is not None and 't' not in already_processed:
+            already_processed.add('t')
+            outfile.write(' t="%s"' % self.gds_format_double(self.t, input_name='t'))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.orientation is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            outfile.write(' orientation=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.orientation), input_name='orientation')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='signalReferenceType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for validity_ in self.validity:
+            namespaceprefix_ = self.validity_nsprefix_ + ':' if (UseCapturedNS_ and self.validity_nsprefix_) else ''
+            validity_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='validity', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('t', node)
+        if value is not None and 't' not in already_processed:
+            already_processed.add('t')
+            value = self.gds_parse_double(value, node, 't')
+            self.t = 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
+        value = find_attr_value_('orientation', node)
+        if value is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            self.orientation = value
+            self.validate_orientation(self.orientation)    # validate type orientation
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'validity':
+            obj_ = laneValidity.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.validity.append(obj_)
+            obj_.original_tagname_ = 'validity'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class signalReferenceType
+
+
+class surfaceType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, CRG=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if CRG is None:
+            self.CRG = []
+        else:
+            self.CRG = CRG
+        self.CRG_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, surfaceType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if surfaceType.subclass:
+            return surfaceType.subclass(*args_, **kwargs_)
+        else:
+            return surfaceType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_CRG(self):
+        return self.CRG
+    def set_CRG(self, CRG):
+        self.CRG = CRG
+    def add_CRG(self, value):
+        self.CRG.append(value)
+    def insert_CRG_at(self, index, value):
+        self.CRG.insert(index, value)
+    def replace_CRG_at(self, index, value):
+        self.CRG[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def _hasContent(self):
+        if (
+            self.CRG or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='surfaceType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('surfaceType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'surfaceType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='surfaceType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='surfaceType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='surfaceType'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='surfaceType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for CRG_ in self.CRG:
+            namespaceprefix_ = self.CRG_nsprefix_ + ':' if (UseCapturedNS_ and self.CRG_nsprefix_) else ''
+            CRG_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='CRG', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'CRG':
+            obj_ = CRGType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.CRG.append(obj_)
+            obj_.original_tagname_ = 'CRG'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class surfaceType
+
+
+class CRGType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, file=None, sStart=None, sEnd=None, orientation=None, mode=None, purpose=None, sOffset=None, tOffset=None, zOffset=None, zScale=None, hOffset=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.file = _cast(None, file)
+        self.file_nsprefix_ = None
+        self.sStart = _cast(float, sStart)
+        self.sStart_nsprefix_ = None
+        self.sEnd = _cast(float, sEnd)
+        self.sEnd_nsprefix_ = None
+        self.orientation = _cast(None, orientation)
+        self.orientation_nsprefix_ = None
+        self.mode = _cast(None, mode)
+        self.mode_nsprefix_ = None
+        self.purpose = _cast(None, purpose)
+        self.purpose_nsprefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.tOffset = _cast(float, tOffset)
+        self.tOffset_nsprefix_ = None
+        self.zOffset = _cast(float, zOffset)
+        self.zOffset_nsprefix_ = None
+        self.zScale = _cast(float, zScale)
+        self.zScale_nsprefix_ = None
+        self.hOffset = _cast(float, hOffset)
+        self.hOffset_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, CRGType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if CRGType.subclass:
+            return CRGType.subclass(*args_, **kwargs_)
+        else:
+            return CRGType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_file(self):
+        return self.file
+    def set_file(self, file):
+        self.file = file
+    def get_sStart(self):
+        return self.sStart
+    def set_sStart(self, sStart):
+        self.sStart = sStart
+    def get_sEnd(self):
+        return self.sEnd
+    def set_sEnd(self, sEnd):
+        self.sEnd = sEnd
+    def get_orientation(self):
+        return self.orientation
+    def set_orientation(self, orientation):
+        self.orientation = orientation
+    def get_mode(self):
+        return self.mode
+    def set_mode(self, mode):
+        self.mode = mode
+    def get_purpose(self):
+        return self.purpose
+    def set_purpose(self, purpose):
+        self.purpose = purpose
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_tOffset(self):
+        return self.tOffset
+    def set_tOffset(self, tOffset):
+        self.tOffset = tOffset
+    def get_zOffset(self):
+        return self.zOffset
+    def set_zOffset(self, zOffset):
+        self.zOffset = zOffset
+    def get_zScale(self):
+        return self.zScale
+    def set_zScale(self, zScale):
+        self.zScale = zScale
+    def get_hOffset(self):
+        return self.hOffset
+    def set_hOffset(self, hOffset):
+        self.hOffset = hOffset
+    def validate_surfaceOrientation(self, value):
+        # Validate type surfaceOrientation, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['same', 'opposite']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on surfaceOrientation' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_mode(self, value):
+        # Validate type mode, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['attached', 'attached0', 'genuine']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on mode' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_purpose(self, value):
+        # Validate type purpose, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['elevation', 'friction']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on purpose' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='CRGType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('CRGType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'CRGType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='CRGType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='CRGType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='CRGType'):
+        if self.file is not None and 'file' not in already_processed:
+            already_processed.add('file')
+            outfile.write(' file=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.file), input_name='file')), ))
+        if self.sStart is not None and 'sStart' not in already_processed:
+            already_processed.add('sStart')
+            outfile.write(' sStart="%s"' % self.gds_format_double(self.sStart, input_name='sStart'))
+        if self.sEnd is not None and 'sEnd' not in already_processed:
+            already_processed.add('sEnd')
+            outfile.write(' sEnd="%s"' % self.gds_format_double(self.sEnd, input_name='sEnd'))
+        if self.orientation is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            outfile.write(' orientation=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.orientation), input_name='orientation')), ))
+        if self.mode is not None and 'mode' not in already_processed:
+            already_processed.add('mode')
+            outfile.write(' mode=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.mode), input_name='mode')), ))
+        if self.purpose is not None and 'purpose' not in already_processed:
+            already_processed.add('purpose')
+            outfile.write(' purpose=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.purpose), input_name='purpose')), ))
+        if self.sOffset is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.tOffset is not None and 'tOffset' not in already_processed:
+            already_processed.add('tOffset')
+            outfile.write(' tOffset="%s"' % self.gds_format_double(self.tOffset, input_name='tOffset'))
+        if self.zOffset is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            outfile.write(' zOffset="%s"' % self.gds_format_double(self.zOffset, input_name='zOffset'))
+        if self.zScale is not None and 'zScale' not in already_processed:
+            already_processed.add('zScale')
+            outfile.write(' zScale="%s"' % self.gds_format_double(self.zScale, input_name='zScale'))
+        if self.hOffset is not None and 'hOffset' not in already_processed:
+            already_processed.add('hOffset')
+            outfile.write(' hOffset="%s"' % self.gds_format_double(self.hOffset, input_name='hOffset'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='CRGType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('file', node)
+        if value is not None and 'file' not in already_processed:
+            already_processed.add('file')
+            self.file = value
+        value = find_attr_value_('sStart', node)
+        if value is not None and 'sStart' not in already_processed:
+            already_processed.add('sStart')
+            value = self.gds_parse_double(value, node, 'sStart')
+            self.sStart = value
+        value = find_attr_value_('sEnd', node)
+        if value is not None and 'sEnd' not in already_processed:
+            already_processed.add('sEnd')
+            value = self.gds_parse_double(value, node, 'sEnd')
+            self.sEnd = value
+        value = find_attr_value_('orientation', node)
+        if value is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            self.orientation = value
+            self.validate_surfaceOrientation(self.orientation)    # validate type surfaceOrientation
+        value = find_attr_value_('mode', node)
+        if value is not None and 'mode' not in already_processed:
+            already_processed.add('mode')
+            self.mode = value
+            self.validate_mode(self.mode)    # validate type mode
+        value = find_attr_value_('purpose', node)
+        if value is not None and 'purpose' not in already_processed:
+            already_processed.add('purpose')
+            self.purpose = value
+            self.validate_purpose(self.purpose)    # validate type purpose
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            value = self.gds_parse_double(value, node, 'sOffset')
+            self.sOffset = value
+        value = find_attr_value_('tOffset', node)
+        if value is not None and 'tOffset' not in already_processed:
+            already_processed.add('tOffset')
+            value = self.gds_parse_double(value, node, 'tOffset')
+            self.tOffset = value
+        value = find_attr_value_('zOffset', node)
+        if value is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            value = self.gds_parse_double(value, node, 'zOffset')
+            self.zOffset = value
+        value = find_attr_value_('zScale', node)
+        if value is not None and 'zScale' not in already_processed:
+            already_processed.add('zScale')
+            value = self.gds_parse_double(value, node, 'zScale')
+            self.zScale = value
+        value = find_attr_value_('hOffset', node)
+        if value is not None and 'hOffset' not in already_processed:
+            already_processed.add('hOffset')
+            value = self.gds_parse_double(value, node, 'hOffset')
+            self.hOffset = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class CRGType
+
+
+class railroadType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, switch=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if switch is None:
+            self.switch = []
+        else:
+            self.switch = switch
+        self.switch_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, railroadType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if railroadType.subclass:
+            return railroadType.subclass(*args_, **kwargs_)
+        else:
+            return railroadType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_switch(self):
+        return self.switch
+    def set_switch(self, switch):
+        self.switch = switch
+    def add_switch(self, value):
+        self.switch.append(value)
+    def insert_switch_at(self, index, value):
+        self.switch.insert(index, value)
+    def replace_switch_at(self, index, value):
+        self.switch[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def _hasContent(self):
+        if (
+            self.switch or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='railroadType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('railroadType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'railroadType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='railroadType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='railroadType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='railroadType'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='railroadType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for switch_ in self.switch:
+            namespaceprefix_ = self.switch_nsprefix_ + ':' if (UseCapturedNS_ and self.switch_nsprefix_) else ''
+            switch_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='switch', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'switch':
+            obj_ = switchType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.switch.append(obj_)
+            obj_.original_tagname_ = 'switch'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class railroadType
+
+
+class switchType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, id=None, position=None, mainTrack=None, sideTrack=None, partner=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.position = _cast(None, position)
+        self.position_nsprefix_ = None
+        self.mainTrack = mainTrack
+        self.mainTrack_nsprefix_ = None
+        self.sideTrack = sideTrack
+        self.sideTrack_nsprefix_ = None
+        self.partner = partner
+        self.partner_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, switchType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if switchType.subclass:
+            return switchType.subclass(*args_, **kwargs_)
+        else:
+            return switchType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_mainTrack(self):
+        return self.mainTrack
+    def set_mainTrack(self, mainTrack):
+        self.mainTrack = mainTrack
+    def get_sideTrack(self):
+        return self.sideTrack
+    def set_sideTrack(self, sideTrack):
+        self.sideTrack = sideTrack
+    def get_partner(self):
+        return self.partner
+    def set_partner(self, partner):
+        self.partner = partner
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_position(self):
+        return self.position
+    def set_position(self, position):
+        self.position = position
+    def validate_position(self, value):
+        # Validate type position, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['dynamic', 'straight', 'turn']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on position' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.mainTrack is not None or
+            self.sideTrack is not None or
+            self.partner is not None or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='switchType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('switchType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'switchType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='switchType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='switchType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='switchType'):
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.position is not None and 'position' not in already_processed:
+            already_processed.add('position')
+            outfile.write(' position=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.position), input_name='position')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='switchType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.mainTrack is not None:
+            namespaceprefix_ = self.mainTrack_nsprefix_ + ':' if (UseCapturedNS_ and self.mainTrack_nsprefix_) else ''
+            self.mainTrack.export(outfile, level, namespaceprefix_, namespacedef_='', name_='mainTrack', pretty_print=pretty_print)
+        if self.sideTrack is not None:
+            namespaceprefix_ = self.sideTrack_nsprefix_ + ':' if (UseCapturedNS_ and self.sideTrack_nsprefix_) else ''
+            self.sideTrack.export(outfile, level, namespaceprefix_, namespacedef_='', name_='sideTrack', pretty_print=pretty_print)
+        if self.partner is not None:
+            namespaceprefix_ = self.partner_nsprefix_ + ':' if (UseCapturedNS_ and self.partner_nsprefix_) else ''
+            self.partner.export(outfile, level, namespaceprefix_, namespacedef_='', name_='partner', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+        value = find_attr_value_('position', node)
+        if value is not None and 'position' not in already_processed:
+            already_processed.add('position')
+            self.position = value
+            self.validate_position(self.position)    # validate type position
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'mainTrack':
+            obj_ = mainTrackType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.mainTrack = obj_
+            obj_.original_tagname_ = 'mainTrack'
+        elif nodeName_ == 'sideTrack':
+            obj_ = sideTrackType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.sideTrack = obj_
+            obj_.original_tagname_ = 'sideTrack'
+        elif nodeName_ == 'partner':
+            obj_ = partnerType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.partner = obj_
+            obj_.original_tagname_ = 'partner'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class switchType
+
+
+class mainTrackType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, s=None, dir=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.dir = _cast(None, dir)
+        self.dir_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, mainTrackType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if mainTrackType.subclass:
+            return mainTrackType.subclass(*args_, **kwargs_)
+        else:
+            return mainTrackType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_dir(self):
+        return self.dir
+    def set_dir(self, dir):
+        self.dir = dir
+    def validate_dir(self, value):
+        # Validate type dir, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['+', '-']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on dir' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='mainTrackType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('mainTrackType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'mainTrackType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='mainTrackType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='mainTrackType', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='mainTrackType'):
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.dir is not None and 'dir' not in already_processed:
+            already_processed.add('dir')
+            outfile.write(' dir=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.dir), input_name='dir')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='mainTrackType', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('dir', node)
+        if value is not None and 'dir' not in already_processed:
+            already_processed.add('dir')
+            self.dir = value
+            self.validate_dir(self.dir)    # validate type dir
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class mainTrackType
+
+
+class sideTrackType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, s=None, dir=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.dir = _cast(None, dir)
+        self.dir_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, sideTrackType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if sideTrackType.subclass:
+            return sideTrackType.subclass(*args_, **kwargs_)
+        else:
+            return sideTrackType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_dir(self):
+        return self.dir
+    def set_dir(self, dir):
+        self.dir = dir
+    def validate_dir(self, value):
+        # Validate type dir, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['+', '-']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on dir' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='sideTrackType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('sideTrackType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'sideTrackType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='sideTrackType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='sideTrackType', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='sideTrackType'):
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.s is not None and 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.dir is not None and 'dir' not in already_processed:
+            already_processed.add('dir')
+            outfile.write(' dir=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.dir), input_name='dir')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='sideTrackType', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            value = self.gds_parse_double(value, node, 's')
+            self.s = value
+        value = find_attr_value_('dir', node)
+        if value is not None and 'dir' not in already_processed:
+            already_processed.add('dir')
+            self.dir = value
+            self.validate_dir(self.dir)    # validate type dir
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class sideTrackType
+
+
+class partnerType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, id=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, partnerType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if partnerType.subclass:
+            return partnerType.subclass(*args_, **kwargs_)
+        else:
+            return partnerType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='partnerType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('partnerType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'partnerType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='partnerType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='partnerType', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='partnerType'):
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='partnerType', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        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_('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, gds_collector_=None):
+        pass
+# end class partnerType
+
+
+class controllerType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, name=None, sequence=None, control=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.sequence = _cast(int, sequence)
+        self.sequence_nsprefix_ = None
+        if control is None:
+            self.control = []
+        else:
+            self.control = control
+        self.control_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, controllerType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if controllerType.subclass:
+            return controllerType.subclass(*args_, **kwargs_)
+        else:
+            return controllerType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_control(self):
+        return self.control
+    def set_control(self, control):
+        self.control = control
+    def add_control(self, value):
+        self.control.append(value)
+    def insert_control_at(self, index, value):
+        self.control.insert(index, value)
+    def replace_control_at(self, index, value):
+        self.control[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_sequence(self):
+        return self.sequence
+    def set_sequence(self, sequence):
+        self.sequence = sequence
+    def _hasContent(self):
+        if (
+            self.control or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='controllerType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('controllerType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'controllerType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='controllerType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='controllerType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='controllerType'):
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.sequence is not None and 'sequence' not in already_processed:
+            already_processed.add('sequence')
+            outfile.write(' sequence="%s"' % self.gds_format_integer(self.sequence, input_name='sequence'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='controllerType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for control_ in self.control:
+            namespaceprefix_ = self.control_nsprefix_ + ':' if (UseCapturedNS_ and self.control_nsprefix_) else ''
+            control_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='control', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+        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_('sequence', node)
+        if value is not None and 'sequence' not in already_processed:
+            already_processed.add('sequence')
+            self.sequence = self.gds_parse_integer(value, node, 'sequence')
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'control':
+            obj_ = controlType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.control.append(obj_)
+            obj_.original_tagname_ = 'control'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class controllerType
+
+
+class controlType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, signalId=None, type_=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.signalId = _cast(None, signalId)
+        self.signalId_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, controlType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if controlType.subclass:
+            return controlType.subclass(*args_, **kwargs_)
+        else:
+            return controlType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_signalId(self):
+        return self.signalId
+    def set_signalId(self, signalId):
+        self.signalId = signalId
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='controlType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('controlType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'controlType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='controlType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='controlType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='controlType'):
+        if self.signalId is not None and 'signalId' not in already_processed:
+            already_processed.add('signalId')
+            outfile.write(' signalId=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.signalId), input_name='signalId')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='controlType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('signalId', node)
+        if value is not None and 'signalId' not in already_processed:
+            already_processed.add('signalId')
+            self.signalId = 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
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class controlType
+
+
+class junctionType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, id=None, connection=None, priority=None, controller=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        if connection is None:
+            self.connection = []
+        else:
+            self.connection = connection
+        self.connection_nsprefix_ = None
+        if priority is None:
+            self.priority = []
+        else:
+            self.priority = priority
+        self.priority_nsprefix_ = None
+        if controller is None:
+            self.controller = []
+        else:
+            self.controller = controller
+        self.controller_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, junctionType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if junctionType.subclass:
+            return junctionType.subclass(*args_, **kwargs_)
+        else:
+            return junctionType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_connection(self):
+        return self.connection
+    def set_connection(self, connection):
+        self.connection = connection
+    def add_connection(self, value):
+        self.connection.append(value)
+    def insert_connection_at(self, index, value):
+        self.connection.insert(index, value)
+    def replace_connection_at(self, index, value):
+        self.connection[index] = value
+    def get_priority(self):
+        return self.priority
+    def set_priority(self, priority):
+        self.priority = priority
+    def add_priority(self, value):
+        self.priority.append(value)
+    def insert_priority_at(self, index, value):
+        self.priority.insert(index, value)
+    def replace_priority_at(self, index, value):
+        self.priority[index] = value
+    def get_controller(self):
+        return self.controller
+    def set_controller(self, controller):
+        self.controller = controller
+    def add_controller(self, value):
+        self.controller.append(value)
+    def insert_controller_at(self, index, value):
+        self.controller.insert(index, value)
+    def replace_controller_at(self, index, value):
+        self.controller[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def _hasContent(self):
+        if (
+            self.connection or
+            self.priority or
+            self.controller or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='junctionType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('junctionType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'junctionType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='junctionType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='junctionType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='junctionType'):
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='junctionType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for connection_ in self.connection:
+            namespaceprefix_ = self.connection_nsprefix_ + ':' if (UseCapturedNS_ and self.connection_nsprefix_) else ''
+            connection_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='connection', pretty_print=pretty_print)
+        for priority_ in self.priority:
+            namespaceprefix_ = self.priority_nsprefix_ + ':' if (UseCapturedNS_ and self.priority_nsprefix_) else ''
+            priority_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='priority', pretty_print=pretty_print)
+        for controller_ in self.controller:
+            namespaceprefix_ = self.controller_nsprefix_ + ':' if (UseCapturedNS_ and self.controller_nsprefix_) else ''
+            controller_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='controller', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        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_('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, gds_collector_=None):
+        if nodeName_ == 'connection':
+            obj_ = connectionType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.connection.append(obj_)
+            obj_.original_tagname_ = 'connection'
+        elif nodeName_ == 'priority':
+            obj_ = priorityType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.priority.append(obj_)
+            obj_.original_tagname_ = 'priority'
+        elif nodeName_ == 'controller':
+            obj_ = controllerType4.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.controller.append(obj_)
+            obj_.original_tagname_ = 'controller'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class junctionType
+
+
+class connectionType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, incomingRoad=None, connectingRoad=None, contactPoint=None, laneLink=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.incomingRoad = _cast(None, incomingRoad)
+        self.incomingRoad_nsprefix_ = None
+        self.connectingRoad = _cast(None, connectingRoad)
+        self.connectingRoad_nsprefix_ = None
+        self.contactPoint = _cast(None, contactPoint)
+        self.contactPoint_nsprefix_ = None
+        if laneLink is None:
+            self.laneLink = []
+        else:
+            self.laneLink = laneLink
+        self.laneLink_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, connectionType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if connectionType.subclass:
+            return connectionType.subclass(*args_, **kwargs_)
+        else:
+            return connectionType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_laneLink(self):
+        return self.laneLink
+    def set_laneLink(self, laneLink):
+        self.laneLink = laneLink
+    def add_laneLink(self, value):
+        self.laneLink.append(value)
+    def insert_laneLink_at(self, index, value):
+        self.laneLink.insert(index, value)
+    def replace_laneLink_at(self, index, value):
+        self.laneLink[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_incomingRoad(self):
+        return self.incomingRoad
+    def set_incomingRoad(self, incomingRoad):
+        self.incomingRoad = incomingRoad
+    def get_connectingRoad(self):
+        return self.connectingRoad
+    def set_connectingRoad(self, connectingRoad):
+        self.connectingRoad = connectingRoad
+    def get_contactPoint(self):
+        return self.contactPoint
+    def set_contactPoint(self, contactPoint):
+        self.contactPoint = contactPoint
+    def validate_contactPoint(self, value):
+        # Validate type contactPoint, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['start', 'end']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on contactPoint' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.laneLink or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='connectionType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('connectionType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'connectionType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='connectionType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='connectionType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='connectionType'):
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.incomingRoad is not None and 'incomingRoad' not in already_processed:
+            already_processed.add('incomingRoad')
+            outfile.write(' incomingRoad=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.incomingRoad), input_name='incomingRoad')), ))
+        if self.connectingRoad is not None and 'connectingRoad' not in already_processed:
+            already_processed.add('connectingRoad')
+            outfile.write(' connectingRoad=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.connectingRoad), input_name='connectingRoad')), ))
+        if self.contactPoint is not None and 'contactPoint' not in already_processed:
+            already_processed.add('contactPoint')
+            outfile.write(' contactPoint=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.contactPoint), input_name='contactPoint')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='connectionType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for laneLink_ in self.laneLink:
+            namespaceprefix_ = self.laneLink_nsprefix_ + ':' if (UseCapturedNS_ and self.laneLink_nsprefix_) else ''
+            laneLink_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='laneLink', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+        value = find_attr_value_('incomingRoad', node)
+        if value is not None and 'incomingRoad' not in already_processed:
+            already_processed.add('incomingRoad')
+            self.incomingRoad = value
+        value = find_attr_value_('connectingRoad', node)
+        if value is not None and 'connectingRoad' not in already_processed:
+            already_processed.add('connectingRoad')
+            self.connectingRoad = value
+        value = find_attr_value_('contactPoint', node)
+        if value is not None and 'contactPoint' not in already_processed:
+            already_processed.add('contactPoint')
+            self.contactPoint = value
+            self.validate_contactPoint(self.contactPoint)    # validate type contactPoint
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'laneLink':
+            obj_ = laneLinkType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.laneLink.append(obj_)
+            obj_.original_tagname_ = 'laneLink'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class connectionType
+
+
+class laneLinkType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, from_=None, to=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.from_ = _cast(int, from_)
+        self.from__nsprefix_ = None
+        self.to = _cast(int, to)
+        self.to_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, laneLinkType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if laneLinkType.subclass:
+            return laneLinkType.subclass(*args_, **kwargs_)
+        else:
+            return laneLinkType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_from(self):
+        return self.from_
+    def set_from(self, from_):
+        self.from_ = from_
+    def get_to(self):
+        return self.to
+    def set_to(self, to):
+        self.to = to
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='laneLinkType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('laneLinkType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'laneLinkType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='laneLinkType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='laneLinkType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='laneLinkType'):
+        if self.from_ is not None and 'from_' not in already_processed:
+            already_processed.add('from_')
+            outfile.write(' from="%s"' % self.gds_format_integer(self.from_, input_name='from'))
+        if self.to is not None and 'to' not in already_processed:
+            already_processed.add('to')
+            outfile.write(' to="%s"' % self.gds_format_integer(self.to, input_name='to'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='laneLinkType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('from', node)
+        if value is not None and 'from' not in already_processed:
+            already_processed.add('from')
+            self.from_ = self.gds_parse_integer(value, node, 'from')
+        value = find_attr_value_('to', node)
+        if value is not None and 'to' not in already_processed:
+            already_processed.add('to')
+            self.to = self.gds_parse_integer(value, node, 'to')
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class laneLinkType
+
+
+class priorityType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, high=None, low=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.high = _cast(None, high)
+        self.high_nsprefix_ = None
+        self.low = _cast(None, low)
+        self.low_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, priorityType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if priorityType.subclass:
+            return priorityType.subclass(*args_, **kwargs_)
+        else:
+            return priorityType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_high(self):
+        return self.high
+    def set_high(self, high):
+        self.high = high
+    def get_low(self):
+        return self.low
+    def set_low(self, low):
+        self.low = low
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='priorityType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('priorityType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'priorityType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='priorityType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='priorityType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='priorityType'):
+        if self.high is not None and 'high' not in already_processed:
+            already_processed.add('high')
+            outfile.write(' high=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.high), input_name='high')), ))
+        if self.low is not None and 'low' not in already_processed:
+            already_processed.add('low')
+            outfile.write(' low=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.low), input_name='low')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='priorityType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('high', node)
+        if value is not None and 'high' not in already_processed:
+            already_processed.add('high')
+            self.high = value
+        value = find_attr_value_('low', node)
+        if value is not None and 'low' not in already_processed:
+            already_processed.add('low')
+            self.low = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class priorityType
+
+
+class controllerType4(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, type_=None, sequence=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.sequence = _cast(int, sequence)
+        self.sequence_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, controllerType4)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if controllerType4.subclass:
+            return controllerType4.subclass(*args_, **kwargs_)
+        else:
+            return controllerType4(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_sequence(self):
+        return self.sequence
+    def set_sequence(self, sequence):
+        self.sequence = sequence
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='controllerType4', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('controllerType4')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'controllerType4':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='controllerType4')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='controllerType4', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='controllerType4'):
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+        if self.sequence is not None and 'sequence' not in already_processed:
+            already_processed.add('sequence')
+            outfile.write(' sequence="%s"' % self.gds_format_integer(self.sequence, input_name='sequence'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='controllerType4', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = 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_('sequence', node)
+        if value is not None and 'sequence' not in already_processed:
+            already_processed.add('sequence')
+            self.sequence = self.gds_parse_integer(value, node, 'sequence')
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class controllerType4
+
+
+class junctionGroupType5(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, id=None, type_=None, junctionReference=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        if junctionReference is None:
+            self.junctionReference = []
+        else:
+            self.junctionReference = junctionReference
+        self.junctionReference_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, junctionGroupType5)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if junctionGroupType5.subclass:
+            return junctionGroupType5.subclass(*args_, **kwargs_)
+        else:
+            return junctionGroupType5(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_junctionReference(self):
+        return self.junctionReference
+    def set_junctionReference(self, junctionReference):
+        self.junctionReference = junctionReference
+    def add_junctionReference(self, value):
+        self.junctionReference.append(value)
+    def insert_junctionReference_at(self, index, value):
+        self.junctionReference.insert(index, value)
+    def replace_junctionReference_at(self, index, value):
+        self.junctionReference[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def validate_junctionGroupType(self, value):
+        # Validate type junctionGroupType, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['roundabout', 'unknown']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on junctionGroupType' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.junctionReference or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='junctionGroupType5', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('junctionGroupType5')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'junctionGroupType5':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='junctionGroupType5')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='junctionGroupType5', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='junctionGroupType5'):
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='junctionGroupType5', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for junctionReference_ in self.junctionReference:
+            namespaceprefix_ = self.junctionReference_nsprefix_ + ':' if (UseCapturedNS_ and self.junctionReference_nsprefix_) else ''
+            junctionReference_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='junctionReference', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = 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
+            self.validate_junctionGroupType(self.type_)    # validate type junctionGroupType
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'junctionReference':
+            obj_ = junctionReferenceType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.junctionReference.append(obj_)
+            obj_.original_tagname_ = 'junctionReference'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class junctionGroupType5
+
+
+class junctionReferenceType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, junction=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.junction = _cast(None, junction)
+        self.junction_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, junctionReferenceType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if junctionReferenceType.subclass:
+            return junctionReferenceType.subclass(*args_, **kwargs_)
+        else:
+            return junctionReferenceType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_junction(self):
+        return self.junction
+    def set_junction(self, junction):
+        self.junction = junction
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='junctionReferenceType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('junctionReferenceType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'junctionReferenceType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='junctionReferenceType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='junctionReferenceType', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='junctionReferenceType'):
+        if self.junction is not None and 'junction' not in already_processed:
+            already_processed.add('junction')
+            outfile.write(' junction=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.junction), input_name='junction')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='junctionReferenceType', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('junction', node)
+        if value is not None and 'junction' not in already_processed:
+            already_processed.add('junction')
+            self.junction = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class junctionReferenceType
+
+
+class stationType6(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, id=None, type_=None, platform=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        if platform is None:
+            self.platform = []
+        else:
+            self.platform = platform
+        self.platform_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, stationType6)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if stationType6.subclass:
+            return stationType6.subclass(*args_, **kwargs_)
+        else:
+            return stationType6(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_platform(self):
+        return self.platform
+    def set_platform(self, platform):
+        self.platform = platform
+    def add_platform(self, value):
+        self.platform.append(value)
+    def insert_platform_at(self, index, value):
+        self.platform.insert(index, value)
+    def replace_platform_at(self, index, value):
+        self.platform[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def validate_stationType(self, value):
+        # Validate type stationType, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['small', 'medium', 'large']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on stationType' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.platform or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='stationType6', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('stationType6')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'stationType6':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='stationType6')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='stationType6', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='stationType6'):
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='stationType6', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for platform_ in self.platform:
+            namespaceprefix_ = self.platform_nsprefix_ + ':' if (UseCapturedNS_ and self.platform_nsprefix_) else ''
+            platform_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='platform', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = 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
+            self.validate_stationType(self.type_)    # validate type stationType
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'platform':
+            obj_ = platformType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.platform.append(obj_)
+            obj_.original_tagname_ = 'platform'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class stationType6
+
+
+class platformType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, id=None, segment=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        if segment is None:
+            self.segment = []
+        else:
+            self.segment = segment
+        self.segment_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, platformType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if platformType.subclass:
+            return platformType.subclass(*args_, **kwargs_)
+        else:
+            return platformType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_segment(self):
+        return self.segment
+    def set_segment(self, segment):
+        self.segment = segment
+    def add_segment(self, value):
+        self.segment.append(value)
+    def insert_segment_at(self, index, value):
+        self.segment.insert(index, value)
+    def replace_segment_at(self, index, value):
+        self.segment[index] = value
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def _hasContent(self):
+        if (
+            self.segment
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='platformType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('platformType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'platformType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='platformType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='platformType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='platformType'):
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.id is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='platformType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for segment_ in self.segment:
+            namespaceprefix_ = self.segment_nsprefix_ + ':' if (UseCapturedNS_ and self.segment_nsprefix_) else ''
+            segment_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='segment', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        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_('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, gds_collector_=None):
+        if nodeName_ == 'segment':
+            obj_ = segmentType.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.segment.append(obj_)
+            obj_.original_tagname_ = 'segment'
+# end class platformType
+
+
+class segmentType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, roadId=None, sStart=None, sEnd=None, side=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.roadId = _cast(None, roadId)
+        self.roadId_nsprefix_ = None
+        self.sStart = _cast(float, sStart)
+        self.sStart_nsprefix_ = None
+        self.sEnd = _cast(float, sEnd)
+        self.sEnd_nsprefix_ = None
+        self.side = _cast(None, side)
+        self.side_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, segmentType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if segmentType.subclass:
+            return segmentType.subclass(*args_, **kwargs_)
+        else:
+            return segmentType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_roadId(self):
+        return self.roadId
+    def set_roadId(self, roadId):
+        self.roadId = roadId
+    def get_sStart(self):
+        return self.sStart
+    def set_sStart(self, sStart):
+        self.sStart = sStart
+    def get_sEnd(self):
+        return self.sEnd
+    def set_sEnd(self, sEnd):
+        self.sEnd = sEnd
+    def get_side(self):
+        return self.side
+    def set_side(self, side):
+        self.side = side
+    def validate_side(self, value):
+        # Validate type side, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['left', 'right']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on side' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='segmentType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('segmentType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'segmentType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='segmentType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='segmentType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='segmentType'):
+        if self.roadId is not None and 'roadId' not in already_processed:
+            already_processed.add('roadId')
+            outfile.write(' roadId=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.roadId), input_name='roadId')), ))
+        if self.sStart is not None and 'sStart' not in already_processed:
+            already_processed.add('sStart')
+            outfile.write(' sStart="%s"' % self.gds_format_double(self.sStart, input_name='sStart'))
+        if self.sEnd is not None and 'sEnd' not in already_processed:
+            already_processed.add('sEnd')
+            outfile.write(' sEnd="%s"' % self.gds_format_double(self.sEnd, input_name='sEnd'))
+        if self.side is not None and 'side' not in already_processed:
+            already_processed.add('side')
+            outfile.write(' side=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.side), input_name='side')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='segmentType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('roadId', node)
+        if value is not None and 'roadId' not in already_processed:
+            already_processed.add('roadId')
+            self.roadId = value
+        value = find_attr_value_('sStart', node)
+        if value is not None and 'sStart' not in already_processed:
+            already_processed.add('sStart')
+            value = self.gds_parse_double(value, node, 'sStart')
+            self.sStart = value
+        value = find_attr_value_('sEnd', node)
+        if value is not None and 'sEnd' not in already_processed:
+            already_processed.add('sEnd')
+            value = self.gds_parse_double(value, node, 'sEnd')
+            self.sEnd = value
+        value = find_attr_value_('side', node)
+        if value is not None and 'side' not in already_processed:
+            already_processed.add('side')
+            self.side = value
+            self.validate_side(self.side)    # validate type side
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class segmentType
+
+
+class markingType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, side=None, type_=None, width=None, color=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.side = _cast(None, side)
+        self.side_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        self.color = _cast(None, color)
+        self.color_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, markingType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if markingType.subclass:
+            return markingType.subclass(*args_, **kwargs_)
+        else:
+            return markingType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_side(self):
+        return self.side
+    def set_side(self, side):
+        self.side = side
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def get_color(self):
+        return self.color
+    def set_color(self, color):
+        self.color = color
+    def validate_parkingSpacemarkingSide(self, value):
+        # Validate type parkingSpacemarkingSide, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['front', 'rear', 'left', 'right']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on parkingSpacemarkingSide' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_roadmarkType(self, value):
+        # Validate type roadmarkType, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['none', 'solid', 'broken', 'solid solid', 'solid broken', 'broken solid', 'broken broken', 'botts dots', 'grass', 'curb']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on roadmarkType' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_color(self, value):
+        # Validate type color, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['standard', 'blue', 'green', 'red', 'white', 'yellow']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on color' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='markingType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('markingType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'markingType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='markingType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='markingType', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='markingType'):
+        if self.side is not None and 'side' not in already_processed:
+            already_processed.add('side')
+            outfile.write(' side=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.side), input_name='side')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+        if self.width is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+        if self.color is not None and 'color' not in already_processed:
+            already_processed.add('color')
+            outfile.write(' color=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.color), input_name='color')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='markingType', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('side', node)
+        if value is not None and 'side' not in already_processed:
+            already_processed.add('side')
+            self.side = value
+            self.validate_parkingSpacemarkingSide(self.side)    # validate type parkingSpacemarkingSide
+        value = find_attr_value_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            self.type_ = value
+            self.validate_roadmarkType(self.type_)    # validate type roadmarkType
+        value = find_attr_value_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            value = self.gds_parse_double(value, node, 'width')
+            self.width = value
+        value = find_attr_value_('color', node)
+        if value is not None and 'color' not in already_processed:
+            already_processed.add('color')
+            self.color = value
+            self.validate_color(self.color)    # validate type color
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class markingType
+
+
+class linkType7(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, predecessor=None, successor=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.predecessor = predecessor
+        self.predecessor_nsprefix_ = None
+        self.successor = successor
+        self.successor_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, linkType7)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if linkType7.subclass:
+            return linkType7.subclass(*args_, **kwargs_)
+        else:
+            return linkType7(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_predecessor(self):
+        return self.predecessor
+    def set_predecessor(self, predecessor):
+        self.predecessor = predecessor
+    def get_successor(self):
+        return self.successor
+    def set_successor(self, successor):
+        self.successor = successor
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def _hasContent(self):
+        if (
+            self.predecessor is not None or
+            self.successor is not None or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='linkType7', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('linkType7')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'linkType7':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='linkType7')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='linkType7', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='linkType7'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='linkType7', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.predecessor is not None:
+            namespaceprefix_ = self.predecessor_nsprefix_ + ':' if (UseCapturedNS_ and self.predecessor_nsprefix_) else ''
+            self.predecessor.export(outfile, level, namespaceprefix_, namespacedef_='', name_='predecessor', pretty_print=pretty_print)
+        if self.successor is not None:
+            namespaceprefix_ = self.successor_nsprefix_ + ':' if (UseCapturedNS_ and self.successor_nsprefix_) else ''
+            self.successor.export(outfile, level, namespaceprefix_, namespacedef_='', name_='successor', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'predecessor':
+            obj_ = predecessorType8.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.predecessor = obj_
+            obj_.original_tagname_ = 'predecessor'
+        elif nodeName_ == 'successor':
+            obj_ = successorType9.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.successor = obj_
+            obj_.original_tagname_ = 'successor'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class linkType7
+
+
+class predecessorType8(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(int, id)
+        self.id_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, predecessorType8)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if predecessorType8.subclass:
+            return predecessorType8.subclass(*args_, **kwargs_)
+        else:
+            return predecessorType8(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='predecessorType8', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('predecessorType8')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'predecessorType8':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='predecessorType8')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='predecessorType8', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='predecessorType8'):
+        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'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='predecessorType8', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = self.gds_parse_integer(value, node, 'id')
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class predecessorType8
+
+
+class successorType9(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(int, id)
+        self.id_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, successorType9)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if successorType9.subclass:
+            return successorType9.subclass(*args_, **kwargs_)
+        else:
+            return successorType9(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='successorType9', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('successorType9')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'successorType9':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='successorType9')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='successorType9', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='successorType9'):
+        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'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='successorType9', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = self.gds_parse_integer(value, node, 'id')
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class successorType9
+
+
+class widthType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, a=None, b=None, c=None, d=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, widthType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if widthType.subclass:
+            return widthType.subclass(*args_, **kwargs_)
+        else:
+            return widthType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='widthType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('widthType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'widthType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='widthType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='widthType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='widthType'):
+        if self.sOffset is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.a is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if self.b is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if self.c is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if self.d is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='widthType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            value = self.gds_parse_double(value, node, 'sOffset')
+            self.sOffset = value
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            value = self.gds_parse_double(value, node, 'a')
+            self.a = value
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            value = self.gds_parse_double(value, node, 'b')
+            self.b = value
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            value = self.gds_parse_double(value, node, 'c')
+            self.c = value
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            value = self.gds_parse_double(value, node, 'd')
+            self.d = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class widthType
+
+
+class borderType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, a=None, b=None, c=None, d=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, borderType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if borderType.subclass:
+            return borderType.subclass(*args_, **kwargs_)
+        else:
+            return borderType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='borderType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('borderType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'borderType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='borderType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='borderType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='borderType'):
+        if self.sOffset is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.a is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if self.b is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if self.c is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if self.d is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='borderType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            value = self.gds_parse_double(value, node, 'sOffset')
+            self.sOffset = value
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            value = self.gds_parse_double(value, node, 'a')
+            self.a = value
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            value = self.gds_parse_double(value, node, 'b')
+            self.b = value
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            value = self.gds_parse_double(value, node, 'c')
+            self.c = value
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            value = self.gds_parse_double(value, node, 'd')
+            self.d = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class borderType
+
+
+class roadMarkType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, type__attr=None, weight=None, color=None, material=None, width=None, laneChange=None, height=None, type_=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.type__attr = _cast(None, type__attr)
+        self.type__attr_nsprefix_ = None
+        self.weight = _cast(None, weight)
+        self.weight_nsprefix_ = None
+        self.color = _cast(None, color)
+        self.color_nsprefix_ = None
+        self.material = _cast(None, material)
+        self.material_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        self.laneChange = _cast(None, laneChange)
+        self.laneChange_nsprefix_ = None
+        self.height = _cast(float, height)
+        self.height_nsprefix_ = None
+        self.type_ = type_
+        self.type__nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, roadMarkType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if roadMarkType.subclass:
+            return roadMarkType.subclass(*args_, **kwargs_)
+        else:
+            return roadMarkType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_type__attr(self):
+        return self.type__attr
+    def set_type__attr(self, type__attr):
+        self.type__attr = type__attr
+    def get_weight(self):
+        return self.weight
+    def set_weight(self, weight):
+        self.weight = weight
+    def get_color(self):
+        return self.color
+    def set_color(self, color):
+        self.color = color
+    def get_material(self):
+        return self.material
+    def set_material(self, material):
+        self.material = material
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def get_laneChange(self):
+        return self.laneChange
+    def set_laneChange(self, laneChange):
+        self.laneChange = laneChange
+    def get_height(self):
+        return self.height
+    def set_height(self, height):
+        self.height = height
+    def validate_roadmarkType(self, value):
+        # Validate type roadmarkType, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['none', 'solid', 'broken', 'solid solid', 'solid broken', 'broken solid', 'broken broken', 'botts dots', 'grass', 'curb']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on roadmarkType' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_weight(self, value):
+        # Validate type weight, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['standard', 'bold']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on weight' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_color(self, value):
+        # Validate type color, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['standard', 'blue', 'green', 'red', 'white', 'yellow']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on color' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_laneChange(self, value):
+        # Validate type laneChange, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['increase', 'decrease', 'both', 'none']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on laneChange' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.type_ is not None or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='roadMarkType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('roadMarkType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'roadMarkType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='roadMarkType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='roadMarkType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='roadMarkType'):
+        if self.sOffset is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.type__attr is not None and 'type__attr' not in already_processed:
+            already_processed.add('type__attr')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type__attr), input_name='type__attr')), ))
+        if self.weight is not None and 'weight' not in already_processed:
+            already_processed.add('weight')
+            outfile.write(' weight=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.weight), input_name='weight')), ))
+        if self.color is not None and 'color' not in already_processed:
+            already_processed.add('color')
+            outfile.write(' color=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.color), input_name='color')), ))
+        if self.material is not None and 'material' not in already_processed:
+            already_processed.add('material')
+            outfile.write(' material=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.material), input_name='material')), ))
+        if self.width is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+        if self.laneChange is not None and 'laneChange' not in already_processed:
+            already_processed.add('laneChange')
+            outfile.write(' laneChange=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.laneChange), input_name='laneChange')), ))
+        if self.height is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            outfile.write(' height="%s"' % self.gds_format_double(self.height, input_name='height'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='roadMarkType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.type_ is not None:
+            namespaceprefix_ = self.type__nsprefix_ + ':' if (UseCapturedNS_ and self.type__nsprefix_) else ''
+            self.type_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='type', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            value = self.gds_parse_double(value, node, 'sOffset')
+            self.sOffset = value
+        value = find_attr_value_('type', node)
+        if value is not None and 'type__attr' not in already_processed:
+            already_processed.add('type__attr')
+            self.type__attr = value
+            self.validate_roadmarkType(self.type__attr)    # validate type roadmarkType
+        value = find_attr_value_('weight', node)
+        if value is not None and 'weight' not in already_processed:
+            already_processed.add('weight')
+            self.weight = value
+            self.validate_weight(self.weight)    # validate type weight
+        value = find_attr_value_('color', node)
+        if value is not None and 'color' not in already_processed:
+            already_processed.add('color')
+            self.color = value
+            self.validate_color(self.color)    # validate type color
+        value = find_attr_value_('material', node)
+        if value is not None and 'material' not in already_processed:
+            already_processed.add('material')
+            self.material = value
+        value = find_attr_value_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            value = self.gds_parse_double(value, node, 'width')
+            self.width = value
+        value = find_attr_value_('laneChange', node)
+        if value is not None and 'laneChange' not in already_processed:
+            already_processed.add('laneChange')
+            self.laneChange = value
+            self.validate_laneChange(self.laneChange)    # validate type laneChange
+        value = find_attr_value_('height', node)
+        if value is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            value = self.gds_parse_double(value, node, 'height')
+            self.height = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'type':
+            obj_ = typeType10.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.type_ = obj_
+            obj_.original_tagname_ = 'type'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class roadMarkType
+
+
+class typeType10(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, width=None, line=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        if line is None:
+            self.line = []
+        else:
+            self.line = line
+        self.line_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, typeType10)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if typeType10.subclass:
+            return typeType10.subclass(*args_, **kwargs_)
+        else:
+            return typeType10(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_line(self):
+        return self.line
+    def set_line(self, line):
+        self.line = line
+    def add_line(self, value):
+        self.line.append(value)
+    def insert_line_at(self, index, value):
+        self.line.insert(index, value)
+    def replace_line_at(self, index, value):
+        self.line[index] = value
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def _hasContent(self):
+        if (
+            self.line
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='typeType10', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('typeType10')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'typeType10':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='typeType10')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='typeType10', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='typeType10'):
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.width is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='typeType10', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for line_ in self.line:
+            namespaceprefix_ = self.line_nsprefix_ + ':' if (UseCapturedNS_ and self.line_nsprefix_) else ''
+            line_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='line', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        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_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            value = self.gds_parse_double(value, node, 'width')
+            self.width = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'line':
+            obj_ = lineType11.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.line.append(obj_)
+            obj_.original_tagname_ = 'line'
+# end class typeType10
+
+
+class lineType11(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, length=None, space=None, tOffset=None, sOffset=None, rule=None, width=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.space = _cast(float, space)
+        self.space_nsprefix_ = None
+        self.tOffset = _cast(float, tOffset)
+        self.tOffset_nsprefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.rule = _cast(None, rule)
+        self.rule_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, lineType11)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if lineType11.subclass:
+            return lineType11.subclass(*args_, **kwargs_)
+        else:
+            return lineType11(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def get_space(self):
+        return self.space
+    def set_space(self, space):
+        self.space = space
+    def get_tOffset(self):
+        return self.tOffset
+    def set_tOffset(self, tOffset):
+        self.tOffset = tOffset
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_rule(self):
+        return self.rule
+    def set_rule(self, rule):
+        self.rule = rule
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def validate_rule(self, value):
+        # Validate type rule, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['no passing', 'caution', 'none']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on rule' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='lineType11', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('lineType11')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'lineType11':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='lineType11')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='lineType11', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='lineType11'):
+        if self.length is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+        if self.space is not None and 'space' not in already_processed:
+            already_processed.add('space')
+            outfile.write(' space="%s"' % self.gds_format_double(self.space, input_name='space'))
+        if self.tOffset is not None and 'tOffset' not in already_processed:
+            already_processed.add('tOffset')
+            outfile.write(' tOffset="%s"' % self.gds_format_double(self.tOffset, input_name='tOffset'))
+        if self.sOffset is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.rule is not None and 'rule' not in already_processed:
+            already_processed.add('rule')
+            outfile.write(' rule=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.rule), input_name='rule')), ))
+        if self.width is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='lineType11', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            value = self.gds_parse_double(value, node, 'length')
+            self.length = value
+        value = find_attr_value_('space', node)
+        if value is not None and 'space' not in already_processed:
+            already_processed.add('space')
+            value = self.gds_parse_double(value, node, 'space')
+            self.space = value
+        value = find_attr_value_('tOffset', node)
+        if value is not None and 'tOffset' not in already_processed:
+            already_processed.add('tOffset')
+            value = self.gds_parse_double(value, node, 'tOffset')
+            self.tOffset = value
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            value = self.gds_parse_double(value, node, 'sOffset')
+            self.sOffset = value
+        value = find_attr_value_('rule', node)
+        if value is not None and 'rule' not in already_processed:
+            already_processed.add('rule')
+            self.rule = value
+            self.validate_rule(self.rule)    # validate type rule
+        value = find_attr_value_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            value = self.gds_parse_double(value, node, 'width')
+            self.width = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class lineType11
+
+
+class materialType12(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, surface=None, friction=None, roughness=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.surface = _cast(None, surface)
+        self.surface_nsprefix_ = None
+        self.friction = _cast(float, friction)
+        self.friction_nsprefix_ = None
+        self.roughness = _cast(float, roughness)
+        self.roughness_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, materialType12)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if materialType12.subclass:
+            return materialType12.subclass(*args_, **kwargs_)
+        else:
+            return materialType12(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_surface(self):
+        return self.surface
+    def set_surface(self, surface):
+        self.surface = surface
+    def get_friction(self):
+        return self.friction
+    def set_friction(self, friction):
+        self.friction = friction
+    def get_roughness(self):
+        return self.roughness
+    def set_roughness(self, roughness):
+        self.roughness = roughness
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='materialType12', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('materialType12')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'materialType12':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='materialType12')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='materialType12', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='materialType12'):
+        if self.sOffset is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.surface is not None and 'surface' not in already_processed:
+            already_processed.add('surface')
+            outfile.write(' surface=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.surface), input_name='surface')), ))
+        if self.friction is not None and 'friction' not in already_processed:
+            already_processed.add('friction')
+            outfile.write(' friction="%s"' % self.gds_format_double(self.friction, input_name='friction'))
+        if self.roughness is not None and 'roughness' not in already_processed:
+            already_processed.add('roughness')
+            outfile.write(' roughness="%s"' % self.gds_format_double(self.roughness, input_name='roughness'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='materialType12', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            value = self.gds_parse_double(value, node, 'sOffset')
+            self.sOffset = value
+        value = find_attr_value_('surface', node)
+        if value is not None and 'surface' not in already_processed:
+            already_processed.add('surface')
+            self.surface = value
+        value = find_attr_value_('friction', node)
+        if value is not None and 'friction' not in already_processed:
+            already_processed.add('friction')
+            value = self.gds_parse_double(value, node, 'friction')
+            self.friction = value
+        value = find_attr_value_('roughness', node)
+        if value is not None and 'roughness' not in already_processed:
+            already_processed.add('roughness')
+            value = self.gds_parse_double(value, node, 'roughness')
+            self.roughness = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class materialType12
+
+
+class visibilityType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, forward=None, back=None, left=None, right=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.forward = _cast(float, forward)
+        self.forward_nsprefix_ = None
+        self.back = _cast(float, back)
+        self.back_nsprefix_ = None
+        self.left = _cast(float, left)
+        self.left_nsprefix_ = None
+        self.right = _cast(float, right)
+        self.right_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, visibilityType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if visibilityType.subclass:
+            return visibilityType.subclass(*args_, **kwargs_)
+        else:
+            return visibilityType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_forward(self):
+        return self.forward
+    def set_forward(self, forward):
+        self.forward = forward
+    def get_back(self):
+        return self.back
+    def set_back(self, back):
+        self.back = back
+    def get_left(self):
+        return self.left
+    def set_left(self, left):
+        self.left = left
+    def get_right(self):
+        return self.right
+    def set_right(self, right):
+        self.right = right
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='visibilityType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('visibilityType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'visibilityType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='visibilityType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='visibilityType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='visibilityType'):
+        if self.sOffset is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.forward is not None and 'forward' not in already_processed:
+            already_processed.add('forward')
+            outfile.write(' forward="%s"' % self.gds_format_double(self.forward, input_name='forward'))
+        if self.back is not None and 'back' not in already_processed:
+            already_processed.add('back')
+            outfile.write(' back="%s"' % self.gds_format_double(self.back, input_name='back'))
+        if self.left is not None and 'left' not in already_processed:
+            already_processed.add('left')
+            outfile.write(' left="%s"' % self.gds_format_double(self.left, input_name='left'))
+        if self.right is not None and 'right' not in already_processed:
+            already_processed.add('right')
+            outfile.write(' right="%s"' % self.gds_format_double(self.right, input_name='right'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='visibilityType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            value = self.gds_parse_double(value, node, 'sOffset')
+            self.sOffset = value
+        value = find_attr_value_('forward', node)
+        if value is not None and 'forward' not in already_processed:
+            already_processed.add('forward')
+            value = self.gds_parse_double(value, node, 'forward')
+            self.forward = value
+        value = find_attr_value_('back', node)
+        if value is not None and 'back' not in already_processed:
+            already_processed.add('back')
+            value = self.gds_parse_double(value, node, 'back')
+            self.back = value
+        value = find_attr_value_('left', node)
+        if value is not None and 'left' not in already_processed:
+            already_processed.add('left')
+            value = self.gds_parse_double(value, node, 'left')
+            self.left = value
+        value = find_attr_value_('right', node)
+        if value is not None and 'right' not in already_processed:
+            already_processed.add('right')
+            value = self.gds_parse_double(value, node, 'right')
+            self.right = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class visibilityType
+
+
+class speedType13(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, max=None, unit=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.max = _cast(float, max)
+        self.max_nsprefix_ = None
+        self.unit = _cast(None, unit)
+        self.unit_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, speedType13)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if speedType13.subclass:
+            return speedType13.subclass(*args_, **kwargs_)
+        else:
+            return speedType13(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_max(self):
+        return self.max
+    def set_max(self, max):
+        self.max = max
+    def get_unit(self):
+        return self.unit
+    def set_unit(self, unit):
+        self.unit = unit
+    def validate_unit(self, value):
+        # Validate type unit, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['m', 'km', 'ft', 'mile', 'm/s', 'mph', 'km/h', 'kg', 't', '%']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on unit' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='speedType13', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('speedType13')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'speedType13':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='speedType13')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='speedType13', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='speedType13'):
+        if self.sOffset is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.max is not None and 'max' not in already_processed:
+            already_processed.add('max')
+            outfile.write(' max="%s"' % self.gds_format_double(self.max, input_name='max'))
+        if self.unit is not None and 'unit' not in already_processed:
+            already_processed.add('unit')
+            outfile.write(' unit=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.unit), input_name='unit')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='speedType13', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            value = self.gds_parse_double(value, node, 'sOffset')
+            self.sOffset = value
+        value = find_attr_value_('max', node)
+        if value is not None and 'max' not in already_processed:
+            already_processed.add('max')
+            value = self.gds_parse_double(value, node, 'max')
+            self.max = value
+        value = find_attr_value_('unit', node)
+        if value is not None and 'unit' not in already_processed:
+            already_processed.add('unit')
+            self.unit = value
+            self.validate_unit(self.unit)    # validate type unit
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class speedType13
+
+
+class accessType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, restriction=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.restriction = _cast(None, restriction)
+        self.restriction_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, accessType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if accessType.subclass:
+            return accessType.subclass(*args_, **kwargs_)
+        else:
+            return accessType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_restriction(self):
+        return self.restriction
+    def set_restriction(self, restriction):
+        self.restriction = restriction
+    def validate_restriction(self, value):
+        # Validate type restriction, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['simulator', 'autonomous traffic', 'pedestrian', 'none']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on restriction' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='accessType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('accessType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'accessType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='accessType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='accessType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='accessType'):
+        if self.sOffset is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.restriction is not None and 'restriction' not in already_processed:
+            already_processed.add('restriction')
+            outfile.write(' restriction=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.restriction), input_name='restriction')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='accessType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            value = self.gds_parse_double(value, node, 'sOffset')
+            self.sOffset = value
+        value = find_attr_value_('restriction', node)
+        if value is not None and 'restriction' not in already_processed:
+            already_processed.add('restriction')
+            self.restriction = value
+            self.validate_restriction(self.restriction)    # validate type restriction
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class accessType
+
+
+class heightType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, inner=None, outer=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.inner = _cast(float, inner)
+        self.inner_nsprefix_ = None
+        self.outer = _cast(float, outer)
+        self.outer_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, heightType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if heightType.subclass:
+            return heightType.subclass(*args_, **kwargs_)
+        else:
+            return heightType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_inner(self):
+        return self.inner
+    def set_inner(self, inner):
+        self.inner = inner
+    def get_outer(self):
+        return self.outer
+    def set_outer(self, outer):
+        self.outer = outer
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='heightType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('heightType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'heightType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='heightType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='heightType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='heightType'):
+        if self.sOffset is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.inner is not None and 'inner' not in already_processed:
+            already_processed.add('inner')
+            outfile.write(' inner="%s"' % self.gds_format_double(self.inner, input_name='inner'))
+        if self.outer is not None and 'outer' not in already_processed:
+            already_processed.add('outer')
+            outfile.write(' outer="%s"' % self.gds_format_double(self.outer, input_name='outer'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='heightType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            value = self.gds_parse_double(value, node, 'sOffset')
+            self.sOffset = value
+        value = find_attr_value_('inner', node)
+        if value is not None and 'inner' not in already_processed:
+            already_processed.add('inner')
+            value = self.gds_parse_double(value, node, 'inner')
+            self.inner = value
+        value = find_attr_value_('outer', node)
+        if value is not None and 'outer' not in already_processed:
+            already_processed.add('outer')
+            value = self.gds_parse_double(value, node, 'outer')
+            self.outer = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class heightType
+
+
+class ruleType(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, value=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.value = _cast(None, value)
+        self.value_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, ruleType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if ruleType.subclass:
+            return ruleType.subclass(*args_, **kwargs_)
+        else:
+            return ruleType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_value(self):
+        return self.value
+    def set_value(self, value):
+        self.value = value
+    def _hasContent(self):
+        if (
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='ruleType', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('ruleType')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'ruleType':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='ruleType')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='ruleType', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='ruleType'):
+        if self.sOffset is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            outfile.write(' value=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.value), input_name='value')), ))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='ruleType', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            value = self.gds_parse_double(value, node, 'sOffset')
+            self.sOffset = value
+        value = find_attr_value_('value', node)
+        if value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            self.value = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class ruleType
+
+
+class linkType14(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, predecessor=None, successor=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.predecessor = predecessor
+        self.predecessor_nsprefix_ = None
+        self.successor = successor
+        self.successor_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, linkType14)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if linkType14.subclass:
+            return linkType14.subclass(*args_, **kwargs_)
+        else:
+            return linkType14(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_predecessor(self):
+        return self.predecessor
+    def set_predecessor(self, predecessor):
+        self.predecessor = predecessor
+    def get_successor(self):
+        return self.successor
+    def set_successor(self, successor):
+        self.successor = successor
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def _hasContent(self):
+        if (
+            self.predecessor is not None or
+            self.successor is not None or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='linkType14', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('linkType14')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'linkType14':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='linkType14')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='linkType14', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='linkType14'):
+        pass
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='linkType14', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.predecessor is not None:
+            namespaceprefix_ = self.predecessor_nsprefix_ + ':' if (UseCapturedNS_ and self.predecessor_nsprefix_) else ''
+            self.predecessor.export(outfile, level, namespaceprefix_, namespacedef_='', name_='predecessor', pretty_print=pretty_print)
+        if self.successor is not None:
+            namespaceprefix_ = self.successor_nsprefix_ + ':' if (UseCapturedNS_ and self.successor_nsprefix_) else ''
+            self.successor.export(outfile, level, namespaceprefix_, namespacedef_='', name_='successor', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        pass
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'predecessor':
+            obj_ = predecessorType15.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.predecessor = obj_
+            obj_.original_tagname_ = 'predecessor'
+        elif nodeName_ == 'successor':
+            obj_ = successorType16.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.successor = obj_
+            obj_.original_tagname_ = 'successor'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class linkType14
+
+
+class predecessorType15(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(int, id)
+        self.id_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, predecessorType15)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if predecessorType15.subclass:
+            return predecessorType15.subclass(*args_, **kwargs_)
+        else:
+            return predecessorType15(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='predecessorType15', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('predecessorType15')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'predecessorType15':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='predecessorType15')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='predecessorType15', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='predecessorType15'):
+        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'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='predecessorType15', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = self.gds_parse_integer(value, node, 'id')
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class predecessorType15
+
+
+class successorType16(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(int, id)
+        self.id_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, successorType16)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if successorType16.subclass:
+            return successorType16.subclass(*args_, **kwargs_)
+        else:
+            return successorType16(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='successorType16', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('successorType16')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'successorType16':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='successorType16')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='successorType16', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='successorType16'):
+        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'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='successorType16', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = self.gds_parse_integer(value, node, 'id')
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class successorType16
+
+
+class roadMarkType17(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, type__attr=None, weight=None, color=None, material=None, width=None, laneChange=None, height=None, type_=None, userData=None, include=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.type__attr = _cast(None, type__attr)
+        self.type__attr_nsprefix_ = None
+        self.weight = _cast(None, weight)
+        self.weight_nsprefix_ = None
+        self.color = _cast(None, color)
+        self.color_nsprefix_ = None
+        self.material = _cast(None, material)
+        self.material_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        self.laneChange = _cast(None, laneChange)
+        self.laneChange_nsprefix_ = None
+        self.height = _cast(float, height)
+        self.height_nsprefix_ = None
+        self.type_ = type_
+        self.type__nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, roadMarkType17)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if roadMarkType17.subclass:
+            return roadMarkType17.subclass(*args_, **kwargs_)
+        else:
+            return roadMarkType17(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_type__attr(self):
+        return self.type__attr
+    def set_type__attr(self, type__attr):
+        self.type__attr = type__attr
+    def get_weight(self):
+        return self.weight
+    def set_weight(self, weight):
+        self.weight = weight
+    def get_color(self):
+        return self.color
+    def set_color(self, color):
+        self.color = color
+    def get_material(self):
+        return self.material
+    def set_material(self, material):
+        self.material = material
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def get_laneChange(self):
+        return self.laneChange
+    def set_laneChange(self, laneChange):
+        self.laneChange = laneChange
+    def get_height(self):
+        return self.height
+    def set_height(self, height):
+        self.height = height
+    def validate_roadmarkType(self, value):
+        # Validate type roadmarkType, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['none', 'solid', 'broken', 'solid solid', 'solid broken', 'broken solid', 'broken broken', 'botts dots', 'grass', 'curb']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on roadmarkType' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_weight(self, value):
+        # Validate type weight, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['standard', 'bold']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on weight' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_color(self, value):
+        # Validate type color, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['standard', 'blue', 'green', 'red', 'white', 'yellow']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on color' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def validate_laneChange(self, value):
+        # Validate type laneChange, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['increase', 'decrease', 'both', 'none']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on laneChange' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+            self.type_ is not None or
+            self.userData or
+            self.include
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='roadMarkType17', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('roadMarkType17')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'roadMarkType17':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='roadMarkType17')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='roadMarkType17', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='roadMarkType17'):
+        if self.sOffset is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.type__attr is not None and 'type__attr' not in already_processed:
+            already_processed.add('type__attr')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type__attr), input_name='type__attr')), ))
+        if self.weight is not None and 'weight' not in already_processed:
+            already_processed.add('weight')
+            outfile.write(' weight=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.weight), input_name='weight')), ))
+        if self.color is not None and 'color' not in already_processed:
+            already_processed.add('color')
+            outfile.write(' color=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.color), input_name='color')), ))
+        if self.material is not None and 'material' not in already_processed:
+            already_processed.add('material')
+            outfile.write(' material=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.material), input_name='material')), ))
+        if self.width is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+        if self.laneChange is not None and 'laneChange' not in already_processed:
+            already_processed.add('laneChange')
+            outfile.write(' laneChange=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.laneChange), input_name='laneChange')), ))
+        if self.height is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            outfile.write(' height="%s"' % self.gds_format_double(self.height, input_name='height'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='roadMarkType17', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.type_ is not None:
+            namespaceprefix_ = self.type__nsprefix_ + ':' if (UseCapturedNS_ and self.type__nsprefix_) else ''
+            self.type_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='type', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            value = self.gds_parse_double(value, node, 'sOffset')
+            self.sOffset = value
+        value = find_attr_value_('type', node)
+        if value is not None and 'type__attr' not in already_processed:
+            already_processed.add('type__attr')
+            self.type__attr = value
+            self.validate_roadmarkType(self.type__attr)    # validate type roadmarkType
+        value = find_attr_value_('weight', node)
+        if value is not None and 'weight' not in already_processed:
+            already_processed.add('weight')
+            self.weight = value
+            self.validate_weight(self.weight)    # validate type weight
+        value = find_attr_value_('color', node)
+        if value is not None and 'color' not in already_processed:
+            already_processed.add('color')
+            self.color = value
+            self.validate_color(self.color)    # validate type color
+        value = find_attr_value_('material', node)
+        if value is not None and 'material' not in already_processed:
+            already_processed.add('material')
+            self.material = value
+        value = find_attr_value_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            value = self.gds_parse_double(value, node, 'width')
+            self.width = value
+        value = find_attr_value_('laneChange', node)
+        if value is not None and 'laneChange' not in already_processed:
+            already_processed.add('laneChange')
+            self.laneChange = value
+            self.validate_laneChange(self.laneChange)    # validate type laneChange
+        value = find_attr_value_('height', node)
+        if value is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            value = self.gds_parse_double(value, node, 'height')
+            self.height = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'type':
+            obj_ = typeType18.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.type_ = obj_
+            obj_.original_tagname_ = 'type'
+        elif nodeName_ == 'userData':
+            obj_ = userData.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = include.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+# end class roadMarkType17
+
+
+class typeType18(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, width=None, line=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        if line is None:
+            self.line = []
+        else:
+            self.line = line
+        self.line_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, typeType18)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if typeType18.subclass:
+            return typeType18.subclass(*args_, **kwargs_)
+        else:
+            return typeType18(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_line(self):
+        return self.line
+    def set_line(self, line):
+        self.line = line
+    def add_line(self, value):
+        self.line.append(value)
+    def insert_line_at(self, index, value):
+        self.line.insert(index, value)
+    def replace_line_at(self, index, value):
+        self.line[index] = value
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def _hasContent(self):
+        if (
+            self.line
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='typeType18', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('typeType18')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'typeType18':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='typeType18')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='typeType18', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='typeType18'):
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.width is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='typeType18', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for line_ in self.line:
+            namespaceprefix_ = self.line_nsprefix_ + ':' if (UseCapturedNS_ and self.line_nsprefix_) else ''
+            line_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='line', pretty_print=pretty_print)
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        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_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            value = self.gds_parse_double(value, node, 'width')
+            self.width = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        if nodeName_ == 'line':
+            obj_ = lineType19.factory(parent_object_=self)
+            obj_.build(child_, gds_collector_=gds_collector_)
+            self.line.append(obj_)
+            obj_.original_tagname_ = 'line'
+# end class typeType18
+
+
+class lineType19(GeneratedsSuper):
+    __hash__ = GeneratedsSuper.__hash__
+    subclass = None
+    superclass = None
+    def __init__(self, length=None, space=None, tOffset=None, sOffset=None, rule=None, width=None, gds_collector_=None, **kwargs_):
+        self.gds_collector_ = gds_collector_
+        self.gds_elementtree_node_ = None
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.space = _cast(float, space)
+        self.space_nsprefix_ = None
+        self.tOffset = _cast(float, tOffset)
+        self.tOffset_nsprefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.rule = _cast(None, rule)
+        self.rule_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, lineType19)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if lineType19.subclass:
+            return lineType19.subclass(*args_, **kwargs_)
+        else:
+            return lineType19(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def get_space(self):
+        return self.space
+    def set_space(self, space):
+        self.space = space
+    def get_tOffset(self):
+        return self.tOffset
+    def set_tOffset(self, tOffset):
+        self.tOffset = tOffset
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_rule(self):
+        return self.rule
+    def set_rule(self, rule):
+        self.rule = rule
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def validate_rule(self, value):
+        # Validate type rule, a restriction on xsd:string.
+        if value is not None and Validate_simpletypes_ and self.gds_collector_ is not None:
+            if not isinstance(value, str):
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s is not of the correct base simple type (str)' % {"value": value, "lineno": lineno, })
+                return False
+            value = value
+            enumerations = ['no passing', 'caution', 'none']
+            if value not in enumerations:
+                lineno = self.gds_get_node_lineno_()
+                self.gds_collector_.add_message('Value "%(value)s"%(lineno)s does not match xsd enumeration restriction on rule' % {"value" : encode_str_2_3(value), "lineno": lineno} )
+                result = False
+    def _hasContent(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='lineType19', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('lineType19')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None and name_ == 'lineType19':
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self._exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='lineType19')
+        if self._hasContent():
+            outfile.write('>%s' % (eol_, ))
+            self._exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='lineType19', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def _exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='lineType19'):
+        if self.length is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+        if self.space is not None and 'space' not in already_processed:
+            already_processed.add('space')
+            outfile.write(' space="%s"' % self.gds_format_double(self.space, input_name='space'))
+        if self.tOffset is not None and 'tOffset' not in already_processed:
+            already_processed.add('tOffset')
+            outfile.write(' tOffset="%s"' % self.gds_format_double(self.tOffset, input_name='tOffset'))
+        if self.sOffset is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.rule is not None and 'rule' not in already_processed:
+            already_processed.add('rule')
+            outfile.write(' rule=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.rule), input_name='rule')), ))
+        if self.width is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+    def _exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='lineType19', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node, gds_collector_=None):
+        self.gds_collector_ = gds_collector_
+        if SaveElementTreeNode:
+            self.gds_elementtree_node_ = node
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        self._buildAttributes(node, node.attrib, already_processed)
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self._buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)
+        return self
+    def _buildAttributes(self, node, attrs, already_processed):
+        value = find_attr_value_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            value = self.gds_parse_double(value, node, 'length')
+            self.length = value
+        value = find_attr_value_('space', node)
+        if value is not None and 'space' not in already_processed:
+            already_processed.add('space')
+            value = self.gds_parse_double(value, node, 'space')
+            self.space = value
+        value = find_attr_value_('tOffset', node)
+        if value is not None and 'tOffset' not in already_processed:
+            already_processed.add('tOffset')
+            value = self.gds_parse_double(value, node, 'tOffset')
+            self.tOffset = value
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            value = self.gds_parse_double(value, node, 'sOffset')
+            self.sOffset = value
+        value = find_attr_value_('rule', node)
+        if value is not None and 'rule' not in already_processed:
+            already_processed.add('rule')
+            self.rule = value
+            self.validate_rule(self.rule)    # validate type rule
+        value = find_attr_value_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            value = self.gds_parse_double(value, node, 'width')
+            self.width = value
+    def _buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):
+        pass
+# end class lineType19
+
+
+GDSClassesMapping = {
+}
+
+
+USAGE_TEXT = """
+Usage: python <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 get_required_ns_prefix_defs(rootNode):
+    '''Get all name space prefix definitions required in this XML doc.
+    Return a dictionary of definitions and a char string of definitions.
+    '''
+    nsmap = {
+        prefix: uri
+        for node in rootNode.iter()
+        for (prefix, uri) in node.nsmap.items()
+        if prefix is not None
+    }
+    namespacedefs = ' '.join([
+        'xmlns:{}="{}"'.format(prefix, uri)
+        for prefix, uri in nsmap.items()
+    ])
+    return nsmap, namespacedefs
+
+
+def parse(inFileName, silence=False, print_warnings=True):
+    global CapturedNsmap_
+    gds_collector = GdsCollector_()
+    parser = None
+    doc = parsexml_(inFileName, parser)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'OpenDRIVE'
+        rootClass = OpenDRIVE
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode, gds_collector_=gds_collector)
+    CapturedNsmap_, namespacedefs = get_required_ns_prefix_defs(rootNode)
+    if not SaveElementTreeNode:
+        doc = None
+        rootNode = None
+    if not silence:
+        sys.stdout.write('<?xml version="1.0" ?>\n')
+        rootObj.export(
+            sys.stdout, 0, name_=rootTag,
+            namespacedef_=namespacedefs,
+            pretty_print=True)
+    if print_warnings and len(gds_collector.get_messages()) > 0:
+        separator = ('-' * 50) + '\n'
+        sys.stderr.write(separator)
+        sys.stderr.write('----- Warnings -- count: {} -----\n'.format(
+            len(gds_collector.get_messages()), ))
+        gds_collector.write_messages(sys.stderr)
+        sys.stderr.write(separator)
+    return rootObj
+
+
+def parseEtree(inFileName, silence=False, print_warnings=True,
+               mapping=None, reverse_mapping=None, nsmap=None):
+    parser = None
+    doc = parsexml_(inFileName, parser)
+    gds_collector = GdsCollector_()
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'OpenDRIVE'
+        rootClass = OpenDRIVE
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode, gds_collector_=gds_collector)
+    if mapping is None:
+        mapping = {}
+    if reverse_mapping is None:
+        reverse_mapping = {}
+    rootElement = rootObj.to_etree(
+        None, name_=rootTag, mapping_=mapping,
+        reverse_mapping_=reverse_mapping, nsmap_=nsmap)
+    reverse_node_mapping = rootObj.gds_reverse_node_mapping(mapping)
+    # Enable Python to collect the space used by the DOM.
+    if not SaveElementTreeNode:
+        doc = None
+        rootNode = None
+    if not silence:
+        content = etree_.tostring(
+            rootElement, pretty_print=True,
+            xml_declaration=True, encoding="utf-8")
+        sys.stdout.write(str(content))
+        sys.stdout.write('\n')
+    if print_warnings and len(gds_collector.get_messages()) > 0:
+        separator = ('-' * 50) + '\n'
+        sys.stderr.write(separator)
+        sys.stderr.write('----- Warnings -- count: {} -----\n'.format(
+            len(gds_collector.get_messages()), ))
+        gds_collector.write_messages(sys.stderr)
+        sys.stderr.write(separator)
+    return rootObj, rootElement, mapping, reverse_node_mapping
+
+
+def parseString(inString, silence=False, print_warnings=True):
+    '''Parse a string, create the object tree, and export it.
+
+    Arguments:
+    - inString -- A string.  This XML fragment should not start
+      with an XML declaration containing an encoding.
+    - silence -- A boolean.  If False, export the object.
+    Returns -- The root object in the tree.
+    '''
+    parser = None
+    rootNode= parsexmlstring_(inString, parser)
+    gds_collector = GdsCollector_()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'OpenDRIVE'
+        rootClass = OpenDRIVE
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode, gds_collector_=gds_collector)
+    if not SaveElementTreeNode:
+        rootNode = None
+    if not silence:
+        sys.stdout.write('<?xml version="1.0" ?>\n')
+        rootObj.export(
+            sys.stdout, 0, name_=rootTag,
+            namespacedef_='')
+    if print_warnings and len(gds_collector.get_messages()) > 0:
+        separator = ('-' * 50) + '\n'
+        sys.stderr.write(separator)
+        sys.stderr.write('----- Warnings -- count: {} -----\n'.format(
+            len(gds_collector.get_messages()), ))
+        gds_collector.write_messages(sys.stderr)
+        sys.stderr.write(separator)
+    return rootObj
+
+
+def parseLiteral(inFileName, silence=False, print_warnings=True):
+    parser = None
+    doc = parsexml_(inFileName, parser)
+    gds_collector = GdsCollector_()
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'OpenDRIVE'
+        rootClass = OpenDRIVE
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode, gds_collector_=gds_collector)
+    # Enable Python to collect the space used by the DOM.
+    if not SaveElementTreeNode:
+        doc = None
+        rootNode = None
+    if not silence:
+        sys.stdout.write('#from opendrive_parser_14H import *\n\n')
+        sys.stdout.write('import opendrive_parser_14H as model_\n\n')
+        sys.stdout.write('rootObj = model_.rootClass(\n')
+        rootObj.exportLiteral(sys.stdout, 0, name_=rootTag)
+        sys.stdout.write(')\n')
+    if print_warnings and len(gds_collector.get_messages()) > 0:
+        separator = ('-' * 50) + '\n'
+        sys.stderr.write(separator)
+        sys.stderr.write('----- Warnings -- count: {} -----\n'.format(
+            len(gds_collector.get_messages()), ))
+        gds_collector.write_messages(sys.stderr)
+        sys.stderr.write(separator)
+    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()
+
+RenameMappings_ = {
+}
+
+#
+# Mapping of namespaces to types defined in them
+# and the file in which each is defined.
+# simpleTypes are marked "ST" and complexTypes "CT".
+NamespaceToDefMappings_ = {}
+
+__all__ = [
+    "CRGType",
+    "OpenDRIVE",
+    "accessType",
+    "arcType",
+    "borderType",
+    "bridgeType3",
+    "centerLane",
+    "centerType",
+    "connectionType",
+    "controlType",
+    "controllerType",
+    "controllerType4",
+    "cornerLocalType",
+    "cornerRoadType",
+    "crossfallType",
+    "dependencyType",
+    "elevationProfileType",
+    "elevationType",
+    "geometryType",
+    "headerType",
+    "heightType",
+    "include",
+    "junctionGroupType5",
+    "junctionReferenceType",
+    "junctionType",
+    "lane",
+    "laneLinkType",
+    "laneOffsetType",
+    "laneSectionType",
+    "laneValidity",
+    "lanesType",
+    "lateralProfileType",
+    "leftType",
+    "lineType",
+    "lineType11",
+    "lineType19",
+    "linkType",
+    "linkType14",
+    "linkType7",
+    "mainTrackType",
+    "markingType",
+    "materialType",
+    "materialType12",
+    "neighborType",
+    "objectReferenceType",
+    "objectType",
+    "objectsType",
+    "outlineType",
+    "paramPoly3Type",
+    "parkingSpace",
+    "partnerType",
+    "planViewType",
+    "platformType",
+    "poly3Type",
+    "predecessorType",
+    "predecessorType15",
+    "predecessorType8",
+    "priorityType",
+    "railroadType",
+    "repeatType",
+    "rightType",
+    "roadMarkType",
+    "roadMarkType17",
+    "roadType1",
+    "ruleType",
+    "segmentType",
+    "shapeType",
+    "sideTrackType",
+    "signalReferenceType",
+    "signalType",
+    "signalsType",
+    "speedType",
+    "speedType13",
+    "spiralType",
+    "stationType6",
+    "successorType",
+    "successorType16",
+    "successorType9",
+    "superelevationType",
+    "surfaceType",
+    "switchType",
+    "tunnelType2",
+    "typeType",
+    "typeType10",
+    "typeType18",
+    "userData",
+    "visibilityType",
+    "widthType"
+]

+ 23046 - 0
src/tool/opendriveParser/opendrive_parser_15M.py

@@ -0,0 +1,23046 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+#
+# Generated Wed Aug  7 16:15:15 2019 by generateDS.py version 2.33.1.
+# Python 3.7.3 (default, Mar 27 2019, 22:11:17)  [GCC 7.3.0]
+#
+# Command line options:
+#   ('-o', 'opendrive_parser_15M.py')
+#
+# Command line arguments:
+#   OpenDRIVE_1.5M.xsd
+#
+# Command line:
+#   /home/wanhy/miniconda3/envs/carla/bin/generateDS.py -o "opendrive_parser_15M.py" OpenDRIVE_1.5M.xsd
+#
+# Current working directory (os.getcwd()):
+#   Entries
+#
+
+import os
+import sys
+import re as re_
+import base64
+import datetime as datetime_
+import warnings as warnings_
+import decimal as decimal_
+try:
+    from lxml import etree as etree_
+except ImportError:
+    from xml.etree import ElementTree as etree_
+
+
+Validate_simpletypes_ = True
+if sys.version_info.major == 2:
+    BaseStrType_ = basestring
+else:
+    BaseStrType_ = str
+
+
+def parsexml_(infile, parser=None, **kwargs):
+    if parser is None:
+        # Use the lxml ElementTree compatible parser so that, e.g.,
+        #   we ignore comments.
+        try:
+            parser = etree_.ETCompatXMLParser()
+        except AttributeError:
+            # fallback to xml.etree
+            parser = etree_.XMLParser()
+    try:
+        if isinstance(infile, os.PathLike):
+            infile = os.path.join(infile)
+    except AttributeError:
+        pass
+    doc = etree_.parse(infile, parser=parser, **kwargs)
+    return doc
+
+def parsexmlstring_(instring, parser=None, **kwargs):
+    if parser is None:
+        # Use the lxml ElementTree compatible parser so that, e.g.,
+        #   we ignore comments.
+        try:
+            parser = etree_.ETCompatXMLParser()
+        except AttributeError:
+            # fallback to xml.etree
+            parser = etree_.XMLParser()
+    element = etree_.fromstring(instring, parser=parser, **kwargs)
+    return element
+
+#
+# Namespace prefix definition table (and other attributes, too)
+#
+# The module generatedsnamespaces, if it is importable, must contain
+# a dictionary named GeneratedsNamespaceDefs.  This Python dictionary
+# should map element type names (strings) to XML schema namespace prefix
+# definitions.  The export method for any class for which there is
+# a namespace prefix definition, will export that definition in the
+# XML representation of that element.  See the export method of
+# any generated element type class for an example of the use of this
+# table.
+# A sample table is:
+#
+#     # File: generatedsnamespaces.py
+#
+#     GenerateDSNamespaceDefs = {
+#         "ElementtypeA": "http://www.xxx.com/namespaceA",
+#         "ElementtypeB": "http://www.xxx.com/namespaceB",
+#     }
+#
+# Additionally, the generatedsnamespaces module can contain a python
+# dictionary named GenerateDSNamespaceTypePrefixes that associates element
+# types with the namespace prefixes that are to be added to the
+# "xsi:type" attribute value.  See the exportAttributes method of
+# any generated element type and the generation of "xsi:type" for an
+# example of the use of this table.
+# An example table:
+#
+#     # File: generatedsnamespaces.py
+#
+#     GenerateDSNamespaceTypePrefixes = {
+#         "ElementtypeC": "aaa:",
+#         "ElementtypeD": "bbb:",
+#     }
+#
+
+try:
+    from generatedsnamespaces import GenerateDSNamespaceDefs as GenerateDSNamespaceDefs_
+except ImportError:
+    GenerateDSNamespaceDefs_ = {}
+try:
+    from generatedsnamespaces import GenerateDSNamespaceTypePrefixes as GenerateDSNamespaceTypePrefixes_
+except ImportError:
+    GenerateDSNamespaceTypePrefixes_ = {}
+
+#
+# The super-class for enum types
+#
+
+try:
+    from enum import Enum
+except ImportError:
+    Enum = object
+
+#
+# The root super-class for element type classes
+#
+# 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 as 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_parse_string(self, input_data, node=None, input_name=''):
+            return input_data
+        def gds_validate_string(self, input_data, node=None, 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=None, input_name=''):
+            return input_data
+        def gds_format_integer(self, input_data, input_name=''):
+            return '%d' % input_data
+        def gds_parse_integer(self, input_data, node=None, input_name=''):
+            try:
+                ival = int(input_data)
+            except (TypeError, ValueError) as exp:
+                raise_parse_error(node, 'requires integer: %s' % exp)
+            return ival
+        def gds_validate_integer(self, input_data, node=None, input_name=''):
+            return input_data
+        def gds_format_integer_list(self, input_data, input_name=''):
+            return '%s' % ' '.join(input_data)
+        def gds_validate_integer_list(
+                self, input_data, node=None, input_name=''):
+            values = input_data.split()
+            for value in values:
+                try:
+                    int(value)
+                except (TypeError, ValueError):
+                    raise_parse_error(node, 'Requires sequence of integers')
+            return values
+        def gds_format_float(self, input_data, input_name=''):
+            return ('%.15f' % input_data).rstrip('0')
+        def gds_parse_float(self, input_data, node=None, input_name=''):
+            try:
+                fval_ = float(input_data)
+            except (TypeError, ValueError) as exp:
+                raise_parse_error(node, 'requires float or double: %s' % exp)
+            return fval_
+        def gds_validate_float(self, input_data, node=None, input_name=''):
+            try:
+                value = float(input_data)
+            except (TypeError, ValueError):
+                raise_parse_error(node, 'Requires sequence of floats')
+            return value
+        def gds_format_float_list(self, input_data, input_name=''):
+            return '%s' % ' '.join(input_data)
+        def gds_validate_float_list(
+                self, input_data, node=None, 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 values
+        def gds_format_decimal(self, input_data, input_name=''):
+            return ('%0.10f' % input_data).rstrip('0')
+        def gds_parse_decimal(self, input_data, node=None, input_name=''):
+            try:
+                decimal_.Decimal(input_data)
+            except (TypeError, ValueError):
+                raise_parse_error(node, 'Requires decimal value')
+            return input_data
+        def gds_validate_decimal(self, input_data, node=None, input_name=''):
+            try:
+                value = decimal_.Decimal(input_data)
+            except (TypeError, ValueError):
+                raise_parse_error(node, 'Requires decimal value')
+            return value
+        def gds_format_decimal_list(self, input_data, input_name=''):
+            return '%s' % ' '.join(input_data)
+        def gds_validate_decimal_list(
+                self, input_data, node=None, input_name=''):
+            values = input_data.split()
+            for value in values:
+                try:
+                    decimal_.Decimal(value)
+                except (TypeError, ValueError):
+                    raise_parse_error(node, 'Requires sequence of decimal values')
+            return values
+        def gds_format_double(self, input_data, input_name=''):
+            return '%e' % input_data
+        def gds_parse_double(self, input_data, node=None, input_name=''):
+            try:
+                fval_ = float(input_data)
+            except (TypeError, ValueError) as exp:
+                raise_parse_error(node, 'requires float or double: %s' % exp)
+            return fval_
+        def gds_validate_double(self, input_data, node=None, input_name=''):
+            return input_data
+        def gds_format_double_list(self, input_data, input_name=''):
+            return '%s' % ' '.join(input_data)
+        def gds_validate_double_list(
+                self, input_data, node=None, 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 values
+        def gds_format_boolean(self, input_data, input_name=''):
+            return ('%s' % input_data).lower()
+        def gds_parse_boolean(self, input_data, node=None, input_name=''):
+            if input_data in ('true', '1'):
+                bval = True
+            elif input_data in ('false', '0'):
+                bval = False
+            else:
+                raise_parse_error(node, 'requires boolean')
+            return bval
+        def gds_validate_boolean(self, input_data, node=None, input_name=''):
+            return input_data
+        def gds_format_boolean_list(self, input_data, input_name=''):
+            return '%s' % ' '.join(input_data)
+        def gds_validate_boolean_list(
+                self, input_data, node=None, 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 values
+        def gds_validate_datetime(self, input_data, node=None, 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], "{}".format(micro_seconds).rjust(6, "0"), )
+                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=None, 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=None, 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
+        def gds_validate_simple_patterns(self, patterns, target):
+            # pat is a list of lists of strings/patterns.
+            # The target value must match at least one of the patterns
+            # in order for the test to succeed.
+            found1 = True
+            for patterns1 in patterns:
+                found2 = False
+                for patterns2 in patterns1:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
+                        found2 = True
+                        break
+                if not found2:
+                    found1 = False
+                    break
+            return found1
+        @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):
+            # provide default value in case option --disable-xml is used.
+            content = ""
+            content = etree_.tostring(node, encoding="unicode")
+            return content
+        @classmethod
+        def gds_reverse_node_mapping(cls, mapping):
+            return dict(((v, k) for k, v in mapping.items()))
+        @staticmethod
+        def gds_encode(instring):
+            if sys.version_info.major == 2:
+                if ExternalEncoding:
+                    encoding = ExternalEncoding
+                else:
+                    encoding = 'utf-8'
+                return instring.encode(encoding)
+            else:
+                return instring
+        @staticmethod
+        def convert_unicode(instring):
+            if isinstance(instring, str):
+                result = quote_xml(instring)
+            elif sys.version_info.major == 2 and isinstance(instring, unicode):
+                result = quote_xml(instring).encode('utf8')
+            else:
+                result = GeneratedsSuper.gds_encode(str(instring))
+            return result
+        def __eq__(self, other):
+            if type(self) != type(other):
+                return False
+            return self.__dict__ == other.__dict__
+        def __ne__(self, other):
+            return not self.__eq__(other)
+        # Django ETL transform hooks.
+        def gds_djo_etl_transform(self):
+            pass
+        def gds_djo_etl_transform_db_obj(self, dbobj):
+            pass
+        # SQLAlchemy ETL transform hooks.
+        def gds_sqa_etl_transform(self):
+            return 0, None
+        def gds_sqa_etl_transform_db_obj(self, dbobj):
+            pass
+    
+    
+    def getSubclassFromModule_(module, class_):
+        '''Get the subclass of a class from a specific module.'''
+        name = class_.__name__ + 'Sub'
+        if hasattr(module, name):
+            return getattr(module, name)
+        else:
+            return None
+
+
+#
+# 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 = ''
+# Set this to false in order to deactivate during export, the use of
+# name space prefixes captured from the input document.
+UseCapturedNS_ = True
+CapturedNsmap_ = {}
+Tag_pattern_ = re_.compile(r'({.*})?(.*)')
+String_cleanup_pat_ = re_.compile(r"[\n\r\s]+")
+Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)')
+CDATA_pattern_ = re_.compile(r"<!\[CDATA\[.*?\]\]>", re_.DOTALL)
+
+# Change this to redirect the generated superclass module to use a
+# specific subclass module.
+CurrentSubclassModule_ = None
+
+#
+# Support/utility functions.
+#
+
+
+def showIndent(outfile, level, pretty_print=True):
+    if pretty_print:
+        for idx in range(level):
+            outfile.write('    ')
+
+
+def quote_xml(inStr):
+    "Escape markup chars, but do not modify CDATA sections."
+    if not inStr:
+        return ''
+    s1 = (isinstance(inStr, BaseStrType_) and inStr or '%s' % inStr)
+    s2 = ''
+    pos = 0
+    matchobjects = CDATA_pattern_.finditer(s1)
+    for mo in matchobjects:
+        s3 = s1[pos:mo.start()]
+        s2 += quote_xml_aux(s3)
+        s2 += s1[mo.start():mo.end()]
+        pos = mo.end()
+    s3 = s1[pos:]
+    s2 += quote_xml_aux(s3)
+    return s2
+
+
+def quote_xml_aux(inStr):
+    s1 = inStr.replace('&', '&amp;')
+    s1 = s1.replace('<', '&lt;')
+    s1 = s1.replace('>', '&gt;')
+    return s1
+
+
+def quote_attrib(inStr):
+    s1 = (isinstance(inStr, BaseStrType_) 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 node is not None:
+        msg = '%s (element %s/line %d)' % (msg, node.tag, node.sourceline, )
+    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_=name,
+                pretty_print=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,
+            optional=0, child_attrs=None, choice=None):
+        self.name = name
+        self.data_type = data_type
+        self.container = container
+        self.child_attrs = child_attrs
+        self.choice = choice
+        self.optional = optional
+    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 set_child_attrs(self, child_attrs): self.child_attrs = child_attrs
+    def get_child_attrs(self): return self.child_attrs
+    def set_choice(self, choice): self.choice = choice
+    def get_choice(self): return self.choice
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
+
+
+def _cast(typ, value):
+    if typ is None or value is None:
+        return value
+    return typ(value)
+
+#
+# Data representation classes.
+#
+
+
+class e_accessRestrictionType(Enum):
+    SIMULATOR='simulator'
+    AUTONOMOUS_TRAFFIC='autonomousTraffic'
+    PEDESTRIAN='pedestrian'
+    PASSENGER_CAR='passengerCar'
+    BUS='bus'
+    DELIVERY='delivery'
+    EMERGENCY='emergency'
+    TAXI='taxi'
+    THROUGH_TRAFFIC='throughTraffic'
+    TRUCK='truck'
+    BICYCLE='bicycle'
+    MOTORCYCLE='motorcycle'
+    NONE='none'
+    TRUCKS='trucks'
+
+
+class e_borderType(Enum):
+    CONCRETE='concrete'
+    CURB='curb'
+
+
+class e_bridgeType(Enum):
+    CONCRETE='concrete'
+    STEEL='steel'
+    BRICK='brick'
+    WOOD='wood'
+
+
+class e_contactPoint(Enum):
+    START='start'
+    END='end'
+
+
+class e_countryCode_deprecated(Enum):
+    OPEN_DRIVE='OpenDRIVE'
+    AUSTRIA='Austria'
+    BRAZIL='Brazil'
+    CHINA='China'
+    FRANCE='France'
+    GERMANY='Germany'
+    ITALY='Italy'
+    SWITZERLAND='Switzerland'
+    USA='USA'
+
+
+class e_dataQuality_RawData_PostProcessing(Enum):
+    RAW='raw'
+    CLEANED='cleaned'
+    PROCESSED='processed'
+    FUSED='fused'
+
+
+class e_dataQuality_RawData_Source(Enum):
+    SENSOR='sensor'
+    CADASTER='cadaster'
+    CUSTOM='custom'
+
+
+class e_direction(Enum):
+    SAME='same'
+    OPPOSITE='opposite'
+
+
+class e_elementDir(Enum):
+    _='+'
+    __1='-'
+
+
+class e_junctionGroup_type(Enum):
+    ROUNDABOUT='roundabout'
+    UNKNOWN='unknown'
+
+
+class e_junction_type(Enum):
+    DEFAULT='default'
+    VIRTUAL='virtual'
+
+
+class e_laneType(Enum):
+    NONE='none'
+    DRIVING='driving'
+    STOP='stop'
+    SHOULDER='shoulder'
+    BIKING='biking'
+    SIDEWALK='sidewalk'
+    BORDER='border'
+    RESTRICTED='restricted'
+    PARKING='parking'
+    BIDIRECTIONAL='bidirectional'
+    MEDIAN='median'
+    SPECIAL_1='special1'
+    SPECIAL_2='special2'
+    SPECIAL_3='special3'
+    ROAD_WORKS='roadWorks'
+    TRAM='tram'
+    RAIL='rail'
+    ENTRY='entry'
+    EXIT='exit'
+    OFF_RAMP='offRamp'
+    ON_RAMP='onRamp'
+    CONNECTING_RAMP='connectingRamp'
+    BUS='bus'
+    TAXI='taxi'
+    HOV='HOV'
+    MWY_ENTRY='mwyEntry'
+    MWY_EXIT='mwyExit'
+
+
+class e_maxSpeedString(Enum):
+    NOLIMIT='no limit'
+    UNDEFINED='undefined'
+
+
+class e_objectType(Enum):
+    NONE='none'
+    OBSTACLE='obstacle'
+    CAR='car'
+    POLE='pole'
+    TREE='tree'
+    VEGETATION='vegetation'
+    BARRIER='barrier'
+    BUILDING='building'
+    PARKING_SPACE='parkingSpace'
+    PATCH='patch'
+    RAILING='railing'
+    TRAFFIC_ISLAND='trafficIsland'
+    CROSSWALK='crosswalk'
+    STREET_LAMP='streetLamp'
+    GANTRY='gantry'
+    SOUND_BARRIER='soundBarrier'
+    TRUCK='truck'
+    VAN='van'
+    BUS='bus'
+    TRAILER='trailer'
+    BIKE='bike'
+    MOTORBIKE='motorbike'
+    TRAM='tram'
+    TRAIN='train'
+    PEDESTRIAN='pedestrian'
+    WIND='wind'
+
+
+class e_orientation(Enum):
+    _='+'
+    __1='-'
+    NONE='none'
+
+
+class e_outlineFillType(Enum):
+    GRASS='grass'
+    CONCRETE='concrete'
+    COBBLE='cobble'
+    ASPHALT='asphalt'
+    PAVEMENT='pavement'
+    GRAVEL='gravel'
+    SOIL='soil'
+
+
+class e_paramPoly3_pRange(Enum):
+    ARC_LENGTH='arcLength'
+    NORMALIZED='normalized'
+
+
+class e_roadMarkColor(Enum):
+    STANDARD='standard'
+    BLUE='blue'
+    GREEN='green'
+    RED='red'
+    WHITE='white'
+    YELLOW='yellow'
+    ORANGE='orange'
+
+
+class e_roadMarkRule(Enum):
+    NOPASSING='no passing'
+    CAUTION='caution'
+    NONE='none'
+
+
+class e_roadMarkType(Enum):
+    NONE='none'
+    SOLID='solid'
+    BROKEN='broken'
+    SOLIDSOLID='solid solid'
+    SOLIDBROKEN='solid broken'
+    BROKENSOLID='broken solid'
+    BROKENBROKEN='broken broken'
+    BOTTSDOTS='botts dots'
+    GRASS='grass'
+    CURB='curb'
+    CUSTOM='custom'
+    EDGE='edge'
+
+
+class e_roadMarkWeight(Enum):
+    STANDARD='standard'
+    BOLD='bold'
+
+
+class e_roadType(Enum):
+    UNKNOWN='unknown'
+    RURAL='rural'
+    MOTORWAY='motorway'
+    TOWN='town'
+    LOW_SPEED='lowSpeed'
+    PEDESTRIAN='pedestrian'
+    BICYCLE='bicycle'
+    TOWN_EXPRESSWAY='townExpressway'
+    TOWN_COLLECTOR='townCollector'
+    TOWN_ARTERIAL='townArterial'
+    TOWN_PRIVATE='townPrivate'
+    TOWN_LOCAL='townLocal'
+    TOWN_PLAY_STREET='townPlayStreet'
+
+
+class e_road_lanes_laneSection_lcr_lane_roadMark_laneChange(Enum):
+    INCREASE='increase'
+    DECREASE='decrease'
+    BOTH='both'
+    NONE='none'
+
+
+class e_road_lanes_laneSection_lr_lane_access_rule(Enum):
+    ALLOW='allow'
+    DENY='deny'
+
+
+class e_road_lateralProfile_crossfall_side(Enum):
+    LEFT='left'
+    RIGHT='right'
+    BOTH='both'
+
+
+class e_road_link_elementType(Enum):
+    ROAD='road'
+    JUNCTION='junction'
+
+
+class e_road_link_neighbor_side(Enum):
+    LEFT='left'
+    RIGHT='right'
+
+
+class e_road_objects_object_parkingSpace_access(Enum):
+    ALL='all'
+    CAR='car'
+    WOMEN='women'
+    HANDICAPPED='handicapped'
+    BUS='bus'
+    TRUCK='truck'
+    ELECTRIC='electric'
+    RESIDENTS='residents'
+
+
+class e_road_railroad_switch_position(Enum):
+    DYNAMIC='dynamic'
+    STRAIGHT='straight'
+    TURN='turn'
+
+
+class e_road_signals_signal_reference_elementType(Enum):
+    OBJECT='object'
+    SIGNAL='signal'
+
+
+class e_road_surface_CRG_mode(Enum):
+    ATTACHED='attached'
+    ATTACHED_0='attached0'
+    GENUINE='genuine'
+    GLOBAL='global'
+
+
+class e_road_surface_CRG_purpose(Enum):
+    ELEVATION='elevation'
+    FRICTION='friction'
+
+
+class e_sideType(Enum):
+    LEFT='left'
+    RIGHT='right'
+    FRONT='front'
+    REAR='rear'
+
+
+class e_station_platform_segment_side(Enum):
+    LEFT='left'
+    RIGHT='right'
+
+
+class e_station_type(Enum):
+    SMALL='small'
+    MEDIUM='medium'
+    LARGE='large'
+
+
+class e_trafficRule(Enum):
+    RHT='RHT'
+    LHT='LHT'
+
+
+class e_tunnelType(Enum):
+    STANDARD='standard'
+    UNDERPASS='underpass'
+
+
+class e_unitDistance(Enum):
+    M='m'
+    KM='km'
+    FT='ft'
+    MILE='mile'
+
+
+class e_unitMass(Enum):
+    KG='kg'
+    T='t'
+
+
+class e_unitSlope(Enum):
+    _='%'
+
+
+class e_unitSpeed(Enum):
+    MS='m/s'
+    MPH='mph'
+    KMH='km/h'
+
+
+class t_bool(Enum):
+    TRUE='true'
+    FALSE='false'
+
+
+class t_yesNo(Enum):
+    YES='yes'
+    NO='no'
+
+
+class OpenDRIVE(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, header=None, road=None, controller=None, junction=None, junctionGroup=None, station=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.header = header
+        self.header_nsprefix_ = None
+        if road is None:
+            self.road = []
+        else:
+            self.road = road
+        self.road_nsprefix_ = None
+        if controller is None:
+            self.controller = []
+        else:
+            self.controller = controller
+        self.controller_nsprefix_ = None
+        if junction is None:
+            self.junction = []
+        else:
+            self.junction = junction
+        self.junction_nsprefix_ = None
+        if junctionGroup is None:
+            self.junctionGroup = []
+        else:
+            self.junctionGroup = junctionGroup
+        self.junctionGroup_nsprefix_ = None
+        if station is None:
+            self.station = []
+        else:
+            self.station = station
+        self.station_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, OpenDRIVE)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if OpenDRIVE.subclass:
+            return OpenDRIVE.subclass(*args_, **kwargs_)
+        else:
+            return OpenDRIVE(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_header(self):
+        return self.header
+    def set_header(self, header):
+        self.header = header
+    def get_road(self):
+        return self.road
+    def set_road(self, road):
+        self.road = road
+    def add_road(self, value):
+        self.road.append(value)
+    def insert_road_at(self, index, value):
+        self.road.insert(index, value)
+    def replace_road_at(self, index, value):
+        self.road[index] = value
+    def get_controller(self):
+        return self.controller
+    def set_controller(self, controller):
+        self.controller = controller
+    def add_controller(self, value):
+        self.controller.append(value)
+    def insert_controller_at(self, index, value):
+        self.controller.insert(index, value)
+    def replace_controller_at(self, index, value):
+        self.controller[index] = value
+    def get_junction(self):
+        return self.junction
+    def set_junction(self, junction):
+        self.junction = junction
+    def add_junction(self, value):
+        self.junction.append(value)
+    def insert_junction_at(self, index, value):
+        self.junction.insert(index, value)
+    def replace_junction_at(self, index, value):
+        self.junction[index] = value
+    def get_junctionGroup(self):
+        return self.junctionGroup
+    def set_junctionGroup(self, junctionGroup):
+        self.junctionGroup = junctionGroup
+    def add_junctionGroup(self, value):
+        self.junctionGroup.append(value)
+    def insert_junctionGroup_at(self, index, value):
+        self.junctionGroup.insert(index, value)
+    def replace_junctionGroup_at(self, index, value):
+        self.junctionGroup[index] = value
+    def get_station(self):
+        return self.station
+    def set_station(self, station):
+        self.station = station
+    def add_station(self, value):
+        self.station.append(value)
+    def insert_station_at(self, index, value):
+        self.station.insert(index, value)
+    def replace_station_at(self, index, value):
+        self.station[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.header is not None or
+            self.road or
+            self.controller or
+            self.junction or
+            self.junctionGroup or
+            self.station or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='OpenDRIVE', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('OpenDRIVE')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='OpenDRIVE')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='OpenDRIVE', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='OpenDRIVE'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='OpenDRIVE', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.header is not None:
+            namespaceprefix_ = self.header_nsprefix_ + ':' if (UseCapturedNS_ and self.header_nsprefix_) else ''
+            self.header.export(outfile, level, namespaceprefix_, namespacedef_='', name_='header', pretty_print=pretty_print)
+        for road_ in self.road:
+            namespaceprefix_ = self.road_nsprefix_ + ':' if (UseCapturedNS_ and self.road_nsprefix_) else ''
+            road_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='road', pretty_print=pretty_print)
+        for controller_ in self.controller:
+            namespaceprefix_ = self.controller_nsprefix_ + ':' if (UseCapturedNS_ and self.controller_nsprefix_) else ''
+            controller_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='controller', pretty_print=pretty_print)
+        for junction_ in self.junction:
+            namespaceprefix_ = self.junction_nsprefix_ + ':' if (UseCapturedNS_ and self.junction_nsprefix_) else ''
+            junction_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='junction', pretty_print=pretty_print)
+        for junctionGroup_ in self.junctionGroup:
+            namespaceprefix_ = self.junctionGroup_nsprefix_ + ':' if (UseCapturedNS_ and self.junctionGroup_nsprefix_) else ''
+            junctionGroup_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='junctionGroup', pretty_print=pretty_print)
+        for station_ in self.station:
+            namespaceprefix_ = self.station_nsprefix_ + ':' if (UseCapturedNS_ and self.station_nsprefix_) else ''
+            station_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='station', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'header':
+            obj_ = t_header.factory(parent_object_=self)
+            obj_.build(child_)
+            self.header = obj_
+            obj_.original_tagname_ = 'header'
+        elif nodeName_ == 'road':
+            obj_ = t_road.factory(parent_object_=self)
+            obj_.build(child_)
+            self.road.append(obj_)
+            obj_.original_tagname_ = 'road'
+        elif nodeName_ == 'controller':
+            obj_ = t_controller.factory(parent_object_=self)
+            obj_.build(child_)
+            self.controller.append(obj_)
+            obj_.original_tagname_ = 'controller'
+        elif nodeName_ == 'junction':
+            obj_ = t_junction.factory(parent_object_=self)
+            obj_.build(child_)
+            self.junction.append(obj_)
+            obj_.original_tagname_ = 'junction'
+        elif nodeName_ == 'junctionGroup':
+            obj_ = t_junctionGroup.factory(parent_object_=self)
+            obj_.build(child_)
+            self.junctionGroup.append(obj_)
+            obj_.original_tagname_ = 'junctionGroup'
+        elif nodeName_ == 'station':
+            obj_ = t_station.factory(parent_object_=self)
+            obj_.build(child_)
+            self.station.append(obj_)
+            obj_.original_tagname_ = 'station'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class OpenDRIVE
+
+
+class t_header(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, revMajor=1, revMinor=5, name=None, version=None, date=None, north=None, south=None, east=None, west=None, vendor=None, geoReference=None, offset=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.revMajor = _cast(int, revMajor)
+        self.revMajor_nsprefix_ = None
+        self.revMinor = _cast(int, revMinor)
+        self.revMinor_nsprefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.version = _cast(float, version)
+        self.version_nsprefix_ = None
+        self.date = _cast(None, date)
+        self.date_nsprefix_ = None
+        self.north = _cast(float, north)
+        self.north_nsprefix_ = None
+        self.south = _cast(float, south)
+        self.south_nsprefix_ = None
+        self.east = _cast(float, east)
+        self.east_nsprefix_ = None
+        self.west = _cast(float, west)
+        self.west_nsprefix_ = None
+        self.vendor = _cast(None, vendor)
+        self.vendor_nsprefix_ = None
+        self.geoReference = geoReference
+        self.geoReference_nsprefix_ = None
+        self.offset = offset
+        self.offset_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_header)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_header.subclass:
+            return t_header.subclass(*args_, **kwargs_)
+        else:
+            return t_header(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_geoReference(self):
+        return self.geoReference
+    def set_geoReference(self, geoReference):
+        self.geoReference = geoReference
+    def get_offset(self):
+        return self.offset
+    def set_offset(self, offset):
+        self.offset = offset
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_revMajor(self):
+        return self.revMajor
+    def set_revMajor(self, revMajor):
+        self.revMajor = revMajor
+    def get_revMinor(self):
+        return self.revMinor
+    def set_revMinor(self, revMinor):
+        self.revMinor = revMinor
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_version(self):
+        return self.version
+    def set_version(self, version):
+        self.version = version
+    def get_date(self):
+        return self.date
+    def set_date(self, date):
+        self.date = date
+    def get_north(self):
+        return self.north
+    def set_north(self, north):
+        self.north = north
+    def get_south(self):
+        return self.south
+    def set_south(self, south):
+        self.south = south
+    def get_east(self):
+        return self.east
+    def set_east(self, east):
+        self.east = east
+    def get_west(self):
+        return self.west
+    def set_west(self, west):
+        self.west = west
+    def get_vendor(self):
+        return self.vendor
+    def set_vendor(self, vendor):
+        self.vendor = vendor
+    def validate_t_header_Version(self, value):
+        # Validate type t_header_Version, a restriction on xs:float.
+        if value is not None and Validate_simpletypes_:
+            if not self.gds_validate_simple_patterns(
+                    self.validate_t_header_Version_patterns_, value):
+                warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_t_header_Version_patterns_, ))
+    validate_t_header_Version_patterns_ = [['^(\\d\\.\\d{2})$']]
+    def hasContent_(self):
+        if (
+            self.geoReference is not None or
+            self.offset is not None or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_header', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_header')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_header')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_header', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_header'):
+        if 'revMajor' not in already_processed:
+            already_processed.add('revMajor')
+            outfile.write(' revMajor="%s"' % self.gds_format_integer(self.revMajor, input_name='revMajor'))
+        if 'revMinor' not in already_processed:
+            already_processed.add('revMinor')
+            outfile.write(' revMinor="%s"' % self.gds_format_integer(self.revMinor, input_name='revMinor'))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.version is not None and 'version' not in already_processed:
+            already_processed.add('version')
+            outfile.write(' version="%s"' % self.gds_format_float(self.version, input_name='version'))
+        if self.date is not None and 'date' not in already_processed:
+            already_processed.add('date')
+            outfile.write(' date=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.date), input_name='date')), ))
+        if self.north is not None and 'north' not in already_processed:
+            already_processed.add('north')
+            outfile.write(' north="%s"' % self.gds_format_double(self.north, input_name='north'))
+        if self.south is not None and 'south' not in already_processed:
+            already_processed.add('south')
+            outfile.write(' south="%s"' % self.gds_format_double(self.south, input_name='south'))
+        if self.east is not None and 'east' not in already_processed:
+            already_processed.add('east')
+            outfile.write(' east="%s"' % self.gds_format_double(self.east, input_name='east'))
+        if self.west is not None and 'west' not in already_processed:
+            already_processed.add('west')
+            outfile.write(' west="%s"' % self.gds_format_double(self.west, input_name='west'))
+        if self.vendor is not None and 'vendor' not in already_processed:
+            already_processed.add('vendor')
+            outfile.write(' vendor=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.vendor), input_name='vendor')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_header', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.geoReference is not None:
+            namespaceprefix_ = self.geoReference_nsprefix_ + ':' if (UseCapturedNS_ and self.geoReference_nsprefix_) else ''
+            self.geoReference.export(outfile, level, namespaceprefix_, namespacedef_='', name_='geoReference', pretty_print=pretty_print)
+        if self.offset is not None:
+            namespaceprefix_ = self.offset_nsprefix_ + ':' if (UseCapturedNS_ and self.offset_nsprefix_) else ''
+            self.offset.export(outfile, level, namespaceprefix_, namespacedef_='', name_='offset', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('revMajor', node)
+        if value is not None and 'revMajor' not in already_processed:
+            already_processed.add('revMajor')
+            try:
+                self.revMajor = int(value)
+            except ValueError as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+        value = find_attr_value_('revMinor', node)
+        if value is not None and 'revMinor' not in already_processed:
+            already_processed.add('revMinor')
+            try:
+                self.revMinor = int(value)
+            except ValueError as 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
+        value = find_attr_value_('version', node)
+        if value is not None and 'version' not in already_processed:
+            already_processed.add('version')
+            try:
+                self.version = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (version): %s' % exp)
+            self.validate_t_header_Version(self.version)    # validate type t_header_Version
+        value = find_attr_value_('date', node)
+        if value is not None and 'date' not in already_processed:
+            already_processed.add('date')
+            self.date = value
+        value = find_attr_value_('north', node)
+        if value is not None and 'north' not in already_processed:
+            already_processed.add('north')
+            try:
+                self.north = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (north): %s' % exp)
+        value = find_attr_value_('south', node)
+        if value is not None and 'south' not in already_processed:
+            already_processed.add('south')
+            try:
+                self.south = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (south): %s' % exp)
+        value = find_attr_value_('east', node)
+        if value is not None and 'east' not in already_processed:
+            already_processed.add('east')
+            try:
+                self.east = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (east): %s' % exp)
+        value = find_attr_value_('west', node)
+        if value is not None and 'west' not in already_processed:
+            already_processed.add('west')
+            try:
+                self.west = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (west): %s' % exp)
+        value = find_attr_value_('vendor', node)
+        if value is not None and 'vendor' not in already_processed:
+            already_processed.add('vendor')
+            self.vendor = value
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'geoReference':
+            obj_ = t_header_GeoReference.factory(parent_object_=self)
+            obj_.build(child_)
+            self.geoReference = obj_
+            obj_.original_tagname_ = 'geoReference'
+        elif nodeName_ == 'offset':
+            obj_ = t_header_Offset.factory(parent_object_=self)
+            obj_.build(child_)
+            self.offset = obj_
+            obj_.original_tagname_ = 'offset'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_header
+
+
+class t_header_GeoReference(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, userData=None, include=None, dataQuality=None, valueOf_=None, mixedclass_=None, content_=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+        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 CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_header_GeoReference)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_header_GeoReference.subclass:
+            return t_header_GeoReference.subclass(*args_, **kwargs_)
+        else:
+            return t_header_GeoReference(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_valueOf_(self): return self.valueOf_
+    def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None or
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_header_GeoReference', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_header_GeoReference')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_header_GeoReference')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_header_GeoReference', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_header_GeoReference'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_header_GeoReference', fromsubclass_=False, pretty_print=True):
+        if not fromsubclass_:
+            for item_ in self.content_:
+                item_.export(outfile, level, item_.name, namespaceprefix_, pretty_print=pretty_print)
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            obj_ = self.mixedclass_(MixedContainer.CategoryComplex,
+                MixedContainer.TypeNone, 'userData', obj_)
+            self.content_.append(obj_)
+            if hasattr(self, 'add_userData'):
+              self.add_userData(obj_.value)
+            elif hasattr(self, 'set_userData'):
+              self.set_userData(obj_.value)
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            obj_ = self.mixedclass_(MixedContainer.CategoryComplex,
+                MixedContainer.TypeNone, 'include', obj_)
+            self.content_.append(obj_)
+            if hasattr(self, 'add_include'):
+              self.add_include(obj_.value)
+            elif hasattr(self, 'set_include'):
+              self.set_include(obj_.value)
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            obj_ = self.mixedclass_(MixedContainer.CategoryComplex,
+                MixedContainer.TypeNone, 'dataQuality', obj_)
+            self.content_.append(obj_)
+            if hasattr(self, 'add_dataQuality'):
+              self.add_dataQuality(obj_.value)
+            elif hasattr(self, 'set_dataQuality'):
+              self.set_dataQuality(obj_.value)
+        if not fromsubclass_ and child_.tail is not None:
+            obj_ = self.mixedclass_(MixedContainer.CategoryText,
+                MixedContainer.TypeNone, '', child_.tail)
+            self.content_.append(obj_)
+# end class t_header_GeoReference
+
+
+class t_header_Offset(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, x=None, y=None, z=None, hdg=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.x = _cast(float, x)
+        self.x_nsprefix_ = None
+        self.y = _cast(float, y)
+        self.y_nsprefix_ = None
+        self.z = _cast(float, z)
+        self.z_nsprefix_ = None
+        self.hdg = _cast(float, hdg)
+        self.hdg_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_header_Offset)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_header_Offset.subclass:
+            return t_header_Offset.subclass(*args_, **kwargs_)
+        else:
+            return t_header_Offset(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_x(self):
+        return self.x
+    def set_x(self, x):
+        self.x = x
+    def get_y(self):
+        return self.y
+    def set_y(self, y):
+        self.y = y
+    def get_z(self):
+        return self.z
+    def set_z(self, z):
+        self.z = z
+    def get_hdg(self):
+        return self.hdg
+    def set_hdg(self, hdg):
+        self.hdg = hdg
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_header_Offset', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_header_Offset')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_header_Offset')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_header_Offset', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_header_Offset'):
+        if 'x' not in already_processed:
+            already_processed.add('x')
+            outfile.write(' x="%s"' % self.gds_format_double(self.x, input_name='x'))
+        if 'y' not in already_processed:
+            already_processed.add('y')
+            outfile.write(' y="%s"' % self.gds_format_double(self.y, input_name='y'))
+        if 'z' not in already_processed:
+            already_processed.add('z')
+            outfile.write(' z="%s"' % self.gds_format_double(self.z, input_name='z'))
+        if 'hdg' not in already_processed:
+            already_processed.add('hdg')
+            outfile.write(' hdg="%s"' % self.gds_format_float(self.hdg, input_name='hdg'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_header_Offset', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('x', node)
+        if value is not None and 'x' not in already_processed:
+            already_processed.add('x')
+            try:
+                self.x = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (x): %s' % exp)
+        value = find_attr_value_('y', node)
+        if value is not None and 'y' not in already_processed:
+            already_processed.add('y')
+            try:
+                self.y = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (y): %s' % exp)
+        value = find_attr_value_('z', node)
+        if value is not None and 'z' not in already_processed:
+            already_processed.add('z')
+            try:
+                self.z = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (z): %s' % exp)
+        value = find_attr_value_('hdg', node)
+        if value is not None and 'hdg' not in already_processed:
+            already_processed.add('hdg')
+            try:
+                self.hdg = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (hdg): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_header_Offset
+
+
+class t_road(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, length=None, id=None, junction=None, rule=None, link=None, type_=None, planView=None, elevationProfile=None, lateralProfile=None, lanes=None, objects=None, signals=None, surface=None, railroad=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.junction = _cast(None, junction)
+        self.junction_nsprefix_ = None
+        self.rule = _cast(None, rule)
+        self.rule_nsprefix_ = None
+        self.link = link
+        self.link_nsprefix_ = None
+        if type_ is None:
+            self.type_ = []
+        else:
+            self.type_ = type_
+        self.type__nsprefix_ = None
+        self.planView = planView
+        self.planView_nsprefix_ = None
+        self.elevationProfile = elevationProfile
+        self.elevationProfile_nsprefix_ = None
+        self.lateralProfile = lateralProfile
+        self.lateralProfile_nsprefix_ = None
+        self.lanes = lanes
+        self.lanes_nsprefix_ = None
+        self.objects = objects
+        self.objects_nsprefix_ = None
+        self.signals = signals
+        self.signals_nsprefix_ = None
+        self.surface = surface
+        self.surface_nsprefix_ = None
+        self.railroad = railroad
+        self.railroad_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road.subclass:
+            return t_road.subclass(*args_, **kwargs_)
+        else:
+            return t_road(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_link(self):
+        return self.link
+    def set_link(self, link):
+        self.link = link
+    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_planView(self):
+        return self.planView
+    def set_planView(self, planView):
+        self.planView = planView
+    def get_elevationProfile(self):
+        return self.elevationProfile
+    def set_elevationProfile(self, elevationProfile):
+        self.elevationProfile = elevationProfile
+    def get_lateralProfile(self):
+        return self.lateralProfile
+    def set_lateralProfile(self, lateralProfile):
+        self.lateralProfile = lateralProfile
+    def get_lanes(self):
+        return self.lanes
+    def set_lanes(self, lanes):
+        self.lanes = lanes
+    def get_objects(self):
+        return self.objects
+    def set_objects(self, objects):
+        self.objects = objects
+    def get_signals(self):
+        return self.signals
+    def set_signals(self, signals):
+        self.signals = signals
+    def get_surface(self):
+        return self.surface
+    def set_surface(self, surface):
+        self.surface = surface
+    def get_railroad(self):
+        return self.railroad
+    def set_railroad(self, railroad):
+        self.railroad = railroad
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_junction(self):
+        return self.junction
+    def set_junction(self, junction):
+        self.junction = junction
+    def get_rule(self):
+        return self.rule
+    def set_rule(self, rule):
+        self.rule = rule
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_trafficRule(self, value):
+        # Validate type e_trafficRule, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['RHT', 'LHT']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_trafficRule' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.link is not None or
+            self.type_ or
+            self.planView is not None or
+            self.elevationProfile is not None or
+            self.lateralProfile is not None or
+            self.lanes is not None or
+            self.objects is not None or
+            self.signals is not None or
+            self.surface is not None or
+            self.railroad is not None or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road'):
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if 'junction' not in already_processed:
+            already_processed.add('junction')
+            outfile.write(' junction=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.junction), input_name='junction')), ))
+        if self.rule is not None and 'rule' not in already_processed:
+            already_processed.add('rule')
+            outfile.write(' rule=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.rule), input_name='rule')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.link is not None:
+            namespaceprefix_ = self.link_nsprefix_ + ':' if (UseCapturedNS_ and self.link_nsprefix_) else ''
+            self.link.export(outfile, level, namespaceprefix_, namespacedef_='', name_='link', pretty_print=pretty_print)
+        for type_ in self.type_:
+            namespaceprefix_ = self.type__nsprefix_ + ':' if (UseCapturedNS_ and self.type__nsprefix_) else ''
+            type_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='type', pretty_print=pretty_print)
+        if self.planView is not None:
+            namespaceprefix_ = self.planView_nsprefix_ + ':' if (UseCapturedNS_ and self.planView_nsprefix_) else ''
+            self.planView.export(outfile, level, namespaceprefix_, namespacedef_='', name_='planView', pretty_print=pretty_print)
+        if self.elevationProfile is not None:
+            namespaceprefix_ = self.elevationProfile_nsprefix_ + ':' if (UseCapturedNS_ and self.elevationProfile_nsprefix_) else ''
+            self.elevationProfile.export(outfile, level, namespaceprefix_, namespacedef_='', name_='elevationProfile', pretty_print=pretty_print)
+        if self.lateralProfile is not None:
+            namespaceprefix_ = self.lateralProfile_nsprefix_ + ':' if (UseCapturedNS_ and self.lateralProfile_nsprefix_) else ''
+            self.lateralProfile.export(outfile, level, namespaceprefix_, namespacedef_='', name_='lateralProfile', pretty_print=pretty_print)
+        if self.lanes is not None:
+            namespaceprefix_ = self.lanes_nsprefix_ + ':' if (UseCapturedNS_ and self.lanes_nsprefix_) else ''
+            self.lanes.export(outfile, level, namespaceprefix_, namespacedef_='', name_='lanes', pretty_print=pretty_print)
+        if self.objects is not None:
+            namespaceprefix_ = self.objects_nsprefix_ + ':' if (UseCapturedNS_ and self.objects_nsprefix_) else ''
+            self.objects.export(outfile, level, namespaceprefix_, namespacedef_='', name_='objects', pretty_print=pretty_print)
+        if self.signals is not None:
+            namespaceprefix_ = self.signals_nsprefix_ + ':' if (UseCapturedNS_ and self.signals_nsprefix_) else ''
+            self.signals.export(outfile, level, namespaceprefix_, namespacedef_='', name_='signals', pretty_print=pretty_print)
+        if self.surface is not None:
+            namespaceprefix_ = self.surface_nsprefix_ + ':' if (UseCapturedNS_ and self.surface_nsprefix_) else ''
+            self.surface.export(outfile, level, namespaceprefix_, namespacedef_='', name_='surface', pretty_print=pretty_print)
+        if self.railroad is not None:
+            namespaceprefix_ = self.railroad_nsprefix_ + ':' if (UseCapturedNS_ and self.railroad_nsprefix_) else ''
+            self.railroad.export(outfile, level, namespaceprefix_, namespacedef_='', name_='railroad', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('name', node)
+        if value is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            self.name = value
+        value = find_attr_value_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            try:
+                self.length = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (length): %s' % exp)
+            self.validate_t_grEqZero(self.length)    # validate type t_grEqZero
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+        value = find_attr_value_('junction', node)
+        if value is not None and 'junction' not in already_processed:
+            already_processed.add('junction')
+            self.junction = value
+        value = find_attr_value_('rule', node)
+        if value is not None and 'rule' not in already_processed:
+            already_processed.add('rule')
+            self.rule = value
+            self.validate_e_trafficRule(self.rule)    # validate type e_trafficRule
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'link':
+            obj_ = t_road_link.factory(parent_object_=self)
+            obj_.build(child_)
+            self.link = obj_
+            obj_.original_tagname_ = 'link'
+        elif nodeName_ == 'type':
+            obj_ = t_road_type.factory(parent_object_=self)
+            obj_.build(child_)
+            self.type_.append(obj_)
+            obj_.original_tagname_ = 'type'
+        elif nodeName_ == 'planView':
+            obj_ = t_road_planView.factory(parent_object_=self)
+            obj_.build(child_)
+            self.planView = obj_
+            obj_.original_tagname_ = 'planView'
+        elif nodeName_ == 'elevationProfile':
+            obj_ = t_road_elevationProfile.factory(parent_object_=self)
+            obj_.build(child_)
+            self.elevationProfile = obj_
+            obj_.original_tagname_ = 'elevationProfile'
+        elif nodeName_ == 'lateralProfile':
+            obj_ = t_road_lateralProfile.factory(parent_object_=self)
+            obj_.build(child_)
+            self.lateralProfile = obj_
+            obj_.original_tagname_ = 'lateralProfile'
+        elif nodeName_ == 'lanes':
+            obj_ = t_road_lanes.factory(parent_object_=self)
+            obj_.build(child_)
+            self.lanes = obj_
+            obj_.original_tagname_ = 'lanes'
+        elif nodeName_ == 'objects':
+            obj_ = t_road_objects.factory(parent_object_=self)
+            obj_.build(child_)
+            self.objects = obj_
+            obj_.original_tagname_ = 'objects'
+        elif nodeName_ == 'signals':
+            obj_ = t_road_signals.factory(parent_object_=self)
+            obj_.build(child_)
+            self.signals = obj_
+            obj_.original_tagname_ = 'signals'
+        elif nodeName_ == 'surface':
+            obj_ = t_road_surface.factory(parent_object_=self)
+            obj_.build(child_)
+            self.surface = obj_
+            obj_.original_tagname_ = 'surface'
+        elif nodeName_ == 'railroad':
+            obj_ = t_road_railroad.factory(parent_object_=self)
+            obj_.build(child_)
+            self.railroad = obj_
+            obj_.original_tagname_ = 'railroad'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road
+
+
+class t_road_link(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, predecessor=None, successor=None, neighbor=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.predecessor = predecessor
+        self.predecessor_nsprefix_ = None
+        self.successor = successor
+        self.successor_nsprefix_ = None
+        if neighbor is None:
+            self.neighbor = []
+        else:
+            self.neighbor = neighbor
+        self.neighbor_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_link)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_link.subclass:
+            return t_road_link.subclass(*args_, **kwargs_)
+        else:
+            return t_road_link(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_predecessor(self):
+        return self.predecessor
+    def set_predecessor(self, predecessor):
+        self.predecessor = predecessor
+    def get_successor(self):
+        return self.successor
+    def set_successor(self, successor):
+        self.successor = successor
+    def get_neighbor(self):
+        return self.neighbor
+    def set_neighbor(self, neighbor):
+        self.neighbor = neighbor
+    def add_neighbor(self, value):
+        self.neighbor.append(value)
+    def insert_neighbor_at(self, index, value):
+        self.neighbor.insert(index, value)
+    def replace_neighbor_at(self, index, value):
+        self.neighbor[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.predecessor is not None or
+            self.successor is not None or
+            self.neighbor or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_link', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_link')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_link')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_link', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_link'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_link', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.predecessor is not None:
+            namespaceprefix_ = self.predecessor_nsprefix_ + ':' if (UseCapturedNS_ and self.predecessor_nsprefix_) else ''
+            self.predecessor.export(outfile, level, namespaceprefix_, namespacedef_='', name_='predecessor', pretty_print=pretty_print)
+        if self.successor is not None:
+            namespaceprefix_ = self.successor_nsprefix_ + ':' if (UseCapturedNS_ and self.successor_nsprefix_) else ''
+            self.successor.export(outfile, level, namespaceprefix_, namespacedef_='', name_='successor', pretty_print=pretty_print)
+        for neighbor_ in self.neighbor:
+            namespaceprefix_ = self.neighbor_nsprefix_ + ':' if (UseCapturedNS_ and self.neighbor_nsprefix_) else ''
+            neighbor_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='neighbor', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'predecessor':
+            obj_ = t_road_link_predecessorSuccessor.factory(parent_object_=self)
+            obj_.build(child_)
+            self.predecessor = obj_
+            obj_.original_tagname_ = 'predecessor'
+        elif nodeName_ == 'successor':
+            obj_ = t_road_link_predecessorSuccessor.factory(parent_object_=self)
+            obj_.build(child_)
+            self.successor = obj_
+            obj_.original_tagname_ = 'successor'
+        elif nodeName_ == 'neighbor':
+            obj_ = t_road_link_neighbor.factory(parent_object_=self)
+            obj_.build(child_)
+            self.neighbor.append(obj_)
+            obj_.original_tagname_ = 'neighbor'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_link
+
+
+class t_road_link_predecessorSuccessor(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, elementType=None, elementId=None, contactPoint=None, elementS=None, elementDir=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.elementType = _cast(None, elementType)
+        self.elementType_nsprefix_ = None
+        self.elementId = _cast(None, elementId)
+        self.elementId_nsprefix_ = None
+        self.contactPoint = _cast(None, contactPoint)
+        self.contactPoint_nsprefix_ = None
+        self.elementS = _cast(float, elementS)
+        self.elementS_nsprefix_ = None
+        self.elementDir = _cast(None, elementDir)
+        self.elementDir_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_link_predecessorSuccessor)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_link_predecessorSuccessor.subclass:
+            return t_road_link_predecessorSuccessor.subclass(*args_, **kwargs_)
+        else:
+            return t_road_link_predecessorSuccessor(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_elementType(self):
+        return self.elementType
+    def set_elementType(self, elementType):
+        self.elementType = elementType
+    def get_elementId(self):
+        return self.elementId
+    def set_elementId(self, elementId):
+        self.elementId = elementId
+    def get_contactPoint(self):
+        return self.contactPoint
+    def set_contactPoint(self, contactPoint):
+        self.contactPoint = contactPoint
+    def get_elementS(self):
+        return self.elementS
+    def set_elementS(self, elementS):
+        self.elementS = elementS
+    def get_elementDir(self):
+        return self.elementDir
+    def set_elementDir(self, elementDir):
+        self.elementDir = elementDir
+    def validate_e_road_link_elementType(self, value):
+        # Validate type e_road_link_elementType, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['road', 'junction']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_road_link_elementType' % {"value" : value.encode("utf-8")} )
+    def validate_e_contactPoint(self, value):
+        # Validate type e_contactPoint, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['start', 'end']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_contactPoint' % {"value" : value.encode("utf-8")} )
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_elementDir(self, value):
+        # Validate type e_elementDir, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['+', '-']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_elementDir' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_link_predecessorSuccessor', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_link_predecessorSuccessor')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_link_predecessorSuccessor')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_link_predecessorSuccessor', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_link_predecessorSuccessor'):
+        if 'elementType' not in already_processed:
+            already_processed.add('elementType')
+            outfile.write(' elementType=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.elementType), input_name='elementType')), ))
+        if 'elementId' not in already_processed:
+            already_processed.add('elementId')
+            outfile.write(' elementId=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.elementId), input_name='elementId')), ))
+        if self.contactPoint is not None and 'contactPoint' not in already_processed:
+            already_processed.add('contactPoint')
+            outfile.write(' contactPoint=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.contactPoint), input_name='contactPoint')), ))
+        if self.elementS is not None and 'elementS' not in already_processed:
+            already_processed.add('elementS')
+            outfile.write(' elementS="%s"' % self.gds_format_double(self.elementS, input_name='elementS'))
+        if self.elementDir is not None and 'elementDir' not in already_processed:
+            already_processed.add('elementDir')
+            outfile.write(' elementDir=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.elementDir), input_name='elementDir')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_link_predecessorSuccessor', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('elementType', node)
+        if value is not None and 'elementType' not in already_processed:
+            already_processed.add('elementType')
+            self.elementType = value
+            self.validate_e_road_link_elementType(self.elementType)    # validate type e_road_link_elementType
+        value = find_attr_value_('elementId', node)
+        if value is not None and 'elementId' not in already_processed:
+            already_processed.add('elementId')
+            self.elementId = value
+        value = find_attr_value_('contactPoint', node)
+        if value is not None and 'contactPoint' not in already_processed:
+            already_processed.add('contactPoint')
+            self.contactPoint = value
+            self.validate_e_contactPoint(self.contactPoint)    # validate type e_contactPoint
+        value = find_attr_value_('elementS', node)
+        if value is not None and 'elementS' not in already_processed:
+            already_processed.add('elementS')
+            try:
+                self.elementS = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (elementS): %s' % exp)
+            self.validate_t_grEqZero(self.elementS)    # validate type t_grEqZero
+        value = find_attr_value_('elementDir', node)
+        if value is not None and 'elementDir' not in already_processed:
+            already_processed.add('elementDir')
+            self.elementDir = value
+            self.validate_e_elementDir(self.elementDir)    # validate type e_elementDir
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_link_predecessorSuccessor
+
+
+class t_road_link_neighbor(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, side=None, elementId=None, direction=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.side = _cast(None, side)
+        self.side_nsprefix_ = None
+        self.elementId = _cast(None, elementId)
+        self.elementId_nsprefix_ = None
+        self.direction = _cast(None, direction)
+        self.direction_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_link_neighbor)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_link_neighbor.subclass:
+            return t_road_link_neighbor.subclass(*args_, **kwargs_)
+        else:
+            return t_road_link_neighbor(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_side(self):
+        return self.side
+    def set_side(self, side):
+        self.side = side
+    def get_elementId(self):
+        return self.elementId
+    def set_elementId(self, elementId):
+        self.elementId = elementId
+    def get_direction(self):
+        return self.direction
+    def set_direction(self, direction):
+        self.direction = direction
+    def validate_e_road_link_neighbor_side(self, value):
+        # Validate type e_road_link_neighbor_side, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['left', 'right']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_road_link_neighbor_side' % {"value" : value.encode("utf-8")} )
+    def validate_e_direction(self, value):
+        # Validate type e_direction, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['same', 'opposite']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_direction' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_link_neighbor', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_link_neighbor')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_link_neighbor')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_link_neighbor', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_link_neighbor'):
+        if 'side' not in already_processed:
+            already_processed.add('side')
+            outfile.write(' side=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.side), input_name='side')), ))
+        if 'elementId' not in already_processed:
+            already_processed.add('elementId')
+            outfile.write(' elementId=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.elementId), input_name='elementId')), ))
+        if 'direction' not in already_processed:
+            already_processed.add('direction')
+            outfile.write(' direction=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.direction), input_name='direction')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_link_neighbor', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('side', node)
+        if value is not None and 'side' not in already_processed:
+            already_processed.add('side')
+            self.side = value
+            self.validate_e_road_link_neighbor_side(self.side)    # validate type e_road_link_neighbor_side
+        value = find_attr_value_('elementId', node)
+        if value is not None and 'elementId' not in already_processed:
+            already_processed.add('elementId')
+            self.elementId = value
+        value = find_attr_value_('direction', node)
+        if value is not None and 'direction' not in already_processed:
+            already_processed.add('direction')
+            self.direction = value
+            self.validate_e_direction(self.direction)    # validate type e_direction
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_link_neighbor
+
+
+class t_road_type(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, type_=None, country=None, speed=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.country = _cast(None, country)
+        self.country_nsprefix_ = None
+        self.speed = speed
+        self.speed_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_type)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_type.subclass:
+            return t_road_type.subclass(*args_, **kwargs_)
+        else:
+            return t_road_type(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_speed(self):
+        return self.speed
+    def set_speed(self, speed):
+        self.speed = speed
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_country(self):
+        return self.country
+    def set_country(self, country):
+        self.country = country
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_roadType(self, value):
+        # Validate type e_roadType, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['unknown', 'rural', 'motorway', 'town', 'lowSpeed', 'pedestrian', 'bicycle', 'townExpressway', 'townCollector', 'townArterial', 'townPrivate', 'townLocal', 'townPlayStreet']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_roadType' % {"value" : value.encode("utf-8")} )
+    def validate_e_countryCode(self, value):
+        # Validate type e_countryCode, a restriction on None.
+        pass
+    def hasContent_(self):
+        if (
+            self.speed is not None or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_type', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_type')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_type')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_type', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_type'):
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+        if self.country is not None and 'country' not in already_processed:
+            already_processed.add('country')
+            outfile.write(' country=%s' % (quote_attrib(self.country), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_type', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.speed is not None:
+            namespaceprefix_ = self.speed_nsprefix_ + ':' if (UseCapturedNS_ and self.speed_nsprefix_) else ''
+            self.speed.export(outfile, level, namespaceprefix_, namespacedef_='', name_='speed', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            self.type_ = value
+            self.validate_e_roadType(self.type_)    # validate type e_roadType
+        value = find_attr_value_('country', node)
+        if value is not None and 'country' not in already_processed:
+            already_processed.add('country')
+            self.country = value
+            self.validate_e_countryCode(self.country)    # validate type e_countryCode
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'speed':
+            obj_ = t_road_type_speed.factory(parent_object_=self)
+            obj_.build(child_)
+            self.speed = obj_
+            obj_.original_tagname_ = 'speed'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_type
+
+
+class t_road_type_speed(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, max=None, unit=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.max = _cast(None, max)
+        self.max_nsprefix_ = None
+        self.unit = _cast(None, unit)
+        self.unit_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_type_speed)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_type_speed.subclass:
+            return t_road_type_speed.subclass(*args_, **kwargs_)
+        else:
+            return t_road_type_speed(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_max(self):
+        return self.max
+    def set_max(self, max):
+        self.max = max
+    def get_unit(self):
+        return self.unit
+    def set_unit(self, unit):
+        self.unit = unit
+    def validate_t_maxSpeed(self, value):
+        # Validate type t_maxSpeed, a restriction on None.
+        pass
+    def validate_e_unitSpeed(self, value):
+        # Validate type e_unitSpeed, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['m/s', 'mph', 'km/h']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_unitSpeed' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_type_speed', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_type_speed')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_type_speed')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_type_speed', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_type_speed'):
+        if 'max' not in already_processed:
+            already_processed.add('max')
+            outfile.write(' max=%s' % (quote_attrib(self.max), ))
+        if self.unit is not None and 'unit' not in already_processed:
+            already_processed.add('unit')
+            outfile.write(' unit=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.unit), input_name='unit')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_type_speed', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('max', node)
+        if value is not None and 'max' not in already_processed:
+            already_processed.add('max')
+            self.max = value
+            self.validate_t_maxSpeed(self.max)    # validate type t_maxSpeed
+        value = find_attr_value_('unit', node)
+        if value is not None and 'unit' not in already_processed:
+            already_processed.add('unit')
+            self.unit = value
+            self.validate_e_unitSpeed(self.unit)    # validate type e_unitSpeed
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_type_speed
+
+
+class t_road_planView(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, geometry=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if geometry is None:
+            self.geometry = []
+        else:
+            self.geometry = geometry
+        self.geometry_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_planView)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_planView.subclass:
+            return t_road_planView.subclass(*args_, **kwargs_)
+        else:
+            return t_road_planView(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_geometry(self):
+        return self.geometry
+    def set_geometry(self, geometry):
+        self.geometry = geometry
+    def add_geometry(self, value):
+        self.geometry.append(value)
+    def insert_geometry_at(self, index, value):
+        self.geometry.insert(index, value)
+    def replace_geometry_at(self, index, value):
+        self.geometry[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.geometry or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_planView', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_planView')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_planView')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_planView', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_planView'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_planView', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for geometry_ in self.geometry:
+            namespaceprefix_ = self.geometry_nsprefix_ + ':' if (UseCapturedNS_ and self.geometry_nsprefix_) else ''
+            geometry_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='geometry', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'geometry':
+            obj_ = t_road_planView_geometry.factory(parent_object_=self)
+            obj_.build(child_)
+            self.geometry.append(obj_)
+            obj_.original_tagname_ = 'geometry'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_planView
+
+
+class t_road_planView_geometry(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, x=None, y=None, hdg=None, length=None, line=None, spiral=None, arc=None, poly3=None, paramPoly3=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.x = _cast(float, x)
+        self.x_nsprefix_ = None
+        self.y = _cast(float, y)
+        self.y_nsprefix_ = None
+        self.hdg = _cast(float, hdg)
+        self.hdg_nsprefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.line = line
+        self.line_nsprefix_ = None
+        self.spiral = spiral
+        self.spiral_nsprefix_ = None
+        self.arc = arc
+        self.arc_nsprefix_ = None
+        self.poly3 = poly3
+        self.poly3_nsprefix_ = None
+        self.paramPoly3 = paramPoly3
+        self.paramPoly3_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_planView_geometry)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_planView_geometry.subclass:
+            return t_road_planView_geometry.subclass(*args_, **kwargs_)
+        else:
+            return t_road_planView_geometry(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_line(self):
+        return self.line
+    def set_line(self, line):
+        self.line = line
+    def get_spiral(self):
+        return self.spiral
+    def set_spiral(self, spiral):
+        self.spiral = spiral
+    def get_arc(self):
+        return self.arc
+    def set_arc(self, arc):
+        self.arc = arc
+    def get_poly3(self):
+        return self.poly3
+    def set_poly3(self, poly3):
+        self.poly3 = poly3
+    def get_paramPoly3(self):
+        return self.paramPoly3
+    def set_paramPoly3(self, paramPoly3):
+        self.paramPoly3 = paramPoly3
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_x(self):
+        return self.x
+    def set_x(self, x):
+        self.x = x
+    def get_y(self):
+        return self.y
+    def set_y(self, y):
+        self.y = y
+    def get_hdg(self):
+        return self.hdg
+    def set_hdg(self, hdg):
+        self.hdg = hdg
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.line is not None or
+            self.spiral is not None or
+            self.arc is not None or
+            self.poly3 is not None or
+            self.paramPoly3 is not None or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_planView_geometry', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_planView_geometry')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_planView_geometry')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_planView_geometry', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_planView_geometry'):
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 'x' not in already_processed:
+            already_processed.add('x')
+            outfile.write(' x="%s"' % self.gds_format_double(self.x, input_name='x'))
+        if 'y' not in already_processed:
+            already_processed.add('y')
+            outfile.write(' y="%s"' % self.gds_format_double(self.y, input_name='y'))
+        if 'hdg' not in already_processed:
+            already_processed.add('hdg')
+            outfile.write(' hdg="%s"' % self.gds_format_double(self.hdg, input_name='hdg'))
+        if 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_planView_geometry', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.line is not None:
+            namespaceprefix_ = self.line_nsprefix_ + ':' if (UseCapturedNS_ and self.line_nsprefix_) else ''
+            self.line.export(outfile, level, namespaceprefix_, namespacedef_='', name_='line', pretty_print=pretty_print)
+        if self.spiral is not None:
+            namespaceprefix_ = self.spiral_nsprefix_ + ':' if (UseCapturedNS_ and self.spiral_nsprefix_) else ''
+            self.spiral.export(outfile, level, namespaceprefix_, namespacedef_='', name_='spiral', pretty_print=pretty_print)
+        if self.arc is not None:
+            namespaceprefix_ = self.arc_nsprefix_ + ':' if (UseCapturedNS_ and self.arc_nsprefix_) else ''
+            self.arc.export(outfile, level, namespaceprefix_, namespacedef_='', name_='arc', pretty_print=pretty_print)
+        if self.poly3 is not None:
+            namespaceprefix_ = self.poly3_nsprefix_ + ':' if (UseCapturedNS_ and self.poly3_nsprefix_) else ''
+            self.poly3.export(outfile, level, namespaceprefix_, namespacedef_='', name_='poly3', pretty_print=pretty_print)
+        if self.paramPoly3 is not None:
+            namespaceprefix_ = self.paramPoly3_nsprefix_ + ':' if (UseCapturedNS_ and self.paramPoly3_nsprefix_) else ''
+            self.paramPoly3.export(outfile, level, namespaceprefix_, namespacedef_='', name_='paramPoly3', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('x', node)
+        if value is not None and 'x' not in already_processed:
+            already_processed.add('x')
+            try:
+                self.x = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (x): %s' % exp)
+        value = find_attr_value_('y', node)
+        if value is not None and 'y' not in already_processed:
+            already_processed.add('y')
+            try:
+                self.y = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (y): %s' % exp)
+        value = find_attr_value_('hdg', node)
+        if value is not None and 'hdg' not in already_processed:
+            already_processed.add('hdg')
+            try:
+                self.hdg = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (hdg): %s' % exp)
+        value = find_attr_value_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            try:
+                self.length = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (length): %s' % exp)
+            self.validate_t_grEqZero(self.length)    # validate type t_grEqZero
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'line':
+            obj_ = t_road_planView_geometry_line.factory(parent_object_=self)
+            obj_.build(child_)
+            self.line = obj_
+            obj_.original_tagname_ = 'line'
+        elif nodeName_ == 'spiral':
+            obj_ = t_road_planView_geometry_spiral.factory(parent_object_=self)
+            obj_.build(child_)
+            self.spiral = obj_
+            obj_.original_tagname_ = 'spiral'
+        elif nodeName_ == 'arc':
+            obj_ = t_road_planView_geometry_arc.factory(parent_object_=self)
+            obj_.build(child_)
+            self.arc = obj_
+            obj_.original_tagname_ = 'arc'
+        elif nodeName_ == 'poly3':
+            obj_ = t_road_planView_geometry_poly3.factory(parent_object_=self)
+            obj_.build(child_)
+            self.poly3 = obj_
+            obj_.original_tagname_ = 'poly3'
+        elif nodeName_ == 'paramPoly3':
+            obj_ = t_road_planView_geometry_paramPoly3.factory(parent_object_=self)
+            obj_.build(child_)
+            self.paramPoly3 = obj_
+            obj_.original_tagname_ = 'paramPoly3'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_planView_geometry
+
+
+class t_road_planView_geometry_line(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_planView_geometry_line)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_planView_geometry_line.subclass:
+            return t_road_planView_geometry_line.subclass(*args_, **kwargs_)
+        else:
+            return t_road_planView_geometry_line(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_planView_geometry_line', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_planView_geometry_line')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_planView_geometry_line')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_planView_geometry_line', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_planView_geometry_line'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_planView_geometry_line', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_planView_geometry_line
+
+
+class t_road_planView_geometry_spiral(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, curvStart=None, curvEnd=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.curvStart = _cast(float, curvStart)
+        self.curvStart_nsprefix_ = None
+        self.curvEnd = _cast(float, curvEnd)
+        self.curvEnd_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_planView_geometry_spiral)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_planView_geometry_spiral.subclass:
+            return t_road_planView_geometry_spiral.subclass(*args_, **kwargs_)
+        else:
+            return t_road_planView_geometry_spiral(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_curvStart(self):
+        return self.curvStart
+    def set_curvStart(self, curvStart):
+        self.curvStart = curvStart
+    def get_curvEnd(self):
+        return self.curvEnd
+    def set_curvEnd(self, curvEnd):
+        self.curvEnd = curvEnd
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_planView_geometry_spiral', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_planView_geometry_spiral')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_planView_geometry_spiral')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_planView_geometry_spiral', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_planView_geometry_spiral'):
+        if 'curvStart' not in already_processed:
+            already_processed.add('curvStart')
+            outfile.write(' curvStart="%s"' % self.gds_format_double(self.curvStart, input_name='curvStart'))
+        if 'curvEnd' not in already_processed:
+            already_processed.add('curvEnd')
+            outfile.write(' curvEnd="%s"' % self.gds_format_double(self.curvEnd, input_name='curvEnd'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_planView_geometry_spiral', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('curvStart', node)
+        if value is not None and 'curvStart' not in already_processed:
+            already_processed.add('curvStart')
+            try:
+                self.curvStart = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (curvStart): %s' % exp)
+        value = find_attr_value_('curvEnd', node)
+        if value is not None and 'curvEnd' not in already_processed:
+            already_processed.add('curvEnd')
+            try:
+                self.curvEnd = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (curvEnd): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_planView_geometry_spiral
+
+
+class t_road_planView_geometry_arc(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, curvature=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.curvature = _cast(float, curvature)
+        self.curvature_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_planView_geometry_arc)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_planView_geometry_arc.subclass:
+            return t_road_planView_geometry_arc.subclass(*args_, **kwargs_)
+        else:
+            return t_road_planView_geometry_arc(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_curvature(self):
+        return self.curvature
+    def set_curvature(self, curvature):
+        self.curvature = curvature
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_planView_geometry_arc', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_planView_geometry_arc')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_planView_geometry_arc')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_planView_geometry_arc', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_planView_geometry_arc'):
+        if 'curvature' not in already_processed:
+            already_processed.add('curvature')
+            outfile.write(' curvature="%s"' % self.gds_format_double(self.curvature, input_name='curvature'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_planView_geometry_arc', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('curvature', node)
+        if value is not None and 'curvature' not in already_processed:
+            already_processed.add('curvature')
+            try:
+                self.curvature = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (curvature): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_planView_geometry_arc
+
+
+class t_road_planView_geometry_poly3(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, a=None, b=None, c=None, d=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_planView_geometry_poly3)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_planView_geometry_poly3.subclass:
+            return t_road_planView_geometry_poly3.subclass(*args_, **kwargs_)
+        else:
+            return t_road_planView_geometry_poly3(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_planView_geometry_poly3', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_planView_geometry_poly3')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_planView_geometry_poly3')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_planView_geometry_poly3', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_planView_geometry_poly3'):
+        if 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_planView_geometry_poly3', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            try:
+                self.a = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (a): %s' % exp)
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            try:
+                self.b = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (b): %s' % exp)
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            try:
+                self.c = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (c): %s' % exp)
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            try:
+                self.d = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (d): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_planView_geometry_poly3
+
+
+class t_road_planView_geometry_paramPoly3(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, aU=None, bU=None, cU=None, dU=None, aV=None, bV=None, cV=None, dV=None, pRange=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.aU = _cast(float, aU)
+        self.aU_nsprefix_ = None
+        self.bU = _cast(float, bU)
+        self.bU_nsprefix_ = None
+        self.cU = _cast(float, cU)
+        self.cU_nsprefix_ = None
+        self.dU = _cast(float, dU)
+        self.dU_nsprefix_ = None
+        self.aV = _cast(float, aV)
+        self.aV_nsprefix_ = None
+        self.bV = _cast(float, bV)
+        self.bV_nsprefix_ = None
+        self.cV = _cast(float, cV)
+        self.cV_nsprefix_ = None
+        self.dV = _cast(float, dV)
+        self.dV_nsprefix_ = None
+        self.pRange = _cast(None, pRange)
+        self.pRange_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_planView_geometry_paramPoly3)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_planView_geometry_paramPoly3.subclass:
+            return t_road_planView_geometry_paramPoly3.subclass(*args_, **kwargs_)
+        else:
+            return t_road_planView_geometry_paramPoly3(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_aU(self):
+        return self.aU
+    def set_aU(self, aU):
+        self.aU = aU
+    def get_bU(self):
+        return self.bU
+    def set_bU(self, bU):
+        self.bU = bU
+    def get_cU(self):
+        return self.cU
+    def set_cU(self, cU):
+        self.cU = cU
+    def get_dU(self):
+        return self.dU
+    def set_dU(self, dU):
+        self.dU = dU
+    def get_aV(self):
+        return self.aV
+    def set_aV(self, aV):
+        self.aV = aV
+    def get_bV(self):
+        return self.bV
+    def set_bV(self, bV):
+        self.bV = bV
+    def get_cV(self):
+        return self.cV
+    def set_cV(self, cV):
+        self.cV = cV
+    def get_dV(self):
+        return self.dV
+    def set_dV(self, dV):
+        self.dV = dV
+    def get_pRange(self):
+        return self.pRange
+    def set_pRange(self, pRange):
+        self.pRange = pRange
+    def validate_e_paramPoly3_pRange(self, value):
+        # Validate type e_paramPoly3_pRange, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['arcLength', 'normalized']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_paramPoly3_pRange' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_planView_geometry_paramPoly3', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_planView_geometry_paramPoly3')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_planView_geometry_paramPoly3')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_planView_geometry_paramPoly3', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_planView_geometry_paramPoly3'):
+        if 'aU' not in already_processed:
+            already_processed.add('aU')
+            outfile.write(' aU="%s"' % self.gds_format_double(self.aU, input_name='aU'))
+        if 'bU' not in already_processed:
+            already_processed.add('bU')
+            outfile.write(' bU="%s"' % self.gds_format_double(self.bU, input_name='bU'))
+        if 'cU' not in already_processed:
+            already_processed.add('cU')
+            outfile.write(' cU="%s"' % self.gds_format_double(self.cU, input_name='cU'))
+        if 'dU' not in already_processed:
+            already_processed.add('dU')
+            outfile.write(' dU="%s"' % self.gds_format_double(self.dU, input_name='dU'))
+        if 'aV' not in already_processed:
+            already_processed.add('aV')
+            outfile.write(' aV="%s"' % self.gds_format_double(self.aV, input_name='aV'))
+        if 'bV' not in already_processed:
+            already_processed.add('bV')
+            outfile.write(' bV="%s"' % self.gds_format_double(self.bV, input_name='bV'))
+        if 'cV' not in already_processed:
+            already_processed.add('cV')
+            outfile.write(' cV="%s"' % self.gds_format_double(self.cV, input_name='cV'))
+        if 'dV' not in already_processed:
+            already_processed.add('dV')
+            outfile.write(' dV="%s"' % self.gds_format_double(self.dV, input_name='dV'))
+        if 'pRange' not in already_processed:
+            already_processed.add('pRange')
+            outfile.write(' pRange=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.pRange), input_name='pRange')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_planView_geometry_paramPoly3', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('aU', node)
+        if value is not None and 'aU' not in already_processed:
+            already_processed.add('aU')
+            try:
+                self.aU = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (aU): %s' % exp)
+        value = find_attr_value_('bU', node)
+        if value is not None and 'bU' not in already_processed:
+            already_processed.add('bU')
+            try:
+                self.bU = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (bU): %s' % exp)
+        value = find_attr_value_('cU', node)
+        if value is not None and 'cU' not in already_processed:
+            already_processed.add('cU')
+            try:
+                self.cU = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (cU): %s' % exp)
+        value = find_attr_value_('dU', node)
+        if value is not None and 'dU' not in already_processed:
+            already_processed.add('dU')
+            try:
+                self.dU = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (dU): %s' % exp)
+        value = find_attr_value_('aV', node)
+        if value is not None and 'aV' not in already_processed:
+            already_processed.add('aV')
+            try:
+                self.aV = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (aV): %s' % exp)
+        value = find_attr_value_('bV', node)
+        if value is not None and 'bV' not in already_processed:
+            already_processed.add('bV')
+            try:
+                self.bV = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (bV): %s' % exp)
+        value = find_attr_value_('cV', node)
+        if value is not None and 'cV' not in already_processed:
+            already_processed.add('cV')
+            try:
+                self.cV = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (cV): %s' % exp)
+        value = find_attr_value_('dV', node)
+        if value is not None and 'dV' not in already_processed:
+            already_processed.add('dV')
+            try:
+                self.dV = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (dV): %s' % exp)
+        value = find_attr_value_('pRange', node)
+        if value is not None and 'pRange' not in already_processed:
+            already_processed.add('pRange')
+            self.pRange = value
+            self.validate_e_paramPoly3_pRange(self.pRange)    # validate type e_paramPoly3_pRange
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_planView_geometry_paramPoly3
+
+
+class t_road_elevationProfile(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, elevation=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if elevation is None:
+            self.elevation = []
+        else:
+            self.elevation = elevation
+        self.elevation_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_elevationProfile)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_elevationProfile.subclass:
+            return t_road_elevationProfile.subclass(*args_, **kwargs_)
+        else:
+            return t_road_elevationProfile(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_elevation(self):
+        return self.elevation
+    def set_elevation(self, elevation):
+        self.elevation = elevation
+    def add_elevation(self, value):
+        self.elevation.append(value)
+    def insert_elevation_at(self, index, value):
+        self.elevation.insert(index, value)
+    def replace_elevation_at(self, index, value):
+        self.elevation[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.elevation or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_elevationProfile', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_elevationProfile')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_elevationProfile')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_elevationProfile', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_elevationProfile'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_elevationProfile', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for elevation_ in self.elevation:
+            namespaceprefix_ = self.elevation_nsprefix_ + ':' if (UseCapturedNS_ and self.elevation_nsprefix_) else ''
+            elevation_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='elevation', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'elevation':
+            obj_ = t_road_elevationProfile_elevation.factory(parent_object_=self)
+            obj_.build(child_)
+            self.elevation.append(obj_)
+            obj_.original_tagname_ = 'elevation'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_elevationProfile
+
+
+class t_road_elevationProfile_elevation(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, a=None, b=None, c=None, d=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_elevationProfile_elevation)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_elevationProfile_elevation.subclass:
+            return t_road_elevationProfile_elevation.subclass(*args_, **kwargs_)
+        else:
+            return t_road_elevationProfile_elevation(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_elevationProfile_elevation', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_elevationProfile_elevation')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_elevationProfile_elevation')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_elevationProfile_elevation', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_elevationProfile_elevation'):
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_elevationProfile_elevation', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            try:
+                self.a = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (a): %s' % exp)
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            try:
+                self.b = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (b): %s' % exp)
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            try:
+                self.c = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (c): %s' % exp)
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            try:
+                self.d = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (d): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_elevationProfile_elevation
+
+
+class t_road_lateralProfile(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, superelevation=None, crossfall=None, shape=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if superelevation is None:
+            self.superelevation = []
+        else:
+            self.superelevation = superelevation
+        self.superelevation_nsprefix_ = None
+        if crossfall is None:
+            self.crossfall = []
+        else:
+            self.crossfall = crossfall
+        self.crossfall_nsprefix_ = None
+        if shape is None:
+            self.shape = []
+        else:
+            self.shape = shape
+        self.shape_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lateralProfile)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lateralProfile.subclass:
+            return t_road_lateralProfile.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lateralProfile(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_superelevation(self):
+        return self.superelevation
+    def set_superelevation(self, superelevation):
+        self.superelevation = superelevation
+    def add_superelevation(self, value):
+        self.superelevation.append(value)
+    def insert_superelevation_at(self, index, value):
+        self.superelevation.insert(index, value)
+    def replace_superelevation_at(self, index, value):
+        self.superelevation[index] = value
+    def get_crossfall(self):
+        return self.crossfall
+    def set_crossfall(self, crossfall):
+        self.crossfall = crossfall
+    def add_crossfall(self, value):
+        self.crossfall.append(value)
+    def insert_crossfall_at(self, index, value):
+        self.crossfall.insert(index, value)
+    def replace_crossfall_at(self, index, value):
+        self.crossfall[index] = value
+    def get_shape(self):
+        return self.shape
+    def set_shape(self, shape):
+        self.shape = shape
+    def add_shape(self, value):
+        self.shape.append(value)
+    def insert_shape_at(self, index, value):
+        self.shape.insert(index, value)
+    def replace_shape_at(self, index, value):
+        self.shape[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.superelevation or
+            self.crossfall or
+            self.shape or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lateralProfile', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lateralProfile')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lateralProfile')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lateralProfile', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lateralProfile'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lateralProfile', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for superelevation_ in self.superelevation:
+            namespaceprefix_ = self.superelevation_nsprefix_ + ':' if (UseCapturedNS_ and self.superelevation_nsprefix_) else ''
+            superelevation_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='superelevation', pretty_print=pretty_print)
+        for crossfall_ in self.crossfall:
+            namespaceprefix_ = self.crossfall_nsprefix_ + ':' if (UseCapturedNS_ and self.crossfall_nsprefix_) else ''
+            crossfall_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='crossfall', pretty_print=pretty_print)
+        for shape_ in self.shape:
+            namespaceprefix_ = self.shape_nsprefix_ + ':' if (UseCapturedNS_ and self.shape_nsprefix_) else ''
+            shape_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='shape', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'superelevation':
+            obj_ = t_road_lateralProfile_superelevation.factory(parent_object_=self)
+            obj_.build(child_)
+            self.superelevation.append(obj_)
+            obj_.original_tagname_ = 'superelevation'
+        elif nodeName_ == 'crossfall':
+            obj_ = t_road_lateralProfile_crossfall.factory(parent_object_=self)
+            obj_.build(child_)
+            self.crossfall.append(obj_)
+            obj_.original_tagname_ = 'crossfall'
+        elif nodeName_ == 'shape':
+            obj_ = t_road_lateralProfile_shape.factory(parent_object_=self)
+            obj_.build(child_)
+            self.shape.append(obj_)
+            obj_.original_tagname_ = 'shape'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lateralProfile
+
+
+class t_road_lateralProfile_superelevation(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, a=None, b=None, c=None, d=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lateralProfile_superelevation)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lateralProfile_superelevation.subclass:
+            return t_road_lateralProfile_superelevation.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lateralProfile_superelevation(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lateralProfile_superelevation', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lateralProfile_superelevation')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lateralProfile_superelevation')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lateralProfile_superelevation', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lateralProfile_superelevation'):
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lateralProfile_superelevation', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            try:
+                self.a = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (a): %s' % exp)
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            try:
+                self.b = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (b): %s' % exp)
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            try:
+                self.c = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (c): %s' % exp)
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            try:
+                self.d = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (d): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lateralProfile_superelevation
+
+
+class t_road_lateralProfile_crossfall(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, side=None, s=None, a=None, b=None, c=None, d=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.side = _cast(None, side)
+        self.side_nsprefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lateralProfile_crossfall)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lateralProfile_crossfall.subclass:
+            return t_road_lateralProfile_crossfall.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lateralProfile_crossfall(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_side(self):
+        return self.side
+    def set_side(self, side):
+        self.side = side
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def validate_e_road_lateralProfile_crossfall_side(self, value):
+        # Validate type e_road_lateralProfile_crossfall_side, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['left', 'right', 'both']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_road_lateralProfile_crossfall_side' % {"value" : value.encode("utf-8")} )
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lateralProfile_crossfall', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lateralProfile_crossfall')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lateralProfile_crossfall')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lateralProfile_crossfall', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lateralProfile_crossfall'):
+        if 'side' not in already_processed:
+            already_processed.add('side')
+            outfile.write(' side=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.side), input_name='side')), ))
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lateralProfile_crossfall', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('side', node)
+        if value is not None and 'side' not in already_processed:
+            already_processed.add('side')
+            self.side = value
+            self.validate_e_road_lateralProfile_crossfall_side(self.side)    # validate type e_road_lateralProfile_crossfall_side
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            try:
+                self.a = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (a): %s' % exp)
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            try:
+                self.b = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (b): %s' % exp)
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            try:
+                self.c = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (c): %s' % exp)
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            try:
+                self.d = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (d): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lateralProfile_crossfall
+
+
+class t_road_lateralProfile_shape(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, t=None, a=None, b=None, c=None, d=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.t = _cast(float, t)
+        self.t_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lateralProfile_shape)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lateralProfile_shape.subclass:
+            return t_road_lateralProfile_shape.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lateralProfile_shape(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_t(self):
+        return self.t
+    def set_t(self, t):
+        self.t = t
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lateralProfile_shape', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lateralProfile_shape')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lateralProfile_shape')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lateralProfile_shape', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lateralProfile_shape'):
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 't' not in already_processed:
+            already_processed.add('t')
+            outfile.write(' t="%s"' % self.gds_format_double(self.t, input_name='t'))
+        if 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lateralProfile_shape', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('t', node)
+        if value is not None and 't' not in already_processed:
+            already_processed.add('t')
+            try:
+                self.t = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (t): %s' % exp)
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            try:
+                self.a = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (a): %s' % exp)
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            try:
+                self.b = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (b): %s' % exp)
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            try:
+                self.c = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (c): %s' % exp)
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            try:
+                self.d = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (d): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lateralProfile_shape
+
+
+class t_road_lanes(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, laneOffset=None, laneSection=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if laneOffset is None:
+            self.laneOffset = []
+        else:
+            self.laneOffset = laneOffset
+        self.laneOffset_nsprefix_ = None
+        if laneSection is None:
+            self.laneSection = []
+        else:
+            self.laneSection = laneSection
+        self.laneSection_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes.subclass:
+            return t_road_lanes.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_laneOffset(self):
+        return self.laneOffset
+    def set_laneOffset(self, laneOffset):
+        self.laneOffset = laneOffset
+    def add_laneOffset(self, value):
+        self.laneOffset.append(value)
+    def insert_laneOffset_at(self, index, value):
+        self.laneOffset.insert(index, value)
+    def replace_laneOffset_at(self, index, value):
+        self.laneOffset[index] = value
+    def get_laneSection(self):
+        return self.laneSection
+    def set_laneSection(self, laneSection):
+        self.laneSection = laneSection
+    def add_laneSection(self, value):
+        self.laneSection.append(value)
+    def insert_laneSection_at(self, index, value):
+        self.laneSection.insert(index, value)
+    def replace_laneSection_at(self, index, value):
+        self.laneSection[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.laneOffset or
+            self.laneSection or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for laneOffset_ in self.laneOffset:
+            namespaceprefix_ = self.laneOffset_nsprefix_ + ':' if (UseCapturedNS_ and self.laneOffset_nsprefix_) else ''
+            laneOffset_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='laneOffset', pretty_print=pretty_print)
+        for laneSection_ in self.laneSection:
+            namespaceprefix_ = self.laneSection_nsprefix_ + ':' if (UseCapturedNS_ and self.laneSection_nsprefix_) else ''
+            laneSection_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='laneSection', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'laneOffset':
+            obj_ = t_road_lanes_laneOffset.factory(parent_object_=self)
+            obj_.build(child_)
+            self.laneOffset.append(obj_)
+            obj_.original_tagname_ = 'laneOffset'
+        elif nodeName_ == 'laneSection':
+            obj_ = t_road_lanes_laneSection.factory(parent_object_=self)
+            obj_.build(child_)
+            self.laneSection.append(obj_)
+            obj_.original_tagname_ = 'laneSection'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes
+
+
+class t_road_lanes_laneOffset(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, a=None, b=None, c=None, d=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneOffset)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneOffset.subclass:
+            return t_road_lanes_laneOffset.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneOffset(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneOffset', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneOffset')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneOffset')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneOffset', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneOffset'):
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneOffset', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            try:
+                self.a = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (a): %s' % exp)
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            try:
+                self.b = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (b): %s' % exp)
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            try:
+                self.c = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (c): %s' % exp)
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            try:
+                self.d = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (d): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneOffset
+
+
+class t_road_lanes_laneSection(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, singleSide=None, left=None, center=None, right=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.singleSide = _cast(None, singleSide)
+        self.singleSide_nsprefix_ = None
+        self.left = left
+        self.left_nsprefix_ = None
+        self.center = center
+        self.center_nsprefix_ = None
+        self.right = right
+        self.right_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection.subclass:
+            return t_road_lanes_laneSection.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_left(self):
+        return self.left
+    def set_left(self, left):
+        self.left = left
+    def get_center(self):
+        return self.center
+    def set_center(self, center):
+        self.center = center
+    def get_right(self):
+        return self.right
+    def set_right(self, right):
+        self.right = right
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_singleSide(self):
+        return self.singleSide
+    def set_singleSide(self, singleSide):
+        self.singleSide = singleSide
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_t_bool(self, value):
+        # Validate type t_bool, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['true', 'false']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on t_bool' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.left is not None or
+            self.center is not None or
+            self.right is not None or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection'):
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if self.singleSide is not None and 'singleSide' not in already_processed:
+            already_processed.add('singleSide')
+            outfile.write(' singleSide=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.singleSide), input_name='singleSide')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.left is not None:
+            namespaceprefix_ = self.left_nsprefix_ + ':' if (UseCapturedNS_ and self.left_nsprefix_) else ''
+            self.left.export(outfile, level, namespaceprefix_, namespacedef_='', name_='left', pretty_print=pretty_print)
+        if self.center is not None:
+            namespaceprefix_ = self.center_nsprefix_ + ':' if (UseCapturedNS_ and self.center_nsprefix_) else ''
+            self.center.export(outfile, level, namespaceprefix_, namespacedef_='', name_='center', pretty_print=pretty_print)
+        if self.right is not None:
+            namespaceprefix_ = self.right_nsprefix_ + ':' if (UseCapturedNS_ and self.right_nsprefix_) else ''
+            self.right.export(outfile, level, namespaceprefix_, namespacedef_='', name_='right', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('singleSide', node)
+        if value is not None and 'singleSide' not in already_processed:
+            already_processed.add('singleSide')
+            self.singleSide = value
+            self.validate_t_bool(self.singleSide)    # validate type t_bool
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'left':
+            obj_ = t_road_lanes_laneSection_left.factory(parent_object_=self)
+            obj_.build(child_)
+            self.left = obj_
+            obj_.original_tagname_ = 'left'
+        elif nodeName_ == 'center':
+            obj_ = t_road_lanes_laneSection_center.factory(parent_object_=self)
+            obj_.build(child_)
+            self.center = obj_
+            obj_.original_tagname_ = 'center'
+        elif nodeName_ == 'right':
+            obj_ = t_road_lanes_laneSection_right.factory(parent_object_=self)
+            obj_.build(child_)
+            self.right = obj_
+            obj_.original_tagname_ = 'right'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection
+
+
+class t_road_lanes_laneSection_left(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, lane=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if lane is None:
+            self.lane = []
+        else:
+            self.lane = lane
+        self.lane_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_left)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_left.subclass:
+            return t_road_lanes_laneSection_left.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_left(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_lane(self):
+        return self.lane
+    def set_lane(self, lane):
+        self.lane = lane
+    def add_lane(self, value):
+        self.lane.append(value)
+    def insert_lane_at(self, index, value):
+        self.lane.insert(index, value)
+    def replace_lane_at(self, index, value):
+        self.lane[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.lane or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_left', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_left')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_left')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_left', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_left'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_left', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for lane_ in self.lane:
+            namespaceprefix_ = self.lane_nsprefix_ + ':' if (UseCapturedNS_ and self.lane_nsprefix_) else ''
+            lane_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='lane', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'lane':
+            obj_ = t_road_lanes_laneSection_left_lane.factory(parent_object_=self)
+            obj_.build(child_)
+            self.lane.append(obj_)
+            obj_.original_tagname_ = 'lane'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_left
+
+
+class t_road_lanes_laneSection_center(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, lane=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if lane is None:
+            self.lane = []
+        else:
+            self.lane = lane
+        self.lane_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_center)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_center.subclass:
+            return t_road_lanes_laneSection_center.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_center(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_lane(self):
+        return self.lane
+    def set_lane(self, lane):
+        self.lane = lane
+    def add_lane(self, value):
+        self.lane.append(value)
+    def insert_lane_at(self, index, value):
+        self.lane.insert(index, value)
+    def replace_lane_at(self, index, value):
+        self.lane[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.lane or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_center', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_center')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_center')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_center', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_center'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_center', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for lane_ in self.lane:
+            namespaceprefix_ = self.lane_nsprefix_ + ':' if (UseCapturedNS_ and self.lane_nsprefix_) else ''
+            lane_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='lane', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'lane':
+            obj_ = t_road_lanes_laneSection_center_lane.factory(parent_object_=self)
+            obj_.build(child_)
+            self.lane.append(obj_)
+            obj_.original_tagname_ = 'lane'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_center
+
+
+class t_road_lanes_laneSection_right(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, lane=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if lane is None:
+            self.lane = []
+        else:
+            self.lane = lane
+        self.lane_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_right)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_right.subclass:
+            return t_road_lanes_laneSection_right.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_right(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_lane(self):
+        return self.lane
+    def set_lane(self, lane):
+        self.lane = lane
+    def add_lane(self, value):
+        self.lane.append(value)
+    def insert_lane_at(self, index, value):
+        self.lane.insert(index, value)
+    def replace_lane_at(self, index, value):
+        self.lane[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.lane or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_right', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_right')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_right')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_right', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_right'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_right', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for lane_ in self.lane:
+            namespaceprefix_ = self.lane_nsprefix_ + ':' if (UseCapturedNS_ and self.lane_nsprefix_) else ''
+            lane_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='lane', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'lane':
+            obj_ = t_road_lanes_laneSection_right_lane.factory(parent_object_=self)
+            obj_.build(child_)
+            self.lane.append(obj_)
+            obj_.original_tagname_ = 'lane'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_right
+
+
+class t_road_lanes_laneSection_center_lane(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, id=0, type_=None, level=None, link=None, roadMark=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(int, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.level = _cast(None, level)
+        self.level_nsprefix_ = None
+        self.link = link
+        self.link_nsprefix_ = None
+        if roadMark is None:
+            self.roadMark = []
+        else:
+            self.roadMark = roadMark
+        self.roadMark_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_center_lane)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_center_lane.subclass:
+            return t_road_lanes_laneSection_center_lane.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_center_lane(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_link(self):
+        return self.link
+    def set_link(self, link):
+        self.link = link
+    def get_roadMark(self):
+        return self.roadMark
+    def set_roadMark(self, roadMark):
+        self.roadMark = roadMark
+    def add_roadMark(self, value):
+        self.roadMark.append(value)
+    def insert_roadMark_at(self, index, value):
+        self.roadMark.insert(index, value)
+    def replace_roadMark_at(self, index, value):
+        self.roadMark[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_level(self):
+        return self.level
+    def set_level(self, level):
+        self.level = level
+    def validate_e_laneType(self, value):
+        # Validate type e_laneType, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['none', 'driving', 'stop', 'shoulder', 'biking', 'sidewalk', 'border', 'restricted', 'parking', 'bidirectional', 'median', 'special1', 'special2', 'special3', 'roadWorks', 'tram', 'rail', 'entry', 'exit', 'offRamp', 'onRamp', 'connectingRamp', 'bus', 'taxi', 'HOV', 'mwyEntry', 'mwyExit']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_laneType' % {"value" : value.encode("utf-8")} )
+    def validate_t_bool(self, value):
+        # Validate type t_bool, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['true', 'false']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on t_bool' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.link is not None or
+            self.roadMark or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_center_lane', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_center_lane')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_center_lane')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_center_lane', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_center_lane'):
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id'))
+        if 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+        if self.level is not None and 'level' not in already_processed:
+            already_processed.add('level')
+            outfile.write(' level=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.level), input_name='level')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_center_lane', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.link is not None:
+            namespaceprefix_ = self.link_nsprefix_ + ':' if (UseCapturedNS_ and self.link_nsprefix_) else ''
+            self.link.export(outfile, level, namespaceprefix_, namespacedef_='', name_='link', pretty_print=pretty_print)
+        for roadMark_ in self.roadMark:
+            namespaceprefix_ = self.roadMark_nsprefix_ + ':' if (UseCapturedNS_ and self.roadMark_nsprefix_) else ''
+            roadMark_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='roadMark', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            try:
+                self.id = int(value)
+            except ValueError as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+        value = find_attr_value_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            self.type_ = value
+            self.validate_e_laneType(self.type_)    # validate type e_laneType
+        value = find_attr_value_('level', node)
+        if value is not None and 'level' not in already_processed:
+            already_processed.add('level')
+            self.level = value
+            self.validate_t_bool(self.level)    # validate type t_bool
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'link':
+            obj_ = t_road_lanes_laneSection_lcr_lane_link.factory(parent_object_=self)
+            obj_.build(child_)
+            self.link = obj_
+            obj_.original_tagname_ = 'link'
+        elif nodeName_ == 'roadMark':
+            obj_ = t_road_lanes_laneSection_lcr_lane_roadMark.factory(parent_object_=self)
+            obj_.build(child_)
+            self.roadMark.append(obj_)
+            obj_.original_tagname_ = 'roadMark'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_center_lane
+
+
+class t_road_lanes_laneSection_lr_lane(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, type_=None, level=None, link=None, width=None, border=None, roadMark=None, material=None, visibility=None, speed=None, access=None, height=None, rule=None, userData=None, include=None, dataQuality=None, extensiontype_=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.level = _cast(None, level)
+        self.level_nsprefix_ = None
+        self.link = link
+        self.link_nsprefix_ = None
+        if width is None:
+            self.width = []
+        else:
+            self.width = width
+        self.width_nsprefix_ = None
+        if border is None:
+            self.border = []
+        else:
+            self.border = border
+        self.border_nsprefix_ = None
+        if roadMark is None:
+            self.roadMark = []
+        else:
+            self.roadMark = roadMark
+        self.roadMark_nsprefix_ = None
+        if material is None:
+            self.material = []
+        else:
+            self.material = material
+        self.material_nsprefix_ = None
+        if visibility is None:
+            self.visibility = []
+        else:
+            self.visibility = visibility
+        self.visibility_nsprefix_ = None
+        if speed is None:
+            self.speed = []
+        else:
+            self.speed = speed
+        self.speed_nsprefix_ = None
+        if access is None:
+            self.access = []
+        else:
+            self.access = access
+        self.access_nsprefix_ = None
+        if height is None:
+            self.height = []
+        else:
+            self.height = height
+        self.height_nsprefix_ = None
+        if rule is None:
+            self.rule = []
+        else:
+            self.rule = rule
+        self.rule_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+        self.extensiontype_ = extensiontype_
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lr_lane)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lr_lane.subclass:
+            return t_road_lanes_laneSection_lr_lane.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lr_lane(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_link(self):
+        return self.link
+    def set_link(self, link):
+        self.link = link
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def add_width(self, value):
+        self.width.append(value)
+    def insert_width_at(self, index, value):
+        self.width.insert(index, value)
+    def replace_width_at(self, index, value):
+        self.width[index] = value
+    def get_border(self):
+        return self.border
+    def set_border(self, border):
+        self.border = border
+    def add_border(self, value):
+        self.border.append(value)
+    def insert_border_at(self, index, value):
+        self.border.insert(index, value)
+    def replace_border_at(self, index, value):
+        self.border[index] = value
+    def get_roadMark(self):
+        return self.roadMark
+    def set_roadMark(self, roadMark):
+        self.roadMark = roadMark
+    def add_roadMark(self, value):
+        self.roadMark.append(value)
+    def insert_roadMark_at(self, index, value):
+        self.roadMark.insert(index, value)
+    def replace_roadMark_at(self, index, value):
+        self.roadMark[index] = value
+    def get_material(self):
+        return self.material
+    def set_material(self, material):
+        self.material = material
+    def add_material(self, value):
+        self.material.append(value)
+    def insert_material_at(self, index, value):
+        self.material.insert(index, value)
+    def replace_material_at(self, index, value):
+        self.material[index] = value
+    def get_visibility(self):
+        return self.visibility
+    def set_visibility(self, visibility):
+        self.visibility = visibility
+    def add_visibility(self, value):
+        self.visibility.append(value)
+    def insert_visibility_at(self, index, value):
+        self.visibility.insert(index, value)
+    def replace_visibility_at(self, index, value):
+        self.visibility[index] = value
+    def get_speed(self):
+        return self.speed
+    def set_speed(self, speed):
+        self.speed = speed
+    def add_speed(self, value):
+        self.speed.append(value)
+    def insert_speed_at(self, index, value):
+        self.speed.insert(index, value)
+    def replace_speed_at(self, index, value):
+        self.speed[index] = value
+    def get_access(self):
+        return self.access
+    def set_access(self, access):
+        self.access = access
+    def add_access(self, value):
+        self.access.append(value)
+    def insert_access_at(self, index, value):
+        self.access.insert(index, value)
+    def replace_access_at(self, index, value):
+        self.access[index] = value
+    def get_height(self):
+        return self.height
+    def set_height(self, height):
+        self.height = height
+    def add_height(self, value):
+        self.height.append(value)
+    def insert_height_at(self, index, value):
+        self.height.insert(index, value)
+    def replace_height_at(self, index, value):
+        self.height[index] = value
+    def get_rule(self):
+        return self.rule
+    def set_rule(self, rule):
+        self.rule = rule
+    def add_rule(self, value):
+        self.rule.append(value)
+    def insert_rule_at(self, index, value):
+        self.rule.insert(index, value)
+    def replace_rule_at(self, index, value):
+        self.rule[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_level(self):
+        return self.level
+    def set_level(self, level):
+        self.level = level
+    def get_extensiontype_(self): return self.extensiontype_
+    def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_
+    def validate_e_laneType(self, value):
+        # Validate type e_laneType, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['none', 'driving', 'stop', 'shoulder', 'biking', 'sidewalk', 'border', 'restricted', 'parking', 'bidirectional', 'median', 'special1', 'special2', 'special3', 'roadWorks', 'tram', 'rail', 'entry', 'exit', 'offRamp', 'onRamp', 'connectingRamp', 'bus', 'taxi', 'HOV', 'mwyEntry', 'mwyExit']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_laneType' % {"value" : value.encode("utf-8")} )
+    def validate_t_bool(self, value):
+        # Validate type t_bool, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['true', 'false']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on t_bool' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.link is not None or
+            self.width or
+            self.border or
+            self.roadMark or
+            self.material or
+            self.visibility or
+            self.speed or
+            self.access or
+            self.height or
+            self.rule or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lr_lane')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lr_lane')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lr_lane', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lr_lane'):
+        if 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+        if self.level is not None and 'level' not in already_processed:
+            already_processed.add('level')
+            outfile.write(' level=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.level), input_name='level')), ))
+        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"')
+            if ":" not in self.extensiontype_:
+                imported_ns_type_prefix_ = GenerateDSNamespaceTypePrefixes_.get(self.extensiontype_, '')
+                outfile.write(' xsi:type="%s%s"' % (imported_ns_type_prefix_, self.extensiontype_))
+            else:
+                outfile.write(' xsi:type="%s"' % self.extensiontype_)
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.link is not None:
+            namespaceprefix_ = self.link_nsprefix_ + ':' if (UseCapturedNS_ and self.link_nsprefix_) else ''
+            self.link.export(outfile, level, namespaceprefix_, namespacedef_='', name_='link', pretty_print=pretty_print)
+        for width_ in self.width:
+            namespaceprefix_ = self.width_nsprefix_ + ':' if (UseCapturedNS_ and self.width_nsprefix_) else ''
+            width_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='width', pretty_print=pretty_print)
+        for border_ in self.border:
+            namespaceprefix_ = self.border_nsprefix_ + ':' if (UseCapturedNS_ and self.border_nsprefix_) else ''
+            border_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='border', pretty_print=pretty_print)
+        for roadMark_ in self.roadMark:
+            namespaceprefix_ = self.roadMark_nsprefix_ + ':' if (UseCapturedNS_ and self.roadMark_nsprefix_) else ''
+            roadMark_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='roadMark', pretty_print=pretty_print)
+        for material_ in self.material:
+            namespaceprefix_ = self.material_nsprefix_ + ':' if (UseCapturedNS_ and self.material_nsprefix_) else ''
+            material_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='material', pretty_print=pretty_print)
+        for visibility_ in self.visibility:
+            namespaceprefix_ = self.visibility_nsprefix_ + ':' if (UseCapturedNS_ and self.visibility_nsprefix_) else ''
+            visibility_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='visibility', pretty_print=pretty_print)
+        for speed_ in self.speed:
+            namespaceprefix_ = self.speed_nsprefix_ + ':' if (UseCapturedNS_ and self.speed_nsprefix_) else ''
+            speed_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='speed', pretty_print=pretty_print)
+        for access_ in self.access:
+            namespaceprefix_ = self.access_nsprefix_ + ':' if (UseCapturedNS_ and self.access_nsprefix_) else ''
+            access_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='access', pretty_print=pretty_print)
+        for height_ in self.height:
+            namespaceprefix_ = self.height_nsprefix_ + ':' if (UseCapturedNS_ and self.height_nsprefix_) else ''
+            height_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='height', pretty_print=pretty_print)
+        for rule_ in self.rule:
+            namespaceprefix_ = self.rule_nsprefix_ + ':' if (UseCapturedNS_ and self.rule_nsprefix_) else ''
+            rule_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='rule', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            self.type_ = value
+            self.validate_e_laneType(self.type_)    # validate type e_laneType
+        value = find_attr_value_('level', node)
+        if value is not None and 'level' not in already_processed:
+            already_processed.add('level')
+            self.level = value
+            self.validate_t_bool(self.level)    # validate type t_bool
+        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_ == 'link':
+            obj_ = t_road_lanes_laneSection_lcr_lane_link.factory(parent_object_=self)
+            obj_.build(child_)
+            self.link = obj_
+            obj_.original_tagname_ = 'link'
+        elif nodeName_ == 'width':
+            obj_ = t_road_lanes_laneSection_lr_lane_width.factory(parent_object_=self)
+            obj_.build(child_)
+            self.width.append(obj_)
+            obj_.original_tagname_ = 'width'
+        elif nodeName_ == 'border':
+            obj_ = t_road_lanes_laneSection_lr_lane_border.factory(parent_object_=self)
+            obj_.build(child_)
+            self.border.append(obj_)
+            obj_.original_tagname_ = 'border'
+        elif nodeName_ == 'roadMark':
+            obj_ = t_road_lanes_laneSection_lcr_lane_roadMark.factory(parent_object_=self)
+            obj_.build(child_)
+            self.roadMark.append(obj_)
+            obj_.original_tagname_ = 'roadMark'
+        elif nodeName_ == 'material':
+            obj_ = t_road_lanes_laneSection_lr_lane_material.factory(parent_object_=self)
+            obj_.build(child_)
+            self.material.append(obj_)
+            obj_.original_tagname_ = 'material'
+        elif nodeName_ == 'visibility':
+            obj_ = t_road_lanes_laneSection_lr_lane_visibility.factory(parent_object_=self)
+            obj_.build(child_)
+            self.visibility.append(obj_)
+            obj_.original_tagname_ = 'visibility'
+        elif nodeName_ == 'speed':
+            obj_ = t_road_lanes_laneSection_lr_lane_speed.factory(parent_object_=self)
+            obj_.build(child_)
+            self.speed.append(obj_)
+            obj_.original_tagname_ = 'speed'
+        elif nodeName_ == 'access':
+            obj_ = t_road_lanes_laneSection_lr_lane_access.factory(parent_object_=self)
+            obj_.build(child_)
+            self.access.append(obj_)
+            obj_.original_tagname_ = 'access'
+        elif nodeName_ == 'height':
+            obj_ = t_road_lanes_laneSection_lr_lane_height.factory(parent_object_=self)
+            obj_.build(child_)
+            self.height.append(obj_)
+            obj_.original_tagname_ = 'height'
+        elif nodeName_ == 'rule':
+            obj_ = t_road_lanes_laneSection_lr_lane_rule.factory(parent_object_=self)
+            obj_.build(child_)
+            self.rule.append(obj_)
+            obj_.original_tagname_ = 'rule'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lr_lane
+
+
+class t_road_lanes_laneSection_left_lane(t_road_lanes_laneSection_lr_lane):
+    subclass = None
+    superclass = t_road_lanes_laneSection_lr_lane
+    def __init__(self, type_=None, level=None, link=None, width=None, border=None, roadMark=None, material=None, visibility=None, speed=None, access=None, height=None, rule=None, userData=None, include=None, dataQuality=None, id=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        super(t_road_lanes_laneSection_left_lane, self).__init__(type_, level, link, width, border, roadMark, material, visibility, speed, access, height, rule, userData, include, dataQuality,  **kwargs_)
+        self.id = _cast(int, id)
+        self.id_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_left_lane)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_left_lane.subclass:
+            return t_road_lanes_laneSection_left_lane.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_left_lane(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def hasContent_(self):
+        if (
+            super(t_road_lanes_laneSection_left_lane, self).hasContent_()
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_left_lane', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_left_lane')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_left_lane')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_left_lane', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_left_lane'):
+        super(t_road_lanes_laneSection_left_lane, self).exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_left_lane')
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_left_lane', fromsubclass_=False, pretty_print=True):
+        super(t_road_lanes_laneSection_left_lane, self).exportChildren(outfile, level, namespaceprefix_, namespacedef_, name_, True, pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            try:
+                self.id = int(value)
+            except ValueError as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.id <= 0:
+                raise_parse_error(node, 'Invalid PositiveInteger')
+        super(t_road_lanes_laneSection_left_lane, self).buildAttributes(node, attrs, already_processed)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        super(t_road_lanes_laneSection_left_lane, self).buildChildren(child_, node, nodeName_, True)
+        pass
+# end class t_road_lanes_laneSection_left_lane
+
+
+class t_road_lanes_laneSection_right_lane(t_road_lanes_laneSection_lr_lane):
+    subclass = None
+    superclass = t_road_lanes_laneSection_lr_lane
+    def __init__(self, type_=None, level=None, link=None, width=None, border=None, roadMark=None, material=None, visibility=None, speed=None, access=None, height=None, rule=None, userData=None, include=None, dataQuality=None, id=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        super(t_road_lanes_laneSection_right_lane, self).__init__(type_, level, link, width, border, roadMark, material, visibility, speed, access, height, rule, userData, include, dataQuality,  **kwargs_)
+        self.id = _cast(int, id)
+        self.id_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_right_lane)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_right_lane.subclass:
+            return t_road_lanes_laneSection_right_lane.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_right_lane(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def hasContent_(self):
+        if (
+            super(t_road_lanes_laneSection_right_lane, self).hasContent_()
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_right_lane', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_right_lane')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_right_lane')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_right_lane', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_right_lane'):
+        super(t_road_lanes_laneSection_right_lane, self).exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_right_lane')
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_right_lane', fromsubclass_=False, pretty_print=True):
+        super(t_road_lanes_laneSection_right_lane, self).exportChildren(outfile, level, namespaceprefix_, namespacedef_, name_, True, pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            try:
+                self.id = int(value)
+            except ValueError as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.id >= 0:
+                raise_parse_error(node, 'Invalid NegativeInteger')
+        super(t_road_lanes_laneSection_right_lane, self).buildAttributes(node, attrs, already_processed)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        super(t_road_lanes_laneSection_right_lane, self).buildChildren(child_, node, nodeName_, True)
+        pass
+# end class t_road_lanes_laneSection_right_lane
+
+
+class t_road_lanes_laneSection_lcr_lane_link(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, predecessor=None, successor=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if predecessor is None:
+            self.predecessor = []
+        else:
+            self.predecessor = predecessor
+        self.predecessor_nsprefix_ = None
+        if successor is None:
+            self.successor = []
+        else:
+            self.successor = successor
+        self.successor_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lcr_lane_link)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lcr_lane_link.subclass:
+            return t_road_lanes_laneSection_lcr_lane_link.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lcr_lane_link(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_predecessor(self):
+        return self.predecessor
+    def set_predecessor(self, predecessor):
+        self.predecessor = predecessor
+    def add_predecessor(self, value):
+        self.predecessor.append(value)
+    def insert_predecessor_at(self, index, value):
+        self.predecessor.insert(index, value)
+    def replace_predecessor_at(self, index, value):
+        self.predecessor[index] = value
+    def get_successor(self):
+        return self.successor
+    def set_successor(self, successor):
+        self.successor = successor
+    def add_successor(self, value):
+        self.successor.append(value)
+    def insert_successor_at(self, index, value):
+        self.successor.insert(index, value)
+    def replace_successor_at(self, index, value):
+        self.successor[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.predecessor or
+            self.successor or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_link', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lcr_lane_link')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lcr_lane_link')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lcr_lane_link', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lcr_lane_link'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_link', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for predecessor_ in self.predecessor:
+            namespaceprefix_ = self.predecessor_nsprefix_ + ':' if (UseCapturedNS_ and self.predecessor_nsprefix_) else ''
+            predecessor_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='predecessor', pretty_print=pretty_print)
+        for successor_ in self.successor:
+            namespaceprefix_ = self.successor_nsprefix_ + ':' if (UseCapturedNS_ and self.successor_nsprefix_) else ''
+            successor_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='successor', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'predecessor':
+            obj_ = t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor.factory(parent_object_=self)
+            obj_.build(child_)
+            self.predecessor.append(obj_)
+            obj_.original_tagname_ = 'predecessor'
+        elif nodeName_ == 'successor':
+            obj_ = t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor.factory(parent_object_=self)
+            obj_.build(child_)
+            self.successor.append(obj_)
+            obj_.original_tagname_ = 'successor'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lcr_lane_link
+
+
+class t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(int, id)
+        self.id_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor.subclass:
+            return t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor'):
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            try:
+                self.id = int(value)
+            except ValueError as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor
+
+
+class t_road_lanes_laneSection_lr_lane_width(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, a=None, b=None, c=None, d=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lr_lane_width)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lr_lane_width.subclass:
+            return t_road_lanes_laneSection_lr_lane_width.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lr_lane_width(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_width', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lr_lane_width')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lr_lane_width')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lr_lane_width', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lr_lane_width'):
+        if 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_width', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            try:
+                self.sOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sOffset): %s' % exp)
+            self.validate_t_grEqZero(self.sOffset)    # validate type t_grEqZero
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            try:
+                self.a = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (a): %s' % exp)
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            try:
+                self.b = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (b): %s' % exp)
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            try:
+                self.c = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (c): %s' % exp)
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            try:
+                self.d = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (d): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lr_lane_width
+
+
+class t_road_lanes_laneSection_lr_lane_border(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, a=None, b=None, c=None, d=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lr_lane_border)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lr_lane_border.subclass:
+            return t_road_lanes_laneSection_lr_lane_border.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lr_lane_border(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_border', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lr_lane_border')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lr_lane_border')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lr_lane_border', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lr_lane_border'):
+        if 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_border', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            try:
+                self.sOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sOffset): %s' % exp)
+            self.validate_t_grEqZero(self.sOffset)    # validate type t_grEqZero
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            try:
+                self.a = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (a): %s' % exp)
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            try:
+                self.b = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (b): %s' % exp)
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            try:
+                self.c = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (c): %s' % exp)
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            try:
+                self.d = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (d): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lr_lane_border
+
+
+class t_road_lanes_laneSection_lcr_lane_roadMark(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, type__attr=None, weight=None, color=None, material=None, width=None, laneChange=None, height=None, sway=None, type_=None, explicit=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.type__attr = _cast(None, type__attr)
+        self.type__attr_nsprefix_ = None
+        self.weight = _cast(None, weight)
+        self.weight_nsprefix_ = None
+        self.color = _cast(None, color)
+        self.color_nsprefix_ = None
+        self.material = _cast(None, material)
+        self.material_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        self.laneChange = _cast(None, laneChange)
+        self.laneChange_nsprefix_ = None
+        self.height = _cast(float, height)
+        self.height_nsprefix_ = None
+        if sway is None:
+            self.sway = []
+        else:
+            self.sway = sway
+        self.sway_nsprefix_ = None
+        self.type_ = type_
+        self.type__nsprefix_ = None
+        self.explicit = explicit
+        self.explicit_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lcr_lane_roadMark)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lcr_lane_roadMark.subclass:
+            return t_road_lanes_laneSection_lcr_lane_roadMark.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lcr_lane_roadMark(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_sway(self):
+        return self.sway
+    def set_sway(self, sway):
+        self.sway = sway
+    def add_sway(self, value):
+        self.sway.append(value)
+    def insert_sway_at(self, index, value):
+        self.sway.insert(index, value)
+    def replace_sway_at(self, index, value):
+        self.sway[index] = value
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_explicit(self):
+        return self.explicit
+    def set_explicit(self, explicit):
+        self.explicit = explicit
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_type__attr(self):
+        return self.type__attr
+    def set_type__attr(self, type__attr):
+        self.type__attr = type__attr
+    def get_weight(self):
+        return self.weight
+    def set_weight(self, weight):
+        self.weight = weight
+    def get_color(self):
+        return self.color
+    def set_color(self, color):
+        self.color = color
+    def get_material(self):
+        return self.material
+    def set_material(self, material):
+        self.material = material
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def get_laneChange(self):
+        return self.laneChange
+    def set_laneChange(self, laneChange):
+        self.laneChange = laneChange
+    def get_height(self):
+        return self.height
+    def set_height(self, height):
+        self.height = height
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_roadMarkWeight(self, value):
+        # Validate type e_roadMarkWeight, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['standard', 'bold']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_roadMarkWeight' % {"value" : value.encode("utf-8")} )
+    def validate_e_roadMarkColor(self, value):
+        # Validate type e_roadMarkColor, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['standard', 'blue', 'green', 'red', 'white', 'yellow', 'orange']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_roadMarkColor' % {"value" : value.encode("utf-8")} )
+    def validate_e_road_lanes_laneSection_lcr_lane_roadMark_laneChange(self, value):
+        # Validate type e_road_lanes_laneSection_lcr_lane_roadMark_laneChange, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['increase', 'decrease', 'both', 'none']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_road_lanes_laneSection_lcr_lane_roadMark_laneChange' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.sway or
+            self.type_ is not None or
+            self.explicit is not None or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lcr_lane_roadMark')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lcr_lane_roadMark')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lcr_lane_roadMark', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark'):
+        if 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.type__attr is not None and 'type__attr' not in already_processed:
+            already_processed.add('type__attr')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type__attr), input_name='type__attr')), ))
+        if self.weight is not None and 'weight' not in already_processed:
+            already_processed.add('weight')
+            outfile.write(' weight=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.weight), input_name='weight')), ))
+        if 'color' not in already_processed:
+            already_processed.add('color')
+            outfile.write(' color=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.color), input_name='color')), ))
+        if self.material is not None and 'material' not in already_processed:
+            already_processed.add('material')
+            outfile.write(' material=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.material), input_name='material')), ))
+        if self.width is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+        if self.laneChange is not None and 'laneChange' not in already_processed:
+            already_processed.add('laneChange')
+            outfile.write(' laneChange=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.laneChange), input_name='laneChange')), ))
+        if self.height is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            outfile.write(' height="%s"' % self.gds_format_double(self.height, input_name='height'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for sway_ in self.sway:
+            namespaceprefix_ = self.sway_nsprefix_ + ':' if (UseCapturedNS_ and self.sway_nsprefix_) else ''
+            sway_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='sway', pretty_print=pretty_print)
+        if self.type_ is not None:
+            namespaceprefix_ = self.type__nsprefix_ + ':' if (UseCapturedNS_ and self.type__nsprefix_) else ''
+            self.type_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='type', pretty_print=pretty_print)
+        if self.explicit is not None:
+            namespaceprefix_ = self.explicit_nsprefix_ + ':' if (UseCapturedNS_ and self.explicit_nsprefix_) else ''
+            self.explicit.export(outfile, level, namespaceprefix_, namespacedef_='', name_='explicit', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            try:
+                self.sOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sOffset): %s' % exp)
+            self.validate_t_grEqZero(self.sOffset)    # validate type t_grEqZero
+        value = find_attr_value_('type', node)
+        if value is not None and 'type__attr' not in already_processed:
+            already_processed.add('type__attr')
+            self.type__attr = value
+        value = find_attr_value_('weight', node)
+        if value is not None and 'weight' not in already_processed:
+            already_processed.add('weight')
+            self.weight = value
+            self.validate_e_roadMarkWeight(self.weight)    # validate type e_roadMarkWeight
+        value = find_attr_value_('color', node)
+        if value is not None and 'color' not in already_processed:
+            already_processed.add('color')
+            self.color = value
+            self.validate_e_roadMarkColor(self.color)    # validate type e_roadMarkColor
+        value = find_attr_value_('material', node)
+        if value is not None and 'material' not in already_processed:
+            already_processed.add('material')
+            self.material = value
+        value = find_attr_value_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            try:
+                self.width = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (width): %s' % exp)
+            self.validate_t_grEqZero(self.width)    # validate type t_grEqZero
+        value = find_attr_value_('laneChange', node)
+        if value is not None and 'laneChange' not in already_processed:
+            already_processed.add('laneChange')
+            self.laneChange = value
+            self.validate_e_road_lanes_laneSection_lcr_lane_roadMark_laneChange(self.laneChange)    # validate type e_road_lanes_laneSection_lcr_lane_roadMark_laneChange
+        value = find_attr_value_('height', node)
+        if value is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            try:
+                self.height = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (height): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'sway':
+            obj_ = t_road_lanes_laneSection_lcr_lane_roadMark_sway.factory(parent_object_=self)
+            obj_.build(child_)
+            self.sway.append(obj_)
+            obj_.original_tagname_ = 'sway'
+        elif nodeName_ == 'type':
+            obj_ = t_road_lanes_laneSection_lcr_lane_roadMark_type.factory(parent_object_=self)
+            obj_.build(child_)
+            self.type_ = obj_
+            obj_.original_tagname_ = 'type'
+        elif nodeName_ == 'explicit':
+            obj_ = t_road_lanes_laneSection_lcr_lane_roadMark_explicit.factory(parent_object_=self)
+            obj_.build(child_)
+            self.explicit = obj_
+            obj_.original_tagname_ = 'explicit'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lcr_lane_roadMark
+
+
+class t_road_lanes_laneSection_lcr_lane_roadMark_sway(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, ds=None, a=None, b=None, c=None, d=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.ds = _cast(float, ds)
+        self.ds_nsprefix_ = None
+        self.a = _cast(float, a)
+        self.a_nsprefix_ = None
+        self.b = _cast(float, b)
+        self.b_nsprefix_ = None
+        self.c = _cast(float, c)
+        self.c_nsprefix_ = None
+        self.d = _cast(float, d)
+        self.d_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lcr_lane_roadMark_sway)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lcr_lane_roadMark_sway.subclass:
+            return t_road_lanes_laneSection_lcr_lane_roadMark_sway.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lcr_lane_roadMark_sway(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_ds(self):
+        return self.ds
+    def set_ds(self, ds):
+        self.ds = ds
+    def get_a(self):
+        return self.a
+    def set_a(self, a):
+        self.a = a
+    def get_b(self):
+        return self.b
+    def set_b(self, b):
+        self.b = b
+    def get_c(self):
+        return self.c
+    def set_c(self, c):
+        self.c = c
+    def get_d(self):
+        return self.d
+    def set_d(self, d):
+        self.d = d
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_sway', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lcr_lane_roadMark_sway')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lcr_lane_roadMark_sway')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lcr_lane_roadMark_sway', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_sway'):
+        if 'ds' not in already_processed:
+            already_processed.add('ds')
+            outfile.write(' ds="%s"' % self.gds_format_double(self.ds, input_name='ds'))
+        if 'a' not in already_processed:
+            already_processed.add('a')
+            outfile.write(' a="%s"' % self.gds_format_double(self.a, input_name='a'))
+        if 'b' not in already_processed:
+            already_processed.add('b')
+            outfile.write(' b="%s"' % self.gds_format_double(self.b, input_name='b'))
+        if 'c' not in already_processed:
+            already_processed.add('c')
+            outfile.write(' c="%s"' % self.gds_format_double(self.c, input_name='c'))
+        if 'd' not in already_processed:
+            already_processed.add('d')
+            outfile.write(' d="%s"' % self.gds_format_double(self.d, input_name='d'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_sway', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('ds', node)
+        if value is not None and 'ds' not in already_processed:
+            already_processed.add('ds')
+            try:
+                self.ds = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (ds): %s' % exp)
+            self.validate_t_grEqZero(self.ds)    # validate type t_grEqZero
+        value = find_attr_value_('a', node)
+        if value is not None and 'a' not in already_processed:
+            already_processed.add('a')
+            try:
+                self.a = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (a): %s' % exp)
+        value = find_attr_value_('b', node)
+        if value is not None and 'b' not in already_processed:
+            already_processed.add('b')
+            try:
+                self.b = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (b): %s' % exp)
+        value = find_attr_value_('c', node)
+        if value is not None and 'c' not in already_processed:
+            already_processed.add('c')
+            try:
+                self.c = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (c): %s' % exp)
+        value = find_attr_value_('d', node)
+        if value is not None and 'd' not in already_processed:
+            already_processed.add('d')
+            try:
+                self.d = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (d): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lcr_lane_roadMark_sway
+
+
+class t_road_lanes_laneSection_lcr_lane_roadMark_type(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, width=None, line=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        if line is None:
+            self.line = []
+        else:
+            self.line = line
+        self.line_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lcr_lane_roadMark_type)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lcr_lane_roadMark_type.subclass:
+            return t_road_lanes_laneSection_lcr_lane_roadMark_type.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lcr_lane_roadMark_type(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_line(self):
+        return self.line
+    def set_line(self, line):
+        self.line = line
+    def add_line(self, value):
+        self.line.append(value)
+    def insert_line_at(self, index, value):
+        self.line.insert(index, value)
+    def replace_line_at(self, index, value):
+        self.line[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.line or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_type', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lcr_lane_roadMark_type')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lcr_lane_roadMark_type')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lcr_lane_roadMark_type', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_type'):
+        if 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_type', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for line_ in self.line:
+            namespaceprefix_ = self.line_nsprefix_ + ':' if (UseCapturedNS_ and self.line_nsprefix_) else ''
+            line_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='line', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('name', node)
+        if value is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            self.name = value
+        value = find_attr_value_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            try:
+                self.width = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (width): %s' % exp)
+            self.validate_t_grEqZero(self.width)    # validate type t_grEqZero
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'line':
+            obj_ = t_road_lanes_laneSection_lcr_lane_roadMark_type_line.factory(parent_object_=self)
+            obj_.build(child_)
+            self.line.append(obj_)
+            obj_.original_tagname_ = 'line'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lcr_lane_roadMark_type
+
+
+class t_road_lanes_laneSection_lcr_lane_roadMark_type_line(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, length=None, space=None, tOffset=None, sOffset=None, rule=None, width=None, color=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.space = _cast(float, space)
+        self.space_nsprefix_ = None
+        self.tOffset = _cast(float, tOffset)
+        self.tOffset_nsprefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.rule = _cast(None, rule)
+        self.rule_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        self.color = _cast(None, color)
+        self.color_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lcr_lane_roadMark_type_line)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lcr_lane_roadMark_type_line.subclass:
+            return t_road_lanes_laneSection_lcr_lane_roadMark_type_line.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lcr_lane_roadMark_type_line(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def get_space(self):
+        return self.space
+    def set_space(self, space):
+        self.space = space
+    def get_tOffset(self):
+        return self.tOffset
+    def set_tOffset(self, tOffset):
+        self.tOffset = tOffset
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_rule(self):
+        return self.rule
+    def set_rule(self, rule):
+        self.rule = rule
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def get_color(self):
+        return self.color
+    def set_color(self, color):
+        self.color = color
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_roadMarkRule(self, value):
+        # Validate type e_roadMarkRule, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['no passing', 'caution', 'none']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_roadMarkRule' % {"value" : value.encode("utf-8")} )
+    def validate_e_roadMarkColor(self, value):
+        # Validate type e_roadMarkColor, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['standard', 'blue', 'green', 'red', 'white', 'yellow', 'orange']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_roadMarkColor' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_type_line', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lcr_lane_roadMark_type_line')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lcr_lane_roadMark_type_line')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lcr_lane_roadMark_type_line', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_type_line'):
+        if 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+        if 'space' not in already_processed:
+            already_processed.add('space')
+            outfile.write(' space="%s"' % self.gds_format_double(self.space, input_name='space'))
+        if 'tOffset' not in already_processed:
+            already_processed.add('tOffset')
+            outfile.write(' tOffset="%s"' % self.gds_format_double(self.tOffset, input_name='tOffset'))
+        if 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.rule is not None and 'rule' not in already_processed:
+            already_processed.add('rule')
+            outfile.write(' rule=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.rule), input_name='rule')), ))
+        if 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+        if self.color is not None and 'color' not in already_processed:
+            already_processed.add('color')
+            outfile.write(' color=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.color), input_name='color')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_type_line', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            try:
+                self.length = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (length): %s' % exp)
+            self.validate_t_grEqZero(self.length)    # validate type t_grEqZero
+        value = find_attr_value_('space', node)
+        if value is not None and 'space' not in already_processed:
+            already_processed.add('space')
+            try:
+                self.space = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (space): %s' % exp)
+            self.validate_t_grEqZero(self.space)    # validate type t_grEqZero
+        value = find_attr_value_('tOffset', node)
+        if value is not None and 'tOffset' not in already_processed:
+            already_processed.add('tOffset')
+            try:
+                self.tOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (tOffset): %s' % exp)
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            try:
+                self.sOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sOffset): %s' % exp)
+            self.validate_t_grEqZero(self.sOffset)    # validate type t_grEqZero
+        value = find_attr_value_('rule', node)
+        if value is not None and 'rule' not in already_processed:
+            already_processed.add('rule')
+            self.rule = value
+            self.validate_e_roadMarkRule(self.rule)    # validate type e_roadMarkRule
+        value = find_attr_value_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            try:
+                self.width = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (width): %s' % exp)
+            self.validate_t_grEqZero(self.width)    # validate type t_grEqZero
+        value = find_attr_value_('color', node)
+        if value is not None and 'color' not in already_processed:
+            already_processed.add('color')
+            self.color = value
+            self.validate_e_roadMarkColor(self.color)    # validate type e_roadMarkColor
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lcr_lane_roadMark_type_line
+
+
+class t_road_lanes_laneSection_lcr_lane_roadMark_explicit(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, line=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if line is None:
+            self.line = []
+        else:
+            self.line = line
+        self.line_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lcr_lane_roadMark_explicit)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lcr_lane_roadMark_explicit.subclass:
+            return t_road_lanes_laneSection_lcr_lane_roadMark_explicit.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lcr_lane_roadMark_explicit(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_line(self):
+        return self.line
+    def set_line(self, line):
+        self.line = line
+    def add_line(self, value):
+        self.line.append(value)
+    def insert_line_at(self, index, value):
+        self.line.insert(index, value)
+    def replace_line_at(self, index, value):
+        self.line[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.line or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_explicit', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lcr_lane_roadMark_explicit')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lcr_lane_roadMark_explicit')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lcr_lane_roadMark_explicit', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_explicit'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_explicit', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for line_ in self.line:
+            namespaceprefix_ = self.line_nsprefix_ + ':' if (UseCapturedNS_ and self.line_nsprefix_) else ''
+            line_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='line', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'line':
+            obj_ = t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line.factory(parent_object_=self)
+            obj_.build(child_)
+            self.line.append(obj_)
+            obj_.original_tagname_ = 'line'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lcr_lane_roadMark_explicit
+
+
+class t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, length=None, tOffset=None, sOffset=None, rule=None, width=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.tOffset = _cast(float, tOffset)
+        self.tOffset_nsprefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.rule = _cast(None, rule)
+        self.rule_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line.subclass:
+            return t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def get_tOffset(self):
+        return self.tOffset
+    def set_tOffset(self, tOffset):
+        self.tOffset = tOffset
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_rule(self):
+        return self.rule
+    def set_rule(self, rule):
+        self.rule = rule
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_roadMarkRule(self, value):
+        # Validate type e_roadMarkRule, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['no passing', 'caution', 'none']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_roadMarkRule' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line'):
+        if 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+        if 'tOffset' not in already_processed:
+            already_processed.add('tOffset')
+            outfile.write(' tOffset="%s"' % self.gds_format_double(self.tOffset, input_name='tOffset'))
+        if 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.rule is not None and 'rule' not in already_processed:
+            already_processed.add('rule')
+            outfile.write(' rule=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.rule), input_name='rule')), ))
+        if 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            try:
+                self.length = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (length): %s' % exp)
+            self.validate_t_grEqZero(self.length)    # validate type t_grEqZero
+        value = find_attr_value_('tOffset', node)
+        if value is not None and 'tOffset' not in already_processed:
+            already_processed.add('tOffset')
+            try:
+                self.tOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (tOffset): %s' % exp)
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            try:
+                self.sOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sOffset): %s' % exp)
+            self.validate_t_grEqZero(self.sOffset)    # validate type t_grEqZero
+        value = find_attr_value_('rule', node)
+        if value is not None and 'rule' not in already_processed:
+            already_processed.add('rule')
+            self.rule = value
+            self.validate_e_roadMarkRule(self.rule)    # validate type e_roadMarkRule
+        value = find_attr_value_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            try:
+                self.width = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (width): %s' % exp)
+            self.validate_t_grEqZero(self.width)    # validate type t_grEqZero
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line
+
+
+class t_road_lanes_laneSection_lr_lane_material(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, surface=None, friction=None, roughness=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.surface = _cast(None, surface)
+        self.surface_nsprefix_ = None
+        self.friction = _cast(float, friction)
+        self.friction_nsprefix_ = None
+        self.roughness = _cast(float, roughness)
+        self.roughness_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lr_lane_material)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lr_lane_material.subclass:
+            return t_road_lanes_laneSection_lr_lane_material.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lr_lane_material(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_surface(self):
+        return self.surface
+    def set_surface(self, surface):
+        self.surface = surface
+    def get_friction(self):
+        return self.friction
+    def set_friction(self, friction):
+        self.friction = friction
+    def get_roughness(self):
+        return self.roughness
+    def set_roughness(self, roughness):
+        self.roughness = roughness
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_material', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lr_lane_material')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lr_lane_material')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lr_lane_material', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lr_lane_material'):
+        if 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.surface is not None and 'surface' not in already_processed:
+            already_processed.add('surface')
+            outfile.write(' surface=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.surface), input_name='surface')), ))
+        if 'friction' not in already_processed:
+            already_processed.add('friction')
+            outfile.write(' friction="%s"' % self.gds_format_double(self.friction, input_name='friction'))
+        if self.roughness is not None and 'roughness' not in already_processed:
+            already_processed.add('roughness')
+            outfile.write(' roughness="%s"' % self.gds_format_double(self.roughness, input_name='roughness'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_material', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            try:
+                self.sOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sOffset): %s' % exp)
+            self.validate_t_grEqZero(self.sOffset)    # validate type t_grEqZero
+        value = find_attr_value_('surface', node)
+        if value is not None and 'surface' not in already_processed:
+            already_processed.add('surface')
+            self.surface = value
+        value = find_attr_value_('friction', node)
+        if value is not None and 'friction' not in already_processed:
+            already_processed.add('friction')
+            try:
+                self.friction = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (friction): %s' % exp)
+            self.validate_t_grEqZero(self.friction)    # validate type t_grEqZero
+        value = find_attr_value_('roughness', node)
+        if value is not None and 'roughness' not in already_processed:
+            already_processed.add('roughness')
+            try:
+                self.roughness = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (roughness): %s' % exp)
+            self.validate_t_grEqZero(self.roughness)    # validate type t_grEqZero
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lr_lane_material
+
+
+class t_road_lanes_laneSection_lr_lane_visibility(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, forward=None, back=None, left=None, right=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.forward = _cast(float, forward)
+        self.forward_nsprefix_ = None
+        self.back = _cast(float, back)
+        self.back_nsprefix_ = None
+        self.left = _cast(float, left)
+        self.left_nsprefix_ = None
+        self.right = _cast(float, right)
+        self.right_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lr_lane_visibility)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lr_lane_visibility.subclass:
+            return t_road_lanes_laneSection_lr_lane_visibility.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lr_lane_visibility(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_forward(self):
+        return self.forward
+    def set_forward(self, forward):
+        self.forward = forward
+    def get_back(self):
+        return self.back
+    def set_back(self, back):
+        self.back = back
+    def get_left(self):
+        return self.left
+    def set_left(self, left):
+        self.left = left
+    def get_right(self):
+        return self.right
+    def set_right(self, right):
+        self.right = right
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_visibility', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lr_lane_visibility')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lr_lane_visibility')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lr_lane_visibility', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lr_lane_visibility'):
+        if 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if 'forward' not in already_processed:
+            already_processed.add('forward')
+            outfile.write(' forward="%s"' % self.gds_format_double(self.forward, input_name='forward'))
+        if 'back' not in already_processed:
+            already_processed.add('back')
+            outfile.write(' back="%s"' % self.gds_format_double(self.back, input_name='back'))
+        if 'left' not in already_processed:
+            already_processed.add('left')
+            outfile.write(' left="%s"' % self.gds_format_double(self.left, input_name='left'))
+        if 'right' not in already_processed:
+            already_processed.add('right')
+            outfile.write(' right="%s"' % self.gds_format_double(self.right, input_name='right'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_visibility', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            try:
+                self.sOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sOffset): %s' % exp)
+            self.validate_t_grEqZero(self.sOffset)    # validate type t_grEqZero
+        value = find_attr_value_('forward', node)
+        if value is not None and 'forward' not in already_processed:
+            already_processed.add('forward')
+            try:
+                self.forward = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (forward): %s' % exp)
+            self.validate_t_grEqZero(self.forward)    # validate type t_grEqZero
+        value = find_attr_value_('back', node)
+        if value is not None and 'back' not in already_processed:
+            already_processed.add('back')
+            try:
+                self.back = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (back): %s' % exp)
+            self.validate_t_grEqZero(self.back)    # validate type t_grEqZero
+        value = find_attr_value_('left', node)
+        if value is not None and 'left' not in already_processed:
+            already_processed.add('left')
+            try:
+                self.left = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (left): %s' % exp)
+            self.validate_t_grEqZero(self.left)    # validate type t_grEqZero
+        value = find_attr_value_('right', node)
+        if value is not None and 'right' not in already_processed:
+            already_processed.add('right')
+            try:
+                self.right = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (right): %s' % exp)
+            self.validate_t_grEqZero(self.right)    # validate type t_grEqZero
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lr_lane_visibility
+
+
+class t_road_lanes_laneSection_lr_lane_speed(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, max=None, unit=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.max = _cast(float, max)
+        self.max_nsprefix_ = None
+        self.unit = _cast(None, unit)
+        self.unit_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lr_lane_speed)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lr_lane_speed.subclass:
+            return t_road_lanes_laneSection_lr_lane_speed.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lr_lane_speed(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_max(self):
+        return self.max
+    def set_max(self, max):
+        self.max = max
+    def get_unit(self):
+        return self.unit
+    def set_unit(self, unit):
+        self.unit = unit
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_unitSpeed(self, value):
+        # Validate type e_unitSpeed, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['m/s', 'mph', 'km/h']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_unitSpeed' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_speed', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lr_lane_speed')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lr_lane_speed')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lr_lane_speed', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lr_lane_speed'):
+        if 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if 'max' not in already_processed:
+            already_processed.add('max')
+            outfile.write(' max="%s"' % self.gds_format_double(self.max, input_name='max'))
+        if self.unit is not None and 'unit' not in already_processed:
+            already_processed.add('unit')
+            outfile.write(' unit=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.unit), input_name='unit')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_speed', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            try:
+                self.sOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sOffset): %s' % exp)
+            self.validate_t_grEqZero(self.sOffset)    # validate type t_grEqZero
+        value = find_attr_value_('max', node)
+        if value is not None and 'max' not in already_processed:
+            already_processed.add('max')
+            try:
+                self.max = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (max): %s' % exp)
+            self.validate_t_grEqZero(self.max)    # validate type t_grEqZero
+        value = find_attr_value_('unit', node)
+        if value is not None and 'unit' not in already_processed:
+            already_processed.add('unit')
+            self.unit = value
+            self.validate_e_unitSpeed(self.unit)    # validate type e_unitSpeed
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lr_lane_speed
+
+
+class t_road_lanes_laneSection_lr_lane_access(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, rule=None, restriction=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.rule = _cast(None, rule)
+        self.rule_nsprefix_ = None
+        self.restriction = _cast(None, restriction)
+        self.restriction_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lr_lane_access)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lr_lane_access.subclass:
+            return t_road_lanes_laneSection_lr_lane_access.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lr_lane_access(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_rule(self):
+        return self.rule
+    def set_rule(self, rule):
+        self.rule = rule
+    def get_restriction(self):
+        return self.restriction
+    def set_restriction(self, restriction):
+        self.restriction = restriction
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_road_lanes_laneSection_lr_lane_access_rule(self, value):
+        # Validate type e_road_lanes_laneSection_lr_lane_access_rule, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['allow', 'deny']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_road_lanes_laneSection_lr_lane_access_rule' % {"value" : value.encode("utf-8")} )
+    def validate_e_accessRestrictionType(self, value):
+        # Validate type e_accessRestrictionType, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['simulator', 'autonomousTraffic', 'pedestrian', 'passengerCar', 'bus', 'delivery', 'emergency', 'taxi', 'throughTraffic', 'truck', 'bicycle', 'motorcycle', 'none', 'trucks']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_accessRestrictionType' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_access', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lr_lane_access')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lr_lane_access')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lr_lane_access', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lr_lane_access'):
+        if 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if 'rule' not in already_processed:
+            already_processed.add('rule')
+            outfile.write(' rule=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.rule), input_name='rule')), ))
+        if 'restriction' not in already_processed:
+            already_processed.add('restriction')
+            outfile.write(' restriction=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.restriction), input_name='restriction')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_access', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            try:
+                self.sOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sOffset): %s' % exp)
+            self.validate_t_grEqZero(self.sOffset)    # validate type t_grEqZero
+        value = find_attr_value_('rule', node)
+        if value is not None and 'rule' not in already_processed:
+            already_processed.add('rule')
+            self.rule = value
+            self.validate_e_road_lanes_laneSection_lr_lane_access_rule(self.rule)    # validate type e_road_lanes_laneSection_lr_lane_access_rule
+        value = find_attr_value_('restriction', node)
+        if value is not None and 'restriction' not in already_processed:
+            already_processed.add('restriction')
+            self.restriction = value
+            self.validate_e_accessRestrictionType(self.restriction)    # validate type e_accessRestrictionType
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lr_lane_access
+
+
+class t_road_lanes_laneSection_lr_lane_height(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, inner=None, outer=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.inner = _cast(float, inner)
+        self.inner_nsprefix_ = None
+        self.outer = _cast(float, outer)
+        self.outer_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lr_lane_height)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lr_lane_height.subclass:
+            return t_road_lanes_laneSection_lr_lane_height.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lr_lane_height(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_inner(self):
+        return self.inner
+    def set_inner(self, inner):
+        self.inner = inner
+    def get_outer(self):
+        return self.outer
+    def set_outer(self, outer):
+        self.outer = outer
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_height', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lr_lane_height')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lr_lane_height')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lr_lane_height', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lr_lane_height'):
+        if 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if 'inner' not in already_processed:
+            already_processed.add('inner')
+            outfile.write(' inner="%s"' % self.gds_format_double(self.inner, input_name='inner'))
+        if 'outer' not in already_processed:
+            already_processed.add('outer')
+            outfile.write(' outer="%s"' % self.gds_format_double(self.outer, input_name='outer'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_height', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            try:
+                self.sOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sOffset): %s' % exp)
+            self.validate_t_grEqZero(self.sOffset)    # validate type t_grEqZero
+        value = find_attr_value_('inner', node)
+        if value is not None and 'inner' not in already_processed:
+            already_processed.add('inner')
+            try:
+                self.inner = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (inner): %s' % exp)
+        value = find_attr_value_('outer', node)
+        if value is not None and 'outer' not in already_processed:
+            already_processed.add('outer')
+            try:
+                self.outer = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (outer): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lr_lane_height
+
+
+class t_road_lanes_laneSection_lr_lane_rule(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, sOffset=None, value=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.value = _cast(None, value)
+        self.value_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_lanes_laneSection_lr_lane_rule)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_lanes_laneSection_lr_lane_rule.subclass:
+            return t_road_lanes_laneSection_lr_lane_rule.subclass(*args_, **kwargs_)
+        else:
+            return t_road_lanes_laneSection_lr_lane_rule(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_value(self):
+        return self.value
+    def set_value(self, value):
+        self.value = value
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_rule', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_lanes_laneSection_lr_lane_rule')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_lanes_laneSection_lr_lane_rule')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_lanes_laneSection_lr_lane_rule', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_lanes_laneSection_lr_lane_rule'):
+        if 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if 'value' not in already_processed:
+            already_processed.add('value')
+            outfile.write(' value=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.value), input_name='value')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_lanes_laneSection_lr_lane_rule', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            try:
+                self.sOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sOffset): %s' % exp)
+            self.validate_t_grEqZero(self.sOffset)    # validate type t_grEqZero
+        value = find_attr_value_('value', node)
+        if value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            self.value = value
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_lanes_laneSection_lr_lane_rule
+
+
+class t_road_objects(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, object=None, objectReference=None, tunnel=None, bridge=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if object is None:
+            self.object = []
+        else:
+            self.object = object
+        self.object_nsprefix_ = None
+        if objectReference is None:
+            self.objectReference = []
+        else:
+            self.objectReference = objectReference
+        self.objectReference_nsprefix_ = None
+        if tunnel is None:
+            self.tunnel = []
+        else:
+            self.tunnel = tunnel
+        self.tunnel_nsprefix_ = None
+        if bridge is None:
+            self.bridge = []
+        else:
+            self.bridge = bridge
+        self.bridge_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects.subclass:
+            return t_road_objects.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_object(self):
+        return self.object
+    def set_object(self, object):
+        self.object = object
+    def add_object(self, value):
+        self.object.append(value)
+    def insert_object_at(self, index, value):
+        self.object.insert(index, value)
+    def replace_object_at(self, index, value):
+        self.object[index] = value
+    def get_objectReference(self):
+        return self.objectReference
+    def set_objectReference(self, objectReference):
+        self.objectReference = objectReference
+    def add_objectReference(self, value):
+        self.objectReference.append(value)
+    def insert_objectReference_at(self, index, value):
+        self.objectReference.insert(index, value)
+    def replace_objectReference_at(self, index, value):
+        self.objectReference[index] = value
+    def get_tunnel(self):
+        return self.tunnel
+    def set_tunnel(self, tunnel):
+        self.tunnel = tunnel
+    def add_tunnel(self, value):
+        self.tunnel.append(value)
+    def insert_tunnel_at(self, index, value):
+        self.tunnel.insert(index, value)
+    def replace_tunnel_at(self, index, value):
+        self.tunnel[index] = value
+    def get_bridge(self):
+        return self.bridge
+    def set_bridge(self, bridge):
+        self.bridge = bridge
+    def add_bridge(self, value):
+        self.bridge.append(value)
+    def insert_bridge_at(self, index, value):
+        self.bridge.insert(index, value)
+    def replace_bridge_at(self, index, value):
+        self.bridge[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.object or
+            self.objectReference or
+            self.tunnel or
+            self.bridge or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for object_ in self.object:
+            namespaceprefix_ = self.object_nsprefix_ + ':' if (UseCapturedNS_ and self.object_nsprefix_) else ''
+            object_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='object', pretty_print=pretty_print)
+        for objectReference_ in self.objectReference:
+            namespaceprefix_ = self.objectReference_nsprefix_ + ':' if (UseCapturedNS_ and self.objectReference_nsprefix_) else ''
+            objectReference_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='objectReference', pretty_print=pretty_print)
+        for tunnel_ in self.tunnel:
+            namespaceprefix_ = self.tunnel_nsprefix_ + ':' if (UseCapturedNS_ and self.tunnel_nsprefix_) else ''
+            tunnel_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='tunnel', pretty_print=pretty_print)
+        for bridge_ in self.bridge:
+            namespaceprefix_ = self.bridge_nsprefix_ + ':' if (UseCapturedNS_ and self.bridge_nsprefix_) else ''
+            bridge_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='bridge', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'object':
+            obj_ = t_road_objects_object.factory(parent_object_=self)
+            obj_.build(child_)
+            self.object.append(obj_)
+            obj_.original_tagname_ = 'object'
+        elif nodeName_ == 'objectReference':
+            obj_ = t_road_objects_objectReference.factory(parent_object_=self)
+            obj_.build(child_)
+            self.objectReference.append(obj_)
+            obj_.original_tagname_ = 'objectReference'
+        elif nodeName_ == 'tunnel':
+            obj_ = t_road_objects_tunnel.factory(parent_object_=self)
+            obj_.build(child_)
+            self.tunnel.append(obj_)
+            obj_.original_tagname_ = 'tunnel'
+        elif nodeName_ == 'bridge':
+            obj_ = t_road_objects_bridge.factory(parent_object_=self)
+            obj_.build(child_)
+            self.bridge.append(obj_)
+            obj_.original_tagname_ = 'bridge'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects
+
+
+class t_road_objects_object(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, type_=None, subtype=None, dynamic=None, name=None, id=None, s=None, t=None, zOffset=None, validLength=None, orientation=None, hdg=None, pitch=None, roll=None, height=None, length=None, width=None, radius=None, repeat=None, outline=None, outlines=None, material=None, validity=None, parkingSpace=None, markings=None, borders=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.subtype = _cast(None, subtype)
+        self.subtype_nsprefix_ = None
+        self.dynamic = _cast(None, dynamic)
+        self.dynamic_nsprefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.t = _cast(float, t)
+        self.t_nsprefix_ = None
+        self.zOffset = _cast(float, zOffset)
+        self.zOffset_nsprefix_ = None
+        self.validLength = _cast(float, validLength)
+        self.validLength_nsprefix_ = None
+        self.orientation = _cast(None, orientation)
+        self.orientation_nsprefix_ = None
+        self.hdg = _cast(float, hdg)
+        self.hdg_nsprefix_ = None
+        self.pitch = _cast(float, pitch)
+        self.pitch_nsprefix_ = None
+        self.roll = _cast(float, roll)
+        self.roll_nsprefix_ = None
+        self.height = _cast(float, height)
+        self.height_nsprefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        self.radius = _cast(float, radius)
+        self.radius_nsprefix_ = None
+        self.repeat = repeat
+        self.repeat_nsprefix_ = None
+        self.outline = outline
+        self.outline_nsprefix_ = None
+        self.outlines = outlines
+        self.outlines_nsprefix_ = None
+        if material is None:
+            self.material = []
+        else:
+            self.material = material
+        self.material_nsprefix_ = None
+        if validity is None:
+            self.validity = []
+        else:
+            self.validity = validity
+        self.validity_nsprefix_ = None
+        self.parkingSpace = parkingSpace
+        self.parkingSpace_nsprefix_ = None
+        self.markings = markings
+        self.markings_nsprefix_ = None
+        self.borders = borders
+        self.borders_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_object)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_object.subclass:
+            return t_road_objects_object.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_object(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_repeat(self):
+        return self.repeat
+    def set_repeat(self, repeat):
+        self.repeat = repeat
+    def get_outline(self):
+        return self.outline
+    def set_outline(self, outline):
+        self.outline = outline
+    def get_outlines(self):
+        return self.outlines
+    def set_outlines(self, outlines):
+        self.outlines = outlines
+    def get_material(self):
+        return self.material
+    def set_material(self, material):
+        self.material = material
+    def add_material(self, value):
+        self.material.append(value)
+    def insert_material_at(self, index, value):
+        self.material.insert(index, value)
+    def replace_material_at(self, index, value):
+        self.material[index] = value
+    def get_validity(self):
+        return self.validity
+    def set_validity(self, validity):
+        self.validity = validity
+    def add_validity(self, value):
+        self.validity.append(value)
+    def insert_validity_at(self, index, value):
+        self.validity.insert(index, value)
+    def replace_validity_at(self, index, value):
+        self.validity[index] = value
+    def get_parkingSpace(self):
+        return self.parkingSpace
+    def set_parkingSpace(self, parkingSpace):
+        self.parkingSpace = parkingSpace
+    def get_markings(self):
+        return self.markings
+    def set_markings(self, markings):
+        self.markings = markings
+    def get_borders(self):
+        return self.borders
+    def set_borders(self, borders):
+        self.borders = borders
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_subtype(self):
+        return self.subtype
+    def set_subtype(self, subtype):
+        self.subtype = subtype
+    def get_dynamic(self):
+        return self.dynamic
+    def set_dynamic(self, dynamic):
+        self.dynamic = dynamic
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_t(self):
+        return self.t
+    def set_t(self, t):
+        self.t = t
+    def get_zOffset(self):
+        return self.zOffset
+    def set_zOffset(self, zOffset):
+        self.zOffset = zOffset
+    def get_validLength(self):
+        return self.validLength
+    def set_validLength(self, validLength):
+        self.validLength = validLength
+    def get_orientation(self):
+        return self.orientation
+    def set_orientation(self, orientation):
+        self.orientation = orientation
+    def get_hdg(self):
+        return self.hdg
+    def set_hdg(self, hdg):
+        self.hdg = hdg
+    def get_pitch(self):
+        return self.pitch
+    def set_pitch(self, pitch):
+        self.pitch = pitch
+    def get_roll(self):
+        return self.roll
+    def set_roll(self, roll):
+        self.roll = roll
+    def get_height(self):
+        return self.height
+    def set_height(self, height):
+        self.height = height
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def get_radius(self):
+        return self.radius
+    def set_radius(self, radius):
+        self.radius = radius
+    def validate_e_objectType(self, value):
+        # Validate type e_objectType, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['none', 'obstacle', 'car', 'pole', 'tree', 'vegetation', 'barrier', 'building', 'parkingSpace', 'patch', 'railing', 'trafficIsland', 'crosswalk', 'streetLamp', 'gantry', 'soundBarrier', 'truck', 'van', 'bus', 'trailer', 'bike', 'motorbike', 'tram', 'train', 'pedestrian', 'wind']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_objectType' % {"value" : value.encode("utf-8")} )
+    def validate_t_yesNo(self, value):
+        # Validate type t_yesNo, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['yes', 'no']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on t_yesNo' % {"value" : value.encode("utf-8")} )
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_orientation(self, value):
+        # Validate type e_orientation, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['+', '-', 'none']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_orientation' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.repeat is not None or
+            self.outline is not None or
+            self.outlines is not None or
+            self.material or
+            self.validity or
+            self.parkingSpace is not None or
+            self.markings is not None or
+            self.borders is not None or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_object')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_object')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_object', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_object'):
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+        if self.subtype is not None and 'subtype' not in already_processed:
+            already_processed.add('subtype')
+            outfile.write(' subtype=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.subtype), input_name='subtype')), ))
+        if 'dynamic' not in already_processed:
+            already_processed.add('dynamic')
+            outfile.write(' dynamic=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.dynamic), input_name='dynamic')), ))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 't' not in already_processed:
+            already_processed.add('t')
+            outfile.write(' t="%s"' % self.gds_format_double(self.t, input_name='t'))
+        if 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            outfile.write(' zOffset="%s"' % self.gds_format_double(self.zOffset, input_name='zOffset'))
+        if 'validLength' not in already_processed:
+            already_processed.add('validLength')
+            outfile.write(' validLength="%s"' % self.gds_format_double(self.validLength, input_name='validLength'))
+        if 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            outfile.write(' orientation=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.orientation), input_name='orientation')), ))
+        if 'hdg' not in already_processed:
+            already_processed.add('hdg')
+            outfile.write(' hdg="%s"' % self.gds_format_double(self.hdg, input_name='hdg'))
+        if 'pitch' not in already_processed:
+            already_processed.add('pitch')
+            outfile.write(' pitch="%s"' % self.gds_format_double(self.pitch, input_name='pitch'))
+        if 'roll' not in already_processed:
+            already_processed.add('roll')
+            outfile.write(' roll="%s"' % self.gds_format_double(self.roll, input_name='roll'))
+        if 'height' not in already_processed:
+            already_processed.add('height')
+            outfile.write(' height="%s"' % self.gds_format_double(self.height, input_name='height'))
+        if self.length is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+        if self.width is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+        if self.radius is not None and 'radius' not in already_processed:
+            already_processed.add('radius')
+            outfile.write(' radius="%s"' % self.gds_format_double(self.radius, input_name='radius'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.repeat is not None:
+            namespaceprefix_ = self.repeat_nsprefix_ + ':' if (UseCapturedNS_ and self.repeat_nsprefix_) else ''
+            self.repeat.export(outfile, level, namespaceprefix_, namespacedef_='', name_='repeat', pretty_print=pretty_print)
+        if self.outline is not None:
+            namespaceprefix_ = self.outline_nsprefix_ + ':' if (UseCapturedNS_ and self.outline_nsprefix_) else ''
+            self.outline.export(outfile, level, namespaceprefix_, namespacedef_='', name_='outline', pretty_print=pretty_print)
+        if self.outlines is not None:
+            namespaceprefix_ = self.outlines_nsprefix_ + ':' if (UseCapturedNS_ and self.outlines_nsprefix_) else ''
+            self.outlines.export(outfile, level, namespaceprefix_, namespacedef_='', name_='outlines', pretty_print=pretty_print)
+        for material_ in self.material:
+            namespaceprefix_ = self.material_nsprefix_ + ':' if (UseCapturedNS_ and self.material_nsprefix_) else ''
+            material_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='material', pretty_print=pretty_print)
+        for validity_ in self.validity:
+            namespaceprefix_ = self.validity_nsprefix_ + ':' if (UseCapturedNS_ and self.validity_nsprefix_) else ''
+            validity_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='validity', pretty_print=pretty_print)
+        if self.parkingSpace is not None:
+            namespaceprefix_ = self.parkingSpace_nsprefix_ + ':' if (UseCapturedNS_ and self.parkingSpace_nsprefix_) else ''
+            self.parkingSpace.export(outfile, level, namespaceprefix_, namespacedef_='', name_='parkingSpace', pretty_print=pretty_print)
+        if self.markings is not None:
+            namespaceprefix_ = self.markings_nsprefix_ + ':' if (UseCapturedNS_ and self.markings_nsprefix_) else ''
+            self.markings.export(outfile, level, namespaceprefix_, namespacedef_='', name_='markings', pretty_print=pretty_print)
+        if self.borders is not None:
+            namespaceprefix_ = self.borders_nsprefix_ + ':' if (UseCapturedNS_ and self.borders_nsprefix_) else ''
+            self.borders.export(outfile, level, namespaceprefix_, namespacedef_='', name_='borders', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            self.type_ = value
+            self.validate_e_objectType(self.type_)    # validate type e_objectType
+        value = find_attr_value_('subtype', node)
+        if value is not None and 'subtype' not in already_processed:
+            already_processed.add('subtype')
+            self.subtype = value
+        value = find_attr_value_('dynamic', node)
+        if value is not None and 'dynamic' not in already_processed:
+            already_processed.add('dynamic')
+            self.dynamic = value
+            self.validate_t_yesNo(self.dynamic)    # validate type t_yesNo
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('t', node)
+        if value is not None and 't' not in already_processed:
+            already_processed.add('t')
+            try:
+                self.t = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (t): %s' % exp)
+        value = find_attr_value_('zOffset', node)
+        if value is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            try:
+                self.zOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (zOffset): %s' % exp)
+        value = find_attr_value_('validLength', node)
+        if value is not None and 'validLength' not in already_processed:
+            already_processed.add('validLength')
+            try:
+                self.validLength = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (validLength): %s' % exp)
+            self.validate_t_grEqZero(self.validLength)    # validate type t_grEqZero
+        value = find_attr_value_('orientation', node)
+        if value is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            self.orientation = value
+            self.validate_e_orientation(self.orientation)    # validate type e_orientation
+        value = find_attr_value_('hdg', node)
+        if value is not None and 'hdg' not in already_processed:
+            already_processed.add('hdg')
+            try:
+                self.hdg = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (hdg): %s' % exp)
+        value = find_attr_value_('pitch', node)
+        if value is not None and 'pitch' not in already_processed:
+            already_processed.add('pitch')
+            try:
+                self.pitch = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (pitch): %s' % exp)
+        value = find_attr_value_('roll', node)
+        if value is not None and 'roll' not in already_processed:
+            already_processed.add('roll')
+            try:
+                self.roll = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (roll): %s' % exp)
+        value = find_attr_value_('height', node)
+        if value is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            try:
+                self.height = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (height): %s' % exp)
+        value = find_attr_value_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            try:
+                self.length = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (length): %s' % exp)
+        value = find_attr_value_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            try:
+                self.width = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (width): %s' % exp)
+        value = find_attr_value_('radius', node)
+        if value is not None and 'radius' not in already_processed:
+            already_processed.add('radius')
+            try:
+                self.radius = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (radius): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'repeat':
+            obj_ = t_road_objects_object_repeat.factory(parent_object_=self)
+            obj_.build(child_)
+            self.repeat = obj_
+            obj_.original_tagname_ = 'repeat'
+        elif nodeName_ == 'outline':
+            obj_ = t_road_objects_object_outlines_outline.factory(parent_object_=self)
+            obj_.build(child_)
+            self.outline = obj_
+            obj_.original_tagname_ = 'outline'
+        elif nodeName_ == 'outlines':
+            obj_ = t_road_objects_object_outlines.factory(parent_object_=self)
+            obj_.build(child_)
+            self.outlines = obj_
+            obj_.original_tagname_ = 'outlines'
+        elif nodeName_ == 'material':
+            obj_ = t_road_objects_object_material.factory(parent_object_=self)
+            obj_.build(child_)
+            self.material.append(obj_)
+            obj_.original_tagname_ = 'material'
+        elif nodeName_ == 'validity':
+            obj_ = t_road_objects_object_laneValidity.factory(parent_object_=self)
+            obj_.build(child_)
+            self.validity.append(obj_)
+            obj_.original_tagname_ = 'validity'
+        elif nodeName_ == 'parkingSpace':
+            obj_ = t_road_objects_object_parkingSpace.factory(parent_object_=self)
+            obj_.build(child_)
+            self.parkingSpace = obj_
+            obj_.original_tagname_ = 'parkingSpace'
+        elif nodeName_ == 'markings':
+            obj_ = t_road_objects_object_markings.factory(parent_object_=self)
+            obj_.build(child_)
+            self.markings = obj_
+            obj_.original_tagname_ = 'markings'
+        elif nodeName_ == 'borders':
+            obj_ = t_road_objects_object_borders.factory(parent_object_=self)
+            obj_.build(child_)
+            self.borders = obj_
+            obj_.original_tagname_ = 'borders'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_object
+
+
+class t_road_objects_object_repeat(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, length=None, distance=None, tStart=None, tEnd=None, heightStart=None, heightEnd=None, zOffsetStart=None, zOffsetEnd=None, widthStart=None, widthEnd=None, lengthStart=None, lengthEnd=None, radiusStart=None, radiusEnd=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.distance = _cast(float, distance)
+        self.distance_nsprefix_ = None
+        self.tStart = _cast(float, tStart)
+        self.tStart_nsprefix_ = None
+        self.tEnd = _cast(float, tEnd)
+        self.tEnd_nsprefix_ = None
+        self.heightStart = _cast(float, heightStart)
+        self.heightStart_nsprefix_ = None
+        self.heightEnd = _cast(float, heightEnd)
+        self.heightEnd_nsprefix_ = None
+        self.zOffsetStart = _cast(float, zOffsetStart)
+        self.zOffsetStart_nsprefix_ = None
+        self.zOffsetEnd = _cast(float, zOffsetEnd)
+        self.zOffsetEnd_nsprefix_ = None
+        self.widthStart = _cast(float, widthStart)
+        self.widthStart_nsprefix_ = None
+        self.widthEnd = _cast(float, widthEnd)
+        self.widthEnd_nsprefix_ = None
+        self.lengthStart = _cast(float, lengthStart)
+        self.lengthStart_nsprefix_ = None
+        self.lengthEnd = _cast(float, lengthEnd)
+        self.lengthEnd_nsprefix_ = None
+        self.radiusStart = _cast(float, radiusStart)
+        self.radiusStart_nsprefix_ = None
+        self.radiusEnd = _cast(float, radiusEnd)
+        self.radiusEnd_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_object_repeat)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_object_repeat.subclass:
+            return t_road_objects_object_repeat.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_object_repeat(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def get_distance(self):
+        return self.distance
+    def set_distance(self, distance):
+        self.distance = distance
+    def get_tStart(self):
+        return self.tStart
+    def set_tStart(self, tStart):
+        self.tStart = tStart
+    def get_tEnd(self):
+        return self.tEnd
+    def set_tEnd(self, tEnd):
+        self.tEnd = tEnd
+    def get_heightStart(self):
+        return self.heightStart
+    def set_heightStart(self, heightStart):
+        self.heightStart = heightStart
+    def get_heightEnd(self):
+        return self.heightEnd
+    def set_heightEnd(self, heightEnd):
+        self.heightEnd = heightEnd
+    def get_zOffsetStart(self):
+        return self.zOffsetStart
+    def set_zOffsetStart(self, zOffsetStart):
+        self.zOffsetStart = zOffsetStart
+    def get_zOffsetEnd(self):
+        return self.zOffsetEnd
+    def set_zOffsetEnd(self, zOffsetEnd):
+        self.zOffsetEnd = zOffsetEnd
+    def get_widthStart(self):
+        return self.widthStart
+    def set_widthStart(self, widthStart):
+        self.widthStart = widthStart
+    def get_widthEnd(self):
+        return self.widthEnd
+    def set_widthEnd(self, widthEnd):
+        self.widthEnd = widthEnd
+    def get_lengthStart(self):
+        return self.lengthStart
+    def set_lengthStart(self, lengthStart):
+        self.lengthStart = lengthStart
+    def get_lengthEnd(self):
+        return self.lengthEnd
+    def set_lengthEnd(self, lengthEnd):
+        self.lengthEnd = lengthEnd
+    def get_radiusStart(self):
+        return self.radiusStart
+    def set_radiusStart(self, radiusStart):
+        self.radiusStart = radiusStart
+    def get_radiusEnd(self):
+        return self.radiusEnd
+    def set_radiusEnd(self, radiusEnd):
+        self.radiusEnd = radiusEnd
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_repeat', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_object_repeat')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_object_repeat')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_object_repeat', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_object_repeat'):
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+        if 'distance' not in already_processed:
+            already_processed.add('distance')
+            outfile.write(' distance="%s"' % self.gds_format_double(self.distance, input_name='distance'))
+        if 'tStart' not in already_processed:
+            already_processed.add('tStart')
+            outfile.write(' tStart="%s"' % self.gds_format_double(self.tStart, input_name='tStart'))
+        if 'tEnd' not in already_processed:
+            already_processed.add('tEnd')
+            outfile.write(' tEnd="%s"' % self.gds_format_double(self.tEnd, input_name='tEnd'))
+        if 'heightStart' not in already_processed:
+            already_processed.add('heightStart')
+            outfile.write(' heightStart="%s"' % self.gds_format_double(self.heightStart, input_name='heightStart'))
+        if 'heightEnd' not in already_processed:
+            already_processed.add('heightEnd')
+            outfile.write(' heightEnd="%s"' % self.gds_format_double(self.heightEnd, input_name='heightEnd'))
+        if 'zOffsetStart' not in already_processed:
+            already_processed.add('zOffsetStart')
+            outfile.write(' zOffsetStart="%s"' % self.gds_format_double(self.zOffsetStart, input_name='zOffsetStart'))
+        if 'zOffsetEnd' not in already_processed:
+            already_processed.add('zOffsetEnd')
+            outfile.write(' zOffsetEnd="%s"' % self.gds_format_double(self.zOffsetEnd, input_name='zOffsetEnd'))
+        if 'widthStart' not in already_processed:
+            already_processed.add('widthStart')
+            outfile.write(' widthStart="%s"' % self.gds_format_double(self.widthStart, input_name='widthStart'))
+        if 'widthEnd' not in already_processed:
+            already_processed.add('widthEnd')
+            outfile.write(' widthEnd="%s"' % self.gds_format_double(self.widthEnd, input_name='widthEnd'))
+        if self.lengthStart is not None and 'lengthStart' not in already_processed:
+            already_processed.add('lengthStart')
+            outfile.write(' lengthStart="%s"' % self.gds_format_double(self.lengthStart, input_name='lengthStart'))
+        if self.lengthEnd is not None and 'lengthEnd' not in already_processed:
+            already_processed.add('lengthEnd')
+            outfile.write(' lengthEnd="%s"' % self.gds_format_double(self.lengthEnd, input_name='lengthEnd'))
+        if self.radiusStart is not None and 'radiusStart' not in already_processed:
+            already_processed.add('radiusStart')
+            outfile.write(' radiusStart="%s"' % self.gds_format_double(self.radiusStart, input_name='radiusStart'))
+        if self.radiusEnd is not None and 'radiusEnd' not in already_processed:
+            already_processed.add('radiusEnd')
+            outfile.write(' radiusEnd="%s"' % self.gds_format_double(self.radiusEnd, input_name='radiusEnd'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_repeat', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            try:
+                self.length = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (length): %s' % exp)
+            self.validate_t_grEqZero(self.length)    # validate type t_grEqZero
+        value = find_attr_value_('distance', node)
+        if value is not None and 'distance' not in already_processed:
+            already_processed.add('distance')
+            try:
+                self.distance = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (distance): %s' % exp)
+            self.validate_t_grEqZero(self.distance)    # validate type t_grEqZero
+        value = find_attr_value_('tStart', node)
+        if value is not None and 'tStart' not in already_processed:
+            already_processed.add('tStart')
+            try:
+                self.tStart = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (tStart): %s' % exp)
+        value = find_attr_value_('tEnd', node)
+        if value is not None and 'tEnd' not in already_processed:
+            already_processed.add('tEnd')
+            try:
+                self.tEnd = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (tEnd): %s' % exp)
+        value = find_attr_value_('heightStart', node)
+        if value is not None and 'heightStart' not in already_processed:
+            already_processed.add('heightStart')
+            try:
+                self.heightStart = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (heightStart): %s' % exp)
+        value = find_attr_value_('heightEnd', node)
+        if value is not None and 'heightEnd' not in already_processed:
+            already_processed.add('heightEnd')
+            try:
+                self.heightEnd = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (heightEnd): %s' % exp)
+        value = find_attr_value_('zOffsetStart', node)
+        if value is not None and 'zOffsetStart' not in already_processed:
+            already_processed.add('zOffsetStart')
+            try:
+                self.zOffsetStart = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (zOffsetStart): %s' % exp)
+        value = find_attr_value_('zOffsetEnd', node)
+        if value is not None and 'zOffsetEnd' not in already_processed:
+            already_processed.add('zOffsetEnd')
+            try:
+                self.zOffsetEnd = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (zOffsetEnd): %s' % exp)
+        value = find_attr_value_('widthStart', node)
+        if value is not None and 'widthStart' not in already_processed:
+            already_processed.add('widthStart')
+            try:
+                self.widthStart = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (widthStart): %s' % exp)
+            self.validate_t_grEqZero(self.widthStart)    # validate type t_grEqZero
+        value = find_attr_value_('widthEnd', node)
+        if value is not None and 'widthEnd' not in already_processed:
+            already_processed.add('widthEnd')
+            try:
+                self.widthEnd = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (widthEnd): %s' % exp)
+            self.validate_t_grEqZero(self.widthEnd)    # validate type t_grEqZero
+        value = find_attr_value_('lengthStart', node)
+        if value is not None and 'lengthStart' not in already_processed:
+            already_processed.add('lengthStart')
+            try:
+                self.lengthStart = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (lengthStart): %s' % exp)
+            self.validate_t_grEqZero(self.lengthStart)    # validate type t_grEqZero
+        value = find_attr_value_('lengthEnd', node)
+        if value is not None and 'lengthEnd' not in already_processed:
+            already_processed.add('lengthEnd')
+            try:
+                self.lengthEnd = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (lengthEnd): %s' % exp)
+            self.validate_t_grEqZero(self.lengthEnd)    # validate type t_grEqZero
+        value = find_attr_value_('radiusStart', node)
+        if value is not None and 'radiusStart' not in already_processed:
+            already_processed.add('radiusStart')
+            try:
+                self.radiusStart = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (radiusStart): %s' % exp)
+            self.validate_t_grEqZero(self.radiusStart)    # validate type t_grEqZero
+        value = find_attr_value_('radiusEnd', node)
+        if value is not None and 'radiusEnd' not in already_processed:
+            already_processed.add('radiusEnd')
+            try:
+                self.radiusEnd = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (radiusEnd): %s' % exp)
+            self.validate_t_grEqZero(self.radiusEnd)    # validate type t_grEqZero
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_object_repeat
+
+
+class t_road_objects_object_outlines(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, outline=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if outline is None:
+            self.outline = []
+        else:
+            self.outline = outline
+        self.outline_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_object_outlines)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_object_outlines.subclass:
+            return t_road_objects_object_outlines.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_object_outlines(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_outline(self):
+        return self.outline
+    def set_outline(self, outline):
+        self.outline = outline
+    def add_outline(self, value):
+        self.outline.append(value)
+    def insert_outline_at(self, index, value):
+        self.outline.insert(index, value)
+    def replace_outline_at(self, index, value):
+        self.outline[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.outline or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_outlines', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_object_outlines')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_object_outlines')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_object_outlines', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_object_outlines'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_outlines', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for outline_ in self.outline:
+            namespaceprefix_ = self.outline_nsprefix_ + ':' if (UseCapturedNS_ and self.outline_nsprefix_) else ''
+            outline_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='outline', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'outline':
+            obj_ = t_road_objects_object_outlines_outline.factory(parent_object_=self)
+            obj_.build(child_)
+            self.outline.append(obj_)
+            obj_.original_tagname_ = 'outline'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_object_outlines
+
+
+class t_road_objects_object_outlines_outline(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, fillType=None, outer=None, closed=None, laneType=None, cornerRoad=None, cornerLocal=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(int, id)
+        self.id_nsprefix_ = None
+        self.fillType = _cast(None, fillType)
+        self.fillType_nsprefix_ = None
+        self.outer = _cast(None, outer)
+        self.outer_nsprefix_ = None
+        self.closed = _cast(None, closed)
+        self.closed_nsprefix_ = None
+        self.laneType = _cast(None, laneType)
+        self.laneType_nsprefix_ = None
+        if cornerRoad is None:
+            self.cornerRoad = []
+        else:
+            self.cornerRoad = cornerRoad
+        self.cornerRoad_nsprefix_ = None
+        if cornerLocal is None:
+            self.cornerLocal = []
+        else:
+            self.cornerLocal = cornerLocal
+        self.cornerLocal_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_object_outlines_outline)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_object_outlines_outline.subclass:
+            return t_road_objects_object_outlines_outline.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_object_outlines_outline(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_cornerRoad(self):
+        return self.cornerRoad
+    def set_cornerRoad(self, cornerRoad):
+        self.cornerRoad = cornerRoad
+    def add_cornerRoad(self, value):
+        self.cornerRoad.append(value)
+    def insert_cornerRoad_at(self, index, value):
+        self.cornerRoad.insert(index, value)
+    def replace_cornerRoad_at(self, index, value):
+        self.cornerRoad[index] = value
+    def get_cornerLocal(self):
+        return self.cornerLocal
+    def set_cornerLocal(self, cornerLocal):
+        self.cornerLocal = cornerLocal
+    def add_cornerLocal(self, value):
+        self.cornerLocal.append(value)
+    def insert_cornerLocal_at(self, index, value):
+        self.cornerLocal.insert(index, value)
+    def replace_cornerLocal_at(self, index, value):
+        self.cornerLocal[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_fillType(self):
+        return self.fillType
+    def set_fillType(self, fillType):
+        self.fillType = fillType
+    def get_outer(self):
+        return self.outer
+    def set_outer(self, outer):
+        self.outer = outer
+    def get_closed(self):
+        return self.closed
+    def set_closed(self, closed):
+        self.closed = closed
+    def get_laneType(self):
+        return self.laneType
+    def set_laneType(self, laneType):
+        self.laneType = laneType
+    def validate_e_outlineFillType(self, value):
+        # Validate type e_outlineFillType, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['grass', 'concrete', 'cobble', 'asphalt', 'pavement', 'gravel', 'soil']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_outlineFillType' % {"value" : value.encode("utf-8")} )
+    def validate_t_bool(self, value):
+        # Validate type t_bool, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['true', 'false']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on t_bool' % {"value" : value.encode("utf-8")} )
+    def validate_e_laneType(self, value):
+        # Validate type e_laneType, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['none', 'driving', 'stop', 'shoulder', 'biking', 'sidewalk', 'border', 'restricted', 'parking', 'bidirectional', 'median', 'special1', 'special2', 'special3', 'roadWorks', 'tram', 'rail', 'entry', 'exit', 'offRamp', 'onRamp', 'connectingRamp', 'bus', 'taxi', 'HOV', 'mwyEntry', 'mwyExit']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_laneType' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.cornerRoad or
+            self.cornerLocal or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_outlines_outline', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_object_outlines_outline')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_object_outlines_outline')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_object_outlines_outline', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_object_outlines_outline'):
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id'))
+        if 'fillType' not in already_processed:
+            already_processed.add('fillType')
+            outfile.write(' fillType=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.fillType), input_name='fillType')), ))
+        if 'outer' not in already_processed:
+            already_processed.add('outer')
+            outfile.write(' outer=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.outer), input_name='outer')), ))
+        if 'closed' not in already_processed:
+            already_processed.add('closed')
+            outfile.write(' closed=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.closed), input_name='closed')), ))
+        if 'laneType' not in already_processed:
+            already_processed.add('laneType')
+            outfile.write(' laneType=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.laneType), input_name='laneType')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_outlines_outline', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for cornerRoad_ in self.cornerRoad:
+            namespaceprefix_ = self.cornerRoad_nsprefix_ + ':' if (UseCapturedNS_ and self.cornerRoad_nsprefix_) else ''
+            cornerRoad_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='cornerRoad', pretty_print=pretty_print)
+        for cornerLocal_ in self.cornerLocal:
+            namespaceprefix_ = self.cornerLocal_nsprefix_ + ':' if (UseCapturedNS_ and self.cornerLocal_nsprefix_) else ''
+            cornerLocal_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='cornerLocal', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            try:
+                self.id = int(value)
+            except ValueError as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.id < 0:
+                raise_parse_error(node, 'Invalid NonNegativeInteger')
+        value = find_attr_value_('fillType', node)
+        if value is not None and 'fillType' not in already_processed:
+            already_processed.add('fillType')
+            self.fillType = value
+            self.validate_e_outlineFillType(self.fillType)    # validate type e_outlineFillType
+        value = find_attr_value_('outer', node)
+        if value is not None and 'outer' not in already_processed:
+            already_processed.add('outer')
+            self.outer = value
+            self.validate_t_bool(self.outer)    # validate type t_bool
+        value = find_attr_value_('closed', node)
+        if value is not None and 'closed' not in already_processed:
+            already_processed.add('closed')
+            self.closed = value
+            self.validate_t_bool(self.closed)    # validate type t_bool
+        value = find_attr_value_('laneType', node)
+        if value is not None and 'laneType' not in already_processed:
+            already_processed.add('laneType')
+            self.laneType = value
+            self.validate_e_laneType(self.laneType)    # validate type e_laneType
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'cornerRoad':
+            obj_ = t_road_objects_object_outlines_outline_cornerRoad.factory(parent_object_=self)
+            obj_.build(child_)
+            self.cornerRoad.append(obj_)
+            obj_.original_tagname_ = 'cornerRoad'
+        elif nodeName_ == 'cornerLocal':
+            obj_ = t_road_objects_object_outlines_outline_cornerLocal.factory(parent_object_=self)
+            obj_.build(child_)
+            self.cornerLocal.append(obj_)
+            obj_.original_tagname_ = 'cornerLocal'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_object_outlines_outline
+
+
+class t_road_objects_object_outlines_outline_cornerRoad(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, t=None, dz=None, height=None, id=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.t = _cast(float, t)
+        self.t_nsprefix_ = None
+        self.dz = _cast(float, dz)
+        self.dz_nsprefix_ = None
+        self.height = _cast(float, height)
+        self.height_nsprefix_ = None
+        self.id = _cast(int, id)
+        self.id_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_object_outlines_outline_cornerRoad)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_object_outlines_outline_cornerRoad.subclass:
+            return t_road_objects_object_outlines_outline_cornerRoad.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_object_outlines_outline_cornerRoad(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_t(self):
+        return self.t
+    def set_t(self, t):
+        self.t = t
+    def get_dz(self):
+        return self.dz
+    def set_dz(self, dz):
+        self.dz = dz
+    def get_height(self):
+        return self.height
+    def set_height(self, height):
+        self.height = height
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_outlines_outline_cornerRoad', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_object_outlines_outline_cornerRoad')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_object_outlines_outline_cornerRoad')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_object_outlines_outline_cornerRoad', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_object_outlines_outline_cornerRoad'):
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 't' not in already_processed:
+            already_processed.add('t')
+            outfile.write(' t="%s"' % self.gds_format_double(self.t, input_name='t'))
+        if 'dz' not in already_processed:
+            already_processed.add('dz')
+            outfile.write(' dz="%s"' % self.gds_format_double(self.dz, input_name='dz'))
+        if 'height' not in already_processed:
+            already_processed.add('height')
+            outfile.write(' height="%s"' % self.gds_format_double(self.height, input_name='height'))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_outlines_outline_cornerRoad', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('t', node)
+        if value is not None and 't' not in already_processed:
+            already_processed.add('t')
+            try:
+                self.t = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (t): %s' % exp)
+        value = find_attr_value_('dz', node)
+        if value is not None and 'dz' not in already_processed:
+            already_processed.add('dz')
+            try:
+                self.dz = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (dz): %s' % exp)
+        value = find_attr_value_('height', node)
+        if value is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            try:
+                self.height = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (height): %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 as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.id < 0:
+                raise_parse_error(node, 'Invalid NonNegativeInteger')
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_object_outlines_outline_cornerRoad
+
+
+class t_road_objects_object_outlines_outline_cornerLocal(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, u=None, v=None, z=None, height=None, id=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.u = _cast(float, u)
+        self.u_nsprefix_ = None
+        self.v = _cast(float, v)
+        self.v_nsprefix_ = None
+        self.z = _cast(float, z)
+        self.z_nsprefix_ = None
+        self.height = _cast(float, height)
+        self.height_nsprefix_ = None
+        self.id = _cast(int, id)
+        self.id_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_object_outlines_outline_cornerLocal)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_object_outlines_outline_cornerLocal.subclass:
+            return t_road_objects_object_outlines_outline_cornerLocal.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_object_outlines_outline_cornerLocal(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_u(self):
+        return self.u
+    def set_u(self, u):
+        self.u = u
+    def get_v(self):
+        return self.v
+    def set_v(self, v):
+        self.v = v
+    def get_z(self):
+        return self.z
+    def set_z(self, z):
+        self.z = z
+    def get_height(self):
+        return self.height
+    def set_height(self, height):
+        self.height = height
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_outlines_outline_cornerLocal', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_object_outlines_outline_cornerLocal')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_object_outlines_outline_cornerLocal')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_object_outlines_outline_cornerLocal', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_object_outlines_outline_cornerLocal'):
+        if 'u' not in already_processed:
+            already_processed.add('u')
+            outfile.write(' u="%s"' % self.gds_format_double(self.u, input_name='u'))
+        if 'v' not in already_processed:
+            already_processed.add('v')
+            outfile.write(' v="%s"' % self.gds_format_double(self.v, input_name='v'))
+        if 'z' not in already_processed:
+            already_processed.add('z')
+            outfile.write(' z="%s"' % self.gds_format_double(self.z, input_name='z'))
+        if 'height' not in already_processed:
+            already_processed.add('height')
+            outfile.write(' height="%s"' % self.gds_format_double(self.height, input_name='height'))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_outlines_outline_cornerLocal', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('u', node)
+        if value is not None and 'u' not in already_processed:
+            already_processed.add('u')
+            try:
+                self.u = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (u): %s' % exp)
+        value = find_attr_value_('v', node)
+        if value is not None and 'v' not in already_processed:
+            already_processed.add('v')
+            try:
+                self.v = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (v): %s' % exp)
+        value = find_attr_value_('z', node)
+        if value is not None and 'z' not in already_processed:
+            already_processed.add('z')
+            try:
+                self.z = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (z): %s' % exp)
+        value = find_attr_value_('height', node)
+        if value is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            try:
+                self.height = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (height): %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 as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.id < 0:
+                raise_parse_error(node, 'Invalid NonNegativeInteger')
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_object_outlines_outline_cornerLocal
+
+
+class t_road_objects_object_material(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, surface=None, friction=None, roughness=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.surface = _cast(None, surface)
+        self.surface_nsprefix_ = None
+        self.friction = _cast(float, friction)
+        self.friction_nsprefix_ = None
+        self.roughness = _cast(float, roughness)
+        self.roughness_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_object_material)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_object_material.subclass:
+            return t_road_objects_object_material.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_object_material(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_surface(self):
+        return self.surface
+    def set_surface(self, surface):
+        self.surface = surface
+    def get_friction(self):
+        return self.friction
+    def set_friction(self, friction):
+        self.friction = friction
+    def get_roughness(self):
+        return self.roughness
+    def set_roughness(self, roughness):
+        self.roughness = roughness
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_material', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_object_material')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_object_material')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_object_material', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_object_material'):
+        if self.surface is not None and 'surface' not in already_processed:
+            already_processed.add('surface')
+            outfile.write(' surface=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.surface), input_name='surface')), ))
+        if self.friction is not None and 'friction' not in already_processed:
+            already_processed.add('friction')
+            outfile.write(' friction="%s"' % self.gds_format_double(self.friction, input_name='friction'))
+        if self.roughness is not None and 'roughness' not in already_processed:
+            already_processed.add('roughness')
+            outfile.write(' roughness="%s"' % self.gds_format_double(self.roughness, input_name='roughness'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_material', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('surface', node)
+        if value is not None and 'surface' not in already_processed:
+            already_processed.add('surface')
+            self.surface = value
+        value = find_attr_value_('friction', node)
+        if value is not None and 'friction' not in already_processed:
+            already_processed.add('friction')
+            try:
+                self.friction = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (friction): %s' % exp)
+            self.validate_t_grEqZero(self.friction)    # validate type t_grEqZero
+        value = find_attr_value_('roughness', node)
+        if value is not None and 'roughness' not in already_processed:
+            already_processed.add('roughness')
+            try:
+                self.roughness = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (roughness): %s' % exp)
+            self.validate_t_grEqZero(self.roughness)    # validate type t_grEqZero
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_object_material
+
+
+class t_road_objects_object_laneValidity(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, fromLane=None, toLane=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.fromLane = _cast(int, fromLane)
+        self.fromLane_nsprefix_ = None
+        self.toLane = _cast(int, toLane)
+        self.toLane_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_object_laneValidity)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_object_laneValidity.subclass:
+            return t_road_objects_object_laneValidity.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_object_laneValidity(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_fromLane(self):
+        return self.fromLane
+    def set_fromLane(self, fromLane):
+        self.fromLane = fromLane
+    def get_toLane(self):
+        return self.toLane
+    def set_toLane(self, toLane):
+        self.toLane = toLane
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_laneValidity', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_object_laneValidity')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_object_laneValidity')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_object_laneValidity', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_object_laneValidity'):
+        if 'fromLane' not in already_processed:
+            already_processed.add('fromLane')
+            outfile.write(' fromLane="%s"' % self.gds_format_integer(self.fromLane, input_name='fromLane'))
+        if 'toLane' not in already_processed:
+            already_processed.add('toLane')
+            outfile.write(' toLane="%s"' % self.gds_format_integer(self.toLane, input_name='toLane'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_laneValidity', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('fromLane', node)
+        if value is not None and 'fromLane' not in already_processed:
+            already_processed.add('fromLane')
+            try:
+                self.fromLane = int(value)
+            except ValueError as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+        value = find_attr_value_('toLane', node)
+        if value is not None and 'toLane' not in already_processed:
+            already_processed.add('toLane')
+            try:
+                self.toLane = int(value)
+            except ValueError as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_object_laneValidity
+
+
+class t_road_objects_object_parkingSpace(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, access=None, restrictions=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.access = _cast(None, access)
+        self.access_nsprefix_ = None
+        self.restrictions = _cast(None, restrictions)
+        self.restrictions_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_object_parkingSpace)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_object_parkingSpace.subclass:
+            return t_road_objects_object_parkingSpace.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_object_parkingSpace(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_access(self):
+        return self.access
+    def set_access(self, access):
+        self.access = access
+    def get_restrictions(self):
+        return self.restrictions
+    def set_restrictions(self, restrictions):
+        self.restrictions = restrictions
+    def validate_e_road_objects_object_parkingSpace_access(self, value):
+        # Validate type e_road_objects_object_parkingSpace_access, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['all', 'car', 'women', 'handicapped', 'bus', 'truck', 'electric', 'residents']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_road_objects_object_parkingSpace_access' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_parkingSpace', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_object_parkingSpace')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_object_parkingSpace')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_object_parkingSpace', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_object_parkingSpace'):
+        if 'access' not in already_processed:
+            already_processed.add('access')
+            outfile.write(' access=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.access), input_name='access')), ))
+        if self.restrictions is not None and 'restrictions' not in already_processed:
+            already_processed.add('restrictions')
+            outfile.write(' restrictions=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.restrictions), input_name='restrictions')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_parkingSpace', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('access', node)
+        if value is not None and 'access' not in already_processed:
+            already_processed.add('access')
+            self.access = value
+            self.validate_e_road_objects_object_parkingSpace_access(self.access)    # validate type e_road_objects_object_parkingSpace_access
+        value = find_attr_value_('restrictions', node)
+        if value is not None and 'restrictions' not in already_processed:
+            already_processed.add('restrictions')
+            self.restrictions = value
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_object_parkingSpace
+
+
+class t_road_objects_object_markings(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, marking=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if marking is None:
+            self.marking = []
+        else:
+            self.marking = marking
+        self.marking_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_object_markings)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_object_markings.subclass:
+            return t_road_objects_object_markings.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_object_markings(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_marking(self):
+        return self.marking
+    def set_marking(self, marking):
+        self.marking = marking
+    def add_marking(self, value):
+        self.marking.append(value)
+    def insert_marking_at(self, index, value):
+        self.marking.insert(index, value)
+    def replace_marking_at(self, index, value):
+        self.marking[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.marking or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_markings', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_object_markings')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_object_markings')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_object_markings', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_object_markings'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_markings', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for marking_ in self.marking:
+            namespaceprefix_ = self.marking_nsprefix_ + ':' if (UseCapturedNS_ and self.marking_nsprefix_) else ''
+            marking_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='marking', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'marking':
+            obj_ = t_road_objects_object_markings_marking.factory(parent_object_=self)
+            obj_.build(child_)
+            self.marking.append(obj_)
+            obj_.original_tagname_ = 'marking'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_object_markings
+
+
+class t_road_objects_object_markings_marking(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, side=None, weight=None, width=None, color=None, zOffset=None, spaceLength=None, lineLength=None, startOffset=None, stopOffset=None, cornerReference=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.side = _cast(None, side)
+        self.side_nsprefix_ = None
+        self.weight = _cast(None, weight)
+        self.weight_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        self.color = _cast(None, color)
+        self.color_nsprefix_ = None
+        self.zOffset = _cast(float, zOffset)
+        self.zOffset_nsprefix_ = None
+        self.spaceLength = _cast(float, spaceLength)
+        self.spaceLength_nsprefix_ = None
+        self.lineLength = _cast(float, lineLength)
+        self.lineLength_nsprefix_ = None
+        self.startOffset = _cast(float, startOffset)
+        self.startOffset_nsprefix_ = None
+        self.stopOffset = _cast(float, stopOffset)
+        self.stopOffset_nsprefix_ = None
+        if cornerReference is None:
+            self.cornerReference = []
+        else:
+            self.cornerReference = cornerReference
+        self.cornerReference_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_object_markings_marking)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_object_markings_marking.subclass:
+            return t_road_objects_object_markings_marking.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_object_markings_marking(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_cornerReference(self):
+        return self.cornerReference
+    def set_cornerReference(self, cornerReference):
+        self.cornerReference = cornerReference
+    def add_cornerReference(self, value):
+        self.cornerReference.append(value)
+    def insert_cornerReference_at(self, index, value):
+        self.cornerReference.insert(index, value)
+    def replace_cornerReference_at(self, index, value):
+        self.cornerReference[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_side(self):
+        return self.side
+    def set_side(self, side):
+        self.side = side
+    def get_weight(self):
+        return self.weight
+    def set_weight(self, weight):
+        self.weight = weight
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def get_color(self):
+        return self.color
+    def set_color(self, color):
+        self.color = color
+    def get_zOffset(self):
+        return self.zOffset
+    def set_zOffset(self, zOffset):
+        self.zOffset = zOffset
+    def get_spaceLength(self):
+        return self.spaceLength
+    def set_spaceLength(self, spaceLength):
+        self.spaceLength = spaceLength
+    def get_lineLength(self):
+        return self.lineLength
+    def set_lineLength(self, lineLength):
+        self.lineLength = lineLength
+    def get_startOffset(self):
+        return self.startOffset
+    def set_startOffset(self, startOffset):
+        self.startOffset = startOffset
+    def get_stopOffset(self):
+        return self.stopOffset
+    def set_stopOffset(self, stopOffset):
+        self.stopOffset = stopOffset
+    def validate_e_sideType(self, value):
+        # Validate type e_sideType, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['left', 'right', 'front', 'rear']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_sideType' % {"value" : value.encode("utf-8")} )
+    def validate_e_roadMarkWeight(self, value):
+        # Validate type e_roadMarkWeight, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['standard', 'bold']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_roadMarkWeight' % {"value" : value.encode("utf-8")} )
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_roadMarkColor(self, value):
+        # Validate type e_roadMarkColor, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['standard', 'blue', 'green', 'red', 'white', 'yellow', 'orange']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_roadMarkColor' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.cornerReference or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_markings_marking', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_object_markings_marking')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_object_markings_marking')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_object_markings_marking', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_object_markings_marking'):
+        if 'side' not in already_processed:
+            already_processed.add('side')
+            outfile.write(' side=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.side), input_name='side')), ))
+        if 'weight' not in already_processed:
+            already_processed.add('weight')
+            outfile.write(' weight=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.weight), input_name='weight')), ))
+        if self.width is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+        if 'color' not in already_processed:
+            already_processed.add('color')
+            outfile.write(' color=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.color), input_name='color')), ))
+        if self.zOffset is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            outfile.write(' zOffset="%s"' % self.gds_format_double(self.zOffset, input_name='zOffset'))
+        if 'spaceLength' not in already_processed:
+            already_processed.add('spaceLength')
+            outfile.write(' spaceLength="%s"' % self.gds_format_double(self.spaceLength, input_name='spaceLength'))
+        if 'lineLength' not in already_processed:
+            already_processed.add('lineLength')
+            outfile.write(' lineLength="%s"' % self.gds_format_double(self.lineLength, input_name='lineLength'))
+        if 'startOffset' not in already_processed:
+            already_processed.add('startOffset')
+            outfile.write(' startOffset="%s"' % self.gds_format_double(self.startOffset, input_name='startOffset'))
+        if 'stopOffset' not in already_processed:
+            already_processed.add('stopOffset')
+            outfile.write(' stopOffset="%s"' % self.gds_format_double(self.stopOffset, input_name='stopOffset'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_markings_marking', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for cornerReference_ in self.cornerReference:
+            namespaceprefix_ = self.cornerReference_nsprefix_ + ':' if (UseCapturedNS_ and self.cornerReference_nsprefix_) else ''
+            cornerReference_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='cornerReference', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('side', node)
+        if value is not None and 'side' not in already_processed:
+            already_processed.add('side')
+            self.side = value
+            self.validate_e_sideType(self.side)    # validate type e_sideType
+        value = find_attr_value_('weight', node)
+        if value is not None and 'weight' not in already_processed:
+            already_processed.add('weight')
+            self.weight = value
+            self.validate_e_roadMarkWeight(self.weight)    # validate type e_roadMarkWeight
+        value = find_attr_value_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            try:
+                self.width = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (width): %s' % exp)
+            self.validate_t_grEqZero(self.width)    # validate type t_grEqZero
+        value = find_attr_value_('color', node)
+        if value is not None and 'color' not in already_processed:
+            already_processed.add('color')
+            self.color = value
+            self.validate_e_roadMarkColor(self.color)    # validate type e_roadMarkColor
+        value = find_attr_value_('zOffset', node)
+        if value is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            try:
+                self.zOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (zOffset): %s' % exp)
+            self.validate_t_grEqZero(self.zOffset)    # validate type t_grEqZero
+        value = find_attr_value_('spaceLength', node)
+        if value is not None and 'spaceLength' not in already_processed:
+            already_processed.add('spaceLength')
+            try:
+                self.spaceLength = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (spaceLength): %s' % exp)
+            self.validate_t_grEqZero(self.spaceLength)    # validate type t_grEqZero
+        value = find_attr_value_('lineLength', node)
+        if value is not None and 'lineLength' not in already_processed:
+            already_processed.add('lineLength')
+            try:
+                self.lineLength = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (lineLength): %s' % exp)
+            self.validate_t_grEqZero(self.lineLength)    # validate type t_grEqZero
+        value = find_attr_value_('startOffset', node)
+        if value is not None and 'startOffset' not in already_processed:
+            already_processed.add('startOffset')
+            try:
+                self.startOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (startOffset): %s' % exp)
+        value = find_attr_value_('stopOffset', node)
+        if value is not None and 'stopOffset' not in already_processed:
+            already_processed.add('stopOffset')
+            try:
+                self.stopOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (stopOffset): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'cornerReference':
+            obj_ = t_road_objects_object_markings_marking_cornerReference.factory(parent_object_=self)
+            obj_.build(child_)
+            self.cornerReference.append(obj_)
+            obj_.original_tagname_ = 'cornerReference'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_object_markings_marking
+
+
+class t_road_objects_object_markings_marking_cornerReference(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(int, id)
+        self.id_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_object_markings_marking_cornerReference)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_object_markings_marking_cornerReference.subclass:
+            return t_road_objects_object_markings_marking_cornerReference.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_object_markings_marking_cornerReference(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_markings_marking_cornerReference', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_object_markings_marking_cornerReference')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_object_markings_marking_cornerReference')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_object_markings_marking_cornerReference', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_object_markings_marking_cornerReference'):
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_markings_marking_cornerReference', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            try:
+                self.id = int(value)
+            except ValueError as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.id < 0:
+                raise_parse_error(node, 'Invalid NonNegativeInteger')
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_object_markings_marking_cornerReference
+
+
+class t_road_objects_object_borders(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, border=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if border is None:
+            self.border = []
+        else:
+            self.border = border
+        self.border_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_object_borders)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_object_borders.subclass:
+            return t_road_objects_object_borders.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_object_borders(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_border(self):
+        return self.border
+    def set_border(self, border):
+        self.border = border
+    def add_border(self, value):
+        self.border.append(value)
+    def insert_border_at(self, index, value):
+        self.border.insert(index, value)
+    def replace_border_at(self, index, value):
+        self.border[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.border or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_borders', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_object_borders')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_object_borders')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_object_borders', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_object_borders'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_borders', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for border_ in self.border:
+            namespaceprefix_ = self.border_nsprefix_ + ':' if (UseCapturedNS_ and self.border_nsprefix_) else ''
+            border_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='border', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'border':
+            obj_ = t_road_objects_object_borders_border.factory(parent_object_=self)
+            obj_.build(child_)
+            self.border.append(obj_)
+            obj_.original_tagname_ = 'border'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_object_borders
+
+
+class t_road_objects_object_borders_border(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, width=None, type_=None, outlineId=None, useCompleteOutline=None, cornerReference=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.outlineId = _cast(int, outlineId)
+        self.outlineId_nsprefix_ = None
+        self.useCompleteOutline = _cast(None, useCompleteOutline)
+        self.useCompleteOutline_nsprefix_ = None
+        if cornerReference is None:
+            self.cornerReference = []
+        else:
+            self.cornerReference = cornerReference
+        self.cornerReference_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_object_borders_border)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_object_borders_border.subclass:
+            return t_road_objects_object_borders_border.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_object_borders_border(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_cornerReference(self):
+        return self.cornerReference
+    def set_cornerReference(self, cornerReference):
+        self.cornerReference = cornerReference
+    def add_cornerReference(self, value):
+        self.cornerReference.append(value)
+    def insert_cornerReference_at(self, index, value):
+        self.cornerReference.insert(index, value)
+    def replace_cornerReference_at(self, index, value):
+        self.cornerReference[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_outlineId(self):
+        return self.outlineId
+    def set_outlineId(self, outlineId):
+        self.outlineId = outlineId
+    def get_useCompleteOutline(self):
+        return self.useCompleteOutline
+    def set_useCompleteOutline(self, useCompleteOutline):
+        self.useCompleteOutline = useCompleteOutline
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_borderType(self, value):
+        # Validate type e_borderType, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['concrete', 'curb']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_borderType' % {"value" : value.encode("utf-8")} )
+    def validate_t_bool(self, value):
+        # Validate type t_bool, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['true', 'false']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on t_bool' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.cornerReference or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_borders_border', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_object_borders_border')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_object_borders_border')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_object_borders_border', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_object_borders_border'):
+        if 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+        if 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+        if 'outlineId' not in already_processed:
+            already_processed.add('outlineId')
+            outfile.write(' outlineId="%s"' % self.gds_format_integer(self.outlineId, input_name='outlineId'))
+        if self.useCompleteOutline is not None and 'useCompleteOutline' not in already_processed:
+            already_processed.add('useCompleteOutline')
+            outfile.write(' useCompleteOutline=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.useCompleteOutline), input_name='useCompleteOutline')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_object_borders_border', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for cornerReference_ in self.cornerReference:
+            namespaceprefix_ = self.cornerReference_nsprefix_ + ':' if (UseCapturedNS_ and self.cornerReference_nsprefix_) else ''
+            cornerReference_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='cornerReference', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            try:
+                self.width = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (width): %s' % exp)
+            self.validate_t_grEqZero(self.width)    # validate type t_grEqZero
+        value = find_attr_value_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            self.type_ = value
+            self.validate_e_borderType(self.type_)    # validate type e_borderType
+        value = find_attr_value_('outlineId', node)
+        if value is not None and 'outlineId' not in already_processed:
+            already_processed.add('outlineId')
+            try:
+                self.outlineId = int(value)
+            except ValueError as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.outlineId < 0:
+                raise_parse_error(node, 'Invalid NonNegativeInteger')
+        value = find_attr_value_('useCompleteOutline', node)
+        if value is not None and 'useCompleteOutline' not in already_processed:
+            already_processed.add('useCompleteOutline')
+            self.useCompleteOutline = value
+            self.validate_t_bool(self.useCompleteOutline)    # validate type t_bool
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'cornerReference':
+            obj_ = t_road_objects_object_markings_marking_cornerReference.factory(parent_object_=self)
+            obj_.build(child_)
+            self.cornerReference.append(obj_)
+            obj_.original_tagname_ = 'cornerReference'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_object_borders_border
+
+
+class t_road_objects_objectReference(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, t=None, id=None, zOffset=None, validLength=None, orientation=None, validity=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.t = _cast(float, t)
+        self.t_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.zOffset = _cast(float, zOffset)
+        self.zOffset_nsprefix_ = None
+        self.validLength = _cast(float, validLength)
+        self.validLength_nsprefix_ = None
+        self.orientation = _cast(None, orientation)
+        self.orientation_nsprefix_ = None
+        if validity is None:
+            self.validity = []
+        else:
+            self.validity = validity
+        self.validity_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_objectReference)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_objectReference.subclass:
+            return t_road_objects_objectReference.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_objectReference(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_validity(self):
+        return self.validity
+    def set_validity(self, validity):
+        self.validity = validity
+    def add_validity(self, value):
+        self.validity.append(value)
+    def insert_validity_at(self, index, value):
+        self.validity.insert(index, value)
+    def replace_validity_at(self, index, value):
+        self.validity[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_t(self):
+        return self.t
+    def set_t(self, t):
+        self.t = t
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_zOffset(self):
+        return self.zOffset
+    def set_zOffset(self, zOffset):
+        self.zOffset = zOffset
+    def get_validLength(self):
+        return self.validLength
+    def set_validLength(self, validLength):
+        self.validLength = validLength
+    def get_orientation(self):
+        return self.orientation
+    def set_orientation(self, orientation):
+        self.orientation = orientation
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_orientation(self, value):
+        # Validate type e_orientation, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['+', '-', 'none']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_orientation' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.validity or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_objectReference', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_objectReference')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_objectReference')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_objectReference', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_objectReference'):
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 't' not in already_processed:
+            already_processed.add('t')
+            outfile.write(' t="%s"' % self.gds_format_double(self.t, input_name='t'))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            outfile.write(' zOffset="%s"' % self.gds_format_double(self.zOffset, input_name='zOffset'))
+        if 'validLength' not in already_processed:
+            already_processed.add('validLength')
+            outfile.write(' validLength="%s"' % self.gds_format_double(self.validLength, input_name='validLength'))
+        if 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            outfile.write(' orientation=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.orientation), input_name='orientation')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_objectReference', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for validity_ in self.validity:
+            namespaceprefix_ = self.validity_nsprefix_ + ':' if (UseCapturedNS_ and self.validity_nsprefix_) else ''
+            validity_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='validity', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('t', node)
+        if value is not None and 't' not in already_processed:
+            already_processed.add('t')
+            try:
+                self.t = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (t): %s' % exp)
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+        value = find_attr_value_('zOffset', node)
+        if value is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            try:
+                self.zOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (zOffset): %s' % exp)
+        value = find_attr_value_('validLength', node)
+        if value is not None and 'validLength' not in already_processed:
+            already_processed.add('validLength')
+            try:
+                self.validLength = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (validLength): %s' % exp)
+            self.validate_t_grEqZero(self.validLength)    # validate type t_grEqZero
+        value = find_attr_value_('orientation', node)
+        if value is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            self.orientation = value
+            self.validate_e_orientation(self.orientation)    # validate type e_orientation
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'validity':
+            obj_ = t_road_objects_object_laneValidity.factory(parent_object_=self)
+            obj_.build(child_)
+            self.validity.append(obj_)
+            obj_.original_tagname_ = 'validity'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_objectReference
+
+
+class t_road_objects_tunnel(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, length=None, name=None, id=None, type_=None, lighting=None, daylight=None, validity=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.lighting = _cast(float, lighting)
+        self.lighting_nsprefix_ = None
+        self.daylight = _cast(float, daylight)
+        self.daylight_nsprefix_ = None
+        if validity is None:
+            self.validity = []
+        else:
+            self.validity = validity
+        self.validity_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_tunnel)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_tunnel.subclass:
+            return t_road_objects_tunnel.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_tunnel(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_validity(self):
+        return self.validity
+    def set_validity(self, validity):
+        self.validity = validity
+    def add_validity(self, value):
+        self.validity.append(value)
+    def insert_validity_at(self, index, value):
+        self.validity.insert(index, value)
+    def replace_validity_at(self, index, value):
+        self.validity[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_lighting(self):
+        return self.lighting
+    def set_lighting(self, lighting):
+        self.lighting = lighting
+    def get_daylight(self):
+        return self.daylight
+    def set_daylight(self, daylight):
+        self.daylight = daylight
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_tunnelType(self, value):
+        # Validate type e_tunnelType, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['standard', 'underpass']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_tunnelType' % {"value" : value.encode("utf-8")} )
+    def validate_t_zeroOne(self, value):
+        # Validate type t_zeroOne, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_zeroOne' % {"value" : value} )
+            if value > 1.0:
+                warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on t_zeroOne' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.validity or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_tunnel', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_tunnel')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_tunnel')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_tunnel', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_tunnel'):
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+        if self.lighting is not None and 'lighting' not in already_processed:
+            already_processed.add('lighting')
+            outfile.write(' lighting="%s"' % self.gds_format_double(self.lighting, input_name='lighting'))
+        if self.daylight is not None and 'daylight' not in already_processed:
+            already_processed.add('daylight')
+            outfile.write(' daylight="%s"' % self.gds_format_double(self.daylight, input_name='daylight'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_tunnel', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for validity_ in self.validity:
+            namespaceprefix_ = self.validity_nsprefix_ + ':' if (UseCapturedNS_ and self.validity_nsprefix_) else ''
+            validity_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='validity', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            try:
+                self.length = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (length): %s' % exp)
+            self.validate_t_grEqZero(self.length)    # validate type t_grEqZero
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = 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
+            self.validate_e_tunnelType(self.type_)    # validate type e_tunnelType
+        value = find_attr_value_('lighting', node)
+        if value is not None and 'lighting' not in already_processed:
+            already_processed.add('lighting')
+            try:
+                self.lighting = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (lighting): %s' % exp)
+            self.validate_t_zeroOne(self.lighting)    # validate type t_zeroOne
+        value = find_attr_value_('daylight', node)
+        if value is not None and 'daylight' not in already_processed:
+            already_processed.add('daylight')
+            try:
+                self.daylight = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (daylight): %s' % exp)
+            self.validate_t_zeroOne(self.daylight)    # validate type t_zeroOne
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'validity':
+            obj_ = t_road_objects_object_laneValidity.factory(parent_object_=self)
+            obj_.build(child_)
+            self.validity.append(obj_)
+            obj_.original_tagname_ = 'validity'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_tunnel
+
+
+class t_road_objects_bridge(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, length=None, name=None, id=None, type_=None, validity=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.length = _cast(float, length)
+        self.length_nsprefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        if validity is None:
+            self.validity = []
+        else:
+            self.validity = validity
+        self.validity_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_objects_bridge)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_objects_bridge.subclass:
+            return t_road_objects_bridge.subclass(*args_, **kwargs_)
+        else:
+            return t_road_objects_bridge(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_validity(self):
+        return self.validity
+    def set_validity(self, validity):
+        self.validity = validity
+    def add_validity(self, value):
+        self.validity.append(value)
+    def insert_validity_at(self, index, value):
+        self.validity.insert(index, value)
+    def replace_validity_at(self, index, value):
+        self.validity[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_length(self):
+        return self.length
+    def set_length(self, length):
+        self.length = length
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_bridgeType(self, value):
+        # Validate type e_bridgeType, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['concrete', 'steel', 'brick', 'wood']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_bridgeType' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.validity or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_bridge', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_objects_bridge')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_objects_bridge')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_objects_bridge', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_objects_bridge'):
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 'length' not in already_processed:
+            already_processed.add('length')
+            outfile.write(' length="%s"' % self.gds_format_double(self.length, input_name='length'))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_objects_bridge', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for validity_ in self.validity:
+            namespaceprefix_ = self.validity_nsprefix_ + ':' if (UseCapturedNS_ and self.validity_nsprefix_) else ''
+            validity_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='validity', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('length', node)
+        if value is not None and 'length' not in already_processed:
+            already_processed.add('length')
+            try:
+                self.length = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (length): %s' % exp)
+            self.validate_t_grEqZero(self.length)    # validate type t_grEqZero
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = 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
+            self.validate_e_bridgeType(self.type_)    # validate type e_bridgeType
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'validity':
+            obj_ = t_road_objects_object_laneValidity.factory(parent_object_=self)
+            obj_.build(child_)
+            self.validity.append(obj_)
+            obj_.original_tagname_ = 'validity'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_objects_bridge
+
+
+class t_road_signals(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, signal=None, signalReference=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if signal is None:
+            self.signal = []
+        else:
+            self.signal = signal
+        self.signal_nsprefix_ = None
+        if signalReference is None:
+            self.signalReference = []
+        else:
+            self.signalReference = signalReference
+        self.signalReference_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_signals)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_signals.subclass:
+            return t_road_signals.subclass(*args_, **kwargs_)
+        else:
+            return t_road_signals(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_signal(self):
+        return self.signal
+    def set_signal(self, signal):
+        self.signal = signal
+    def add_signal(self, value):
+        self.signal.append(value)
+    def insert_signal_at(self, index, value):
+        self.signal.insert(index, value)
+    def replace_signal_at(self, index, value):
+        self.signal[index] = value
+    def get_signalReference(self):
+        return self.signalReference
+    def set_signalReference(self, signalReference):
+        self.signalReference = signalReference
+    def add_signalReference(self, value):
+        self.signalReference.append(value)
+    def insert_signalReference_at(self, index, value):
+        self.signalReference.insert(index, value)
+    def replace_signalReference_at(self, index, value):
+        self.signalReference[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.signal or
+            self.signalReference or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_signals', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_signals')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_signals')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_signals', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_signals'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_signals', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for signal_ in self.signal:
+            namespaceprefix_ = self.signal_nsprefix_ + ':' if (UseCapturedNS_ and self.signal_nsprefix_) else ''
+            signal_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='signal', pretty_print=pretty_print)
+        for signalReference_ in self.signalReference:
+            namespaceprefix_ = self.signalReference_nsprefix_ + ':' if (UseCapturedNS_ and self.signalReference_nsprefix_) else ''
+            signalReference_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='signalReference', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'signal':
+            obj_ = t_road_signals_signal.factory(parent_object_=self)
+            obj_.build(child_)
+            self.signal.append(obj_)
+            obj_.original_tagname_ = 'signal'
+        elif nodeName_ == 'signalReference':
+            obj_ = t_road_signals_signalReference.factory(parent_object_=self)
+            obj_.build(child_)
+            self.signalReference.append(obj_)
+            obj_.original_tagname_ = 'signalReference'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_signals
+
+
+class t_road_signals_signal(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, t=None, id=None, name=None, dynamic=None, orientation=None, zOffset=None, country=None, countryRevision=None, type_=None, subtype=None, value=None, unit=None, height=None, width=None, text=None, hOffset=None, pitch=None, roll=None, validity=None, dependency=None, reference=None, positionRoad=None, positionInertial=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.t = _cast(float, t)
+        self.t_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.dynamic = _cast(None, dynamic)
+        self.dynamic_nsprefix_ = None
+        self.orientation = _cast(None, orientation)
+        self.orientation_nsprefix_ = None
+        self.zOffset = _cast(float, zOffset)
+        self.zOffset_nsprefix_ = None
+        self.country = _cast(None, country)
+        self.country_nsprefix_ = None
+        self.countryRevision = _cast(None, countryRevision)
+        self.countryRevision_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.subtype = _cast(None, subtype)
+        self.subtype_nsprefix_ = None
+        self.value = _cast(float, value)
+        self.value_nsprefix_ = None
+        self.unit = _cast(None, unit)
+        self.unit_nsprefix_ = None
+        self.height = _cast(float, height)
+        self.height_nsprefix_ = None
+        self.width = _cast(float, width)
+        self.width_nsprefix_ = None
+        self.text = _cast(None, text)
+        self.text_nsprefix_ = None
+        self.hOffset = _cast(float, hOffset)
+        self.hOffset_nsprefix_ = None
+        self.pitch = _cast(float, pitch)
+        self.pitch_nsprefix_ = None
+        self.roll = _cast(float, roll)
+        self.roll_nsprefix_ = None
+        if validity is None:
+            self.validity = []
+        else:
+            self.validity = validity
+        self.validity_nsprefix_ = None
+        if dependency is None:
+            self.dependency = []
+        else:
+            self.dependency = dependency
+        self.dependency_nsprefix_ = None
+        if reference is None:
+            self.reference = []
+        else:
+            self.reference = reference
+        self.reference_nsprefix_ = None
+        self.positionRoad = positionRoad
+        self.positionRoad_nsprefix_ = None
+        self.positionInertial = positionInertial
+        self.positionInertial_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_signals_signal)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_signals_signal.subclass:
+            return t_road_signals_signal.subclass(*args_, **kwargs_)
+        else:
+            return t_road_signals_signal(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_validity(self):
+        return self.validity
+    def set_validity(self, validity):
+        self.validity = validity
+    def add_validity(self, value):
+        self.validity.append(value)
+    def insert_validity_at(self, index, value):
+        self.validity.insert(index, value)
+    def replace_validity_at(self, index, value):
+        self.validity[index] = value
+    def get_dependency(self):
+        return self.dependency
+    def set_dependency(self, dependency):
+        self.dependency = dependency
+    def add_dependency(self, value):
+        self.dependency.append(value)
+    def insert_dependency_at(self, index, value):
+        self.dependency.insert(index, value)
+    def replace_dependency_at(self, index, value):
+        self.dependency[index] = value
+    def get_reference(self):
+        return self.reference
+    def set_reference(self, reference):
+        self.reference = reference
+    def add_reference(self, value):
+        self.reference.append(value)
+    def insert_reference_at(self, index, value):
+        self.reference.insert(index, value)
+    def replace_reference_at(self, index, value):
+        self.reference[index] = value
+    def get_positionRoad(self):
+        return self.positionRoad
+    def set_positionRoad(self, positionRoad):
+        self.positionRoad = positionRoad
+    def get_positionInertial(self):
+        return self.positionInertial
+    def set_positionInertial(self, positionInertial):
+        self.positionInertial = positionInertial
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_t(self):
+        return self.t
+    def set_t(self, t):
+        self.t = t
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_dynamic(self):
+        return self.dynamic
+    def set_dynamic(self, dynamic):
+        self.dynamic = dynamic
+    def get_orientation(self):
+        return self.orientation
+    def set_orientation(self, orientation):
+        self.orientation = orientation
+    def get_zOffset(self):
+        return self.zOffset
+    def set_zOffset(self, zOffset):
+        self.zOffset = zOffset
+    def get_country(self):
+        return self.country
+    def set_country(self, country):
+        self.country = country
+    def get_countryRevision(self):
+        return self.countryRevision
+    def set_countryRevision(self, countryRevision):
+        self.countryRevision = countryRevision
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_subtype(self):
+        return self.subtype
+    def set_subtype(self, subtype):
+        self.subtype = subtype
+    def get_value(self):
+        return self.value
+    def set_value(self, value):
+        self.value = value
+    def get_unit(self):
+        return self.unit
+    def set_unit(self, unit):
+        self.unit = unit
+    def get_height(self):
+        return self.height
+    def set_height(self, height):
+        self.height = height
+    def get_width(self):
+        return self.width
+    def set_width(self, width):
+        self.width = width
+    def get_text(self):
+        return self.text
+    def set_text(self, text):
+        self.text = text
+    def get_hOffset(self):
+        return self.hOffset
+    def set_hOffset(self, hOffset):
+        self.hOffset = hOffset
+    def get_pitch(self):
+        return self.pitch
+    def set_pitch(self, pitch):
+        self.pitch = pitch
+    def get_roll(self):
+        return self.roll
+    def set_roll(self, roll):
+        self.roll = roll
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_t_yesNo(self, value):
+        # Validate type t_yesNo, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['yes', 'no']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on t_yesNo' % {"value" : value.encode("utf-8")} )
+    def validate_e_orientation(self, value):
+        # Validate type e_orientation, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['+', '-', 'none']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_orientation' % {"value" : value.encode("utf-8")} )
+    def validate_e_countryCode(self, value):
+        # Validate type e_countryCode, a restriction on None.
+        pass
+    def validate_e_unit(self, value):
+        # Validate type e_unit, a restriction on None.
+        pass
+    def hasContent_(self):
+        if (
+            self.validity or
+            self.dependency or
+            self.reference or
+            self.positionRoad is not None or
+            self.positionInertial is not None or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_signals_signal', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_signals_signal')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_signals_signal')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_signals_signal', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_signals_signal'):
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 't' not in already_processed:
+            already_processed.add('t')
+            outfile.write(' t="%s"' % self.gds_format_double(self.t, input_name='t'))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if 'dynamic' not in already_processed:
+            already_processed.add('dynamic')
+            outfile.write(' dynamic=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.dynamic), input_name='dynamic')), ))
+        if 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            outfile.write(' orientation=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.orientation), input_name='orientation')), ))
+        if 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            outfile.write(' zOffset="%s"' % self.gds_format_double(self.zOffset, input_name='zOffset'))
+        if self.country is not None and 'country' not in already_processed:
+            already_processed.add('country')
+            outfile.write(' country=%s' % (quote_attrib(self.country), ))
+        if self.countryRevision is not None and 'countryRevision' not in already_processed:
+            already_processed.add('countryRevision')
+            outfile.write(' countryRevision=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.countryRevision), input_name='countryRevision')), ))
+        if 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+        if 'subtype' not in already_processed:
+            already_processed.add('subtype')
+            outfile.write(' subtype=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.subtype), input_name='subtype')), ))
+        if self.value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            outfile.write(' value="%s"' % self.gds_format_double(self.value, input_name='value'))
+        if self.unit is not None and 'unit' not in already_processed:
+            already_processed.add('unit')
+            outfile.write(' unit=%s' % (quote_attrib(self.unit), ))
+        if 'height' not in already_processed:
+            already_processed.add('height')
+            outfile.write(' height="%s"' % self.gds_format_double(self.height, input_name='height'))
+        if 'width' not in already_processed:
+            already_processed.add('width')
+            outfile.write(' width="%s"' % self.gds_format_double(self.width, input_name='width'))
+        if self.text is not None and 'text' not in already_processed:
+            already_processed.add('text')
+            outfile.write(' text=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.text), input_name='text')), ))
+        if self.hOffset is not None and 'hOffset' not in already_processed:
+            already_processed.add('hOffset')
+            outfile.write(' hOffset="%s"' % self.gds_format_double(self.hOffset, input_name='hOffset'))
+        if self.pitch is not None and 'pitch' not in already_processed:
+            already_processed.add('pitch')
+            outfile.write(' pitch="%s"' % self.gds_format_double(self.pitch, input_name='pitch'))
+        if self.roll is not None and 'roll' not in already_processed:
+            already_processed.add('roll')
+            outfile.write(' roll="%s"' % self.gds_format_double(self.roll, input_name='roll'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_signals_signal', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for validity_ in self.validity:
+            namespaceprefix_ = self.validity_nsprefix_ + ':' if (UseCapturedNS_ and self.validity_nsprefix_) else ''
+            validity_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='validity', pretty_print=pretty_print)
+        for dependency_ in self.dependency:
+            namespaceprefix_ = self.dependency_nsprefix_ + ':' if (UseCapturedNS_ and self.dependency_nsprefix_) else ''
+            dependency_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dependency', pretty_print=pretty_print)
+        for reference_ in self.reference:
+            namespaceprefix_ = self.reference_nsprefix_ + ':' if (UseCapturedNS_ and self.reference_nsprefix_) else ''
+            reference_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='reference', pretty_print=pretty_print)
+        if self.positionRoad is not None:
+            namespaceprefix_ = self.positionRoad_nsprefix_ + ':' if (UseCapturedNS_ and self.positionRoad_nsprefix_) else ''
+            self.positionRoad.export(outfile, level, namespaceprefix_, namespacedef_='', name_='positionRoad', pretty_print=pretty_print)
+        if self.positionInertial is not None:
+            namespaceprefix_ = self.positionInertial_nsprefix_ + ':' if (UseCapturedNS_ and self.positionInertial_nsprefix_) else ''
+            self.positionInertial.export(outfile, level, namespaceprefix_, namespacedef_='', name_='positionInertial', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('t', node)
+        if value is not None and 't' not in already_processed:
+            already_processed.add('t')
+            try:
+                self.t = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (t): %s' % exp)
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+        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_('dynamic', node)
+        if value is not None and 'dynamic' not in already_processed:
+            already_processed.add('dynamic')
+            self.dynamic = value
+            self.validate_t_yesNo(self.dynamic)    # validate type t_yesNo
+        value = find_attr_value_('orientation', node)
+        if value is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            self.orientation = value
+            self.validate_e_orientation(self.orientation)    # validate type e_orientation
+        value = find_attr_value_('zOffset', node)
+        if value is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            try:
+                self.zOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (zOffset): %s' % exp)
+        value = find_attr_value_('country', node)
+        if value is not None and 'country' not in already_processed:
+            already_processed.add('country')
+            self.country = value
+            self.validate_e_countryCode(self.country)    # validate type e_countryCode
+        value = find_attr_value_('countryRevision', node)
+        if value is not None and 'countryRevision' not in already_processed:
+            already_processed.add('countryRevision')
+            self.countryRevision = 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_('subtype', node)
+        if value is not None and 'subtype' not in already_processed:
+            already_processed.add('subtype')
+            self.subtype = value
+        value = find_attr_value_('value', node)
+        if value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            try:
+                self.value = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (value): %s' % exp)
+        value = find_attr_value_('unit', node)
+        if value is not None and 'unit' not in already_processed:
+            already_processed.add('unit')
+            self.unit = value
+            self.validate_e_unit(self.unit)    # validate type e_unit
+        value = find_attr_value_('height', node)
+        if value is not None and 'height' not in already_processed:
+            already_processed.add('height')
+            try:
+                self.height = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (height): %s' % exp)
+            self.validate_t_grEqZero(self.height)    # validate type t_grEqZero
+        value = find_attr_value_('width', node)
+        if value is not None and 'width' not in already_processed:
+            already_processed.add('width')
+            try:
+                self.width = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (width): %s' % exp)
+            self.validate_t_grEqZero(self.width)    # validate type t_grEqZero
+        value = find_attr_value_('text', node)
+        if value is not None and 'text' not in already_processed:
+            already_processed.add('text')
+            self.text = value
+        value = find_attr_value_('hOffset', node)
+        if value is not None and 'hOffset' not in already_processed:
+            already_processed.add('hOffset')
+            try:
+                self.hOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (hOffset): %s' % exp)
+        value = find_attr_value_('pitch', node)
+        if value is not None and 'pitch' not in already_processed:
+            already_processed.add('pitch')
+            try:
+                self.pitch = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (pitch): %s' % exp)
+        value = find_attr_value_('roll', node)
+        if value is not None and 'roll' not in already_processed:
+            already_processed.add('roll')
+            try:
+                self.roll = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (roll): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'validity':
+            obj_ = t_road_objects_object_laneValidity.factory(parent_object_=self)
+            obj_.build(child_)
+            self.validity.append(obj_)
+            obj_.original_tagname_ = 'validity'
+        elif nodeName_ == 'dependency':
+            obj_ = t_road_signals_signal_dependency.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dependency.append(obj_)
+            obj_.original_tagname_ = 'dependency'
+        elif nodeName_ == 'reference':
+            obj_ = t_road_signals_signal_reference.factory(parent_object_=self)
+            obj_.build(child_)
+            self.reference.append(obj_)
+            obj_.original_tagname_ = 'reference'
+        elif nodeName_ == 'positionRoad':
+            obj_ = t_road_signals_signal_positionRoad.factory(parent_object_=self)
+            obj_.build(child_)
+            self.positionRoad = obj_
+            obj_.original_tagname_ = 'positionRoad'
+        elif nodeName_ == 'positionInertial':
+            obj_ = t_road_signals_signal_positionInertial.factory(parent_object_=self)
+            obj_.build(child_)
+            self.positionInertial = obj_
+            obj_.original_tagname_ = 'positionInertial'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_signals_signal
+
+
+class t_road_signals_signal_dependency(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, type_=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_signals_signal_dependency)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_signals_signal_dependency.subclass:
+            return t_road_signals_signal_dependency.subclass(*args_, **kwargs_)
+        else:
+            return t_road_signals_signal_dependency(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_signals_signal_dependency', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_signals_signal_dependency')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_signals_signal_dependency')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_signals_signal_dependency', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_signals_signal_dependency'):
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_signals_signal_dependency', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = 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
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_signals_signal_dependency
+
+
+class t_road_signals_signal_reference(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, elementType=None, elementId=None, type_=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.elementType = _cast(None, elementType)
+        self.elementType_nsprefix_ = None
+        self.elementId = _cast(None, elementId)
+        self.elementId_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_signals_signal_reference)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_signals_signal_reference.subclass:
+            return t_road_signals_signal_reference.subclass(*args_, **kwargs_)
+        else:
+            return t_road_signals_signal_reference(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_elementType(self):
+        return self.elementType
+    def set_elementType(self, elementType):
+        self.elementType = elementType
+    def get_elementId(self):
+        return self.elementId
+    def set_elementId(self, elementId):
+        self.elementId = elementId
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def validate_e_road_signals_signal_reference_elementType(self, value):
+        # Validate type e_road_signals_signal_reference_elementType, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['object', 'signal']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_road_signals_signal_reference_elementType' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_signals_signal_reference', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_signals_signal_reference')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_signals_signal_reference')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_signals_signal_reference', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_signals_signal_reference'):
+        if 'elementType' not in already_processed:
+            already_processed.add('elementType')
+            outfile.write(' elementType=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.elementType), input_name='elementType')), ))
+        if 'elementId' not in already_processed:
+            already_processed.add('elementId')
+            outfile.write(' elementId=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.elementId), input_name='elementId')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_signals_signal_reference', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('elementType', node)
+        if value is not None and 'elementType' not in already_processed:
+            already_processed.add('elementType')
+            self.elementType = value
+            self.validate_e_road_signals_signal_reference_elementType(self.elementType)    # validate type e_road_signals_signal_reference_elementType
+        value = find_attr_value_('elementId', node)
+        if value is not None and 'elementId' not in already_processed:
+            already_processed.add('elementId')
+            self.elementId = 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
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_signals_signal_reference
+
+
+class t_road_signals_signal_positionRoad(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, roadId=None, s=None, t=None, zOffset=None, hOffset=None, pitch=None, roll=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.roadId = _cast(None, roadId)
+        self.roadId_nsprefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.t = _cast(float, t)
+        self.t_nsprefix_ = None
+        self.zOffset = _cast(float, zOffset)
+        self.zOffset_nsprefix_ = None
+        self.hOffset = _cast(float, hOffset)
+        self.hOffset_nsprefix_ = None
+        self.pitch = _cast(float, pitch)
+        self.pitch_nsprefix_ = None
+        self.roll = _cast(float, roll)
+        self.roll_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_signals_signal_positionRoad)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_signals_signal_positionRoad.subclass:
+            return t_road_signals_signal_positionRoad.subclass(*args_, **kwargs_)
+        else:
+            return t_road_signals_signal_positionRoad(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_roadId(self):
+        return self.roadId
+    def set_roadId(self, roadId):
+        self.roadId = roadId
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_t(self):
+        return self.t
+    def set_t(self, t):
+        self.t = t
+    def get_zOffset(self):
+        return self.zOffset
+    def set_zOffset(self, zOffset):
+        self.zOffset = zOffset
+    def get_hOffset(self):
+        return self.hOffset
+    def set_hOffset(self, hOffset):
+        self.hOffset = hOffset
+    def get_pitch(self):
+        return self.pitch
+    def set_pitch(self, pitch):
+        self.pitch = pitch
+    def get_roll(self):
+        return self.roll
+    def set_roll(self, roll):
+        self.roll = roll
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_signals_signal_positionRoad', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_signals_signal_positionRoad')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_signals_signal_positionRoad')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_signals_signal_positionRoad', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_signals_signal_positionRoad'):
+        if 'roadId' not in already_processed:
+            already_processed.add('roadId')
+            outfile.write(' roadId=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.roadId), input_name='roadId')), ))
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 't' not in already_processed:
+            already_processed.add('t')
+            outfile.write(' t="%s"' % self.gds_format_double(self.t, input_name='t'))
+        if 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            outfile.write(' zOffset="%s"' % self.gds_format_double(self.zOffset, input_name='zOffset'))
+        if 'hOffset' not in already_processed:
+            already_processed.add('hOffset')
+            outfile.write(' hOffset="%s"' % self.gds_format_double(self.hOffset, input_name='hOffset'))
+        if self.pitch is not None and 'pitch' not in already_processed:
+            already_processed.add('pitch')
+            outfile.write(' pitch="%s"' % self.gds_format_double(self.pitch, input_name='pitch'))
+        if self.roll is not None and 'roll' not in already_processed:
+            already_processed.add('roll')
+            outfile.write(' roll="%s"' % self.gds_format_double(self.roll, input_name='roll'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_signals_signal_positionRoad', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('roadId', node)
+        if value is not None and 'roadId' not in already_processed:
+            already_processed.add('roadId')
+            self.roadId = value
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('t', node)
+        if value is not None and 't' not in already_processed:
+            already_processed.add('t')
+            try:
+                self.t = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (t): %s' % exp)
+        value = find_attr_value_('zOffset', node)
+        if value is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            try:
+                self.zOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (zOffset): %s' % exp)
+        value = find_attr_value_('hOffset', node)
+        if value is not None and 'hOffset' not in already_processed:
+            already_processed.add('hOffset')
+            try:
+                self.hOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (hOffset): %s' % exp)
+        value = find_attr_value_('pitch', node)
+        if value is not None and 'pitch' not in already_processed:
+            already_processed.add('pitch')
+            try:
+                self.pitch = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (pitch): %s' % exp)
+        value = find_attr_value_('roll', node)
+        if value is not None and 'roll' not in already_processed:
+            already_processed.add('roll')
+            try:
+                self.roll = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (roll): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_signals_signal_positionRoad
+
+
+class t_road_signals_signal_positionInertial(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, x=None, y=None, z=None, hdg=None, pitch=None, roll=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.x = _cast(float, x)
+        self.x_nsprefix_ = None
+        self.y = _cast(float, y)
+        self.y_nsprefix_ = None
+        self.z = _cast(float, z)
+        self.z_nsprefix_ = None
+        self.hdg = _cast(float, hdg)
+        self.hdg_nsprefix_ = None
+        self.pitch = _cast(float, pitch)
+        self.pitch_nsprefix_ = None
+        self.roll = _cast(float, roll)
+        self.roll_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_signals_signal_positionInertial)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_signals_signal_positionInertial.subclass:
+            return t_road_signals_signal_positionInertial.subclass(*args_, **kwargs_)
+        else:
+            return t_road_signals_signal_positionInertial(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_x(self):
+        return self.x
+    def set_x(self, x):
+        self.x = x
+    def get_y(self):
+        return self.y
+    def set_y(self, y):
+        self.y = y
+    def get_z(self):
+        return self.z
+    def set_z(self, z):
+        self.z = z
+    def get_hdg(self):
+        return self.hdg
+    def set_hdg(self, hdg):
+        self.hdg = hdg
+    def get_pitch(self):
+        return self.pitch
+    def set_pitch(self, pitch):
+        self.pitch = pitch
+    def get_roll(self):
+        return self.roll
+    def set_roll(self, roll):
+        self.roll = roll
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_signals_signal_positionInertial', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_signals_signal_positionInertial')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_signals_signal_positionInertial')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_signals_signal_positionInertial', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_signals_signal_positionInertial'):
+        if 'x' not in already_processed:
+            already_processed.add('x')
+            outfile.write(' x="%s"' % self.gds_format_double(self.x, input_name='x'))
+        if 'y' not in already_processed:
+            already_processed.add('y')
+            outfile.write(' y="%s"' % self.gds_format_double(self.y, input_name='y'))
+        if 'z' not in already_processed:
+            already_processed.add('z')
+            outfile.write(' z="%s"' % self.gds_format_double(self.z, input_name='z'))
+        if 'hdg' not in already_processed:
+            already_processed.add('hdg')
+            outfile.write(' hdg="%s"' % self.gds_format_double(self.hdg, input_name='hdg'))
+        if self.pitch is not None and 'pitch' not in already_processed:
+            already_processed.add('pitch')
+            outfile.write(' pitch="%s"' % self.gds_format_double(self.pitch, input_name='pitch'))
+        if self.roll is not None and 'roll' not in already_processed:
+            already_processed.add('roll')
+            outfile.write(' roll="%s"' % self.gds_format_double(self.roll, input_name='roll'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_signals_signal_positionInertial', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('x', node)
+        if value is not None and 'x' not in already_processed:
+            already_processed.add('x')
+            try:
+                self.x = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (x): %s' % exp)
+        value = find_attr_value_('y', node)
+        if value is not None and 'y' not in already_processed:
+            already_processed.add('y')
+            try:
+                self.y = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (y): %s' % exp)
+        value = find_attr_value_('z', node)
+        if value is not None and 'z' not in already_processed:
+            already_processed.add('z')
+            try:
+                self.z = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (z): %s' % exp)
+        value = find_attr_value_('hdg', node)
+        if value is not None and 'hdg' not in already_processed:
+            already_processed.add('hdg')
+            try:
+                self.hdg = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (hdg): %s' % exp)
+        value = find_attr_value_('pitch', node)
+        if value is not None and 'pitch' not in already_processed:
+            already_processed.add('pitch')
+            try:
+                self.pitch = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (pitch): %s' % exp)
+        value = find_attr_value_('roll', node)
+        if value is not None and 'roll' not in already_processed:
+            already_processed.add('roll')
+            try:
+                self.roll = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (roll): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_signals_signal_positionInertial
+
+
+class t_road_signals_signalReference(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, s=None, t=None, id=None, orientation=None, validity=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.t = _cast(float, t)
+        self.t_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.orientation = _cast(None, orientation)
+        self.orientation_nsprefix_ = None
+        if validity is None:
+            self.validity = []
+        else:
+            self.validity = validity
+        self.validity_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_signals_signalReference)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_signals_signalReference.subclass:
+            return t_road_signals_signalReference.subclass(*args_, **kwargs_)
+        else:
+            return t_road_signals_signalReference(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_validity(self):
+        return self.validity
+    def set_validity(self, validity):
+        self.validity = validity
+    def add_validity(self, value):
+        self.validity.append(value)
+    def insert_validity_at(self, index, value):
+        self.validity.insert(index, value)
+    def replace_validity_at(self, index, value):
+        self.validity[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_t(self):
+        return self.t
+    def set_t(self, t):
+        self.t = t
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_orientation(self):
+        return self.orientation
+    def set_orientation(self, orientation):
+        self.orientation = orientation
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_orientation(self, value):
+        # Validate type e_orientation, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['+', '-', 'none']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_orientation' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.validity or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_signals_signalReference', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_signals_signalReference')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_signals_signalReference')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_signals_signalReference', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_signals_signalReference'):
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 't' not in already_processed:
+            already_processed.add('t')
+            outfile.write(' t="%s"' % self.gds_format_double(self.t, input_name='t'))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            outfile.write(' orientation=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.orientation), input_name='orientation')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_signals_signalReference', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for validity_ in self.validity:
+            namespaceprefix_ = self.validity_nsprefix_ + ':' if (UseCapturedNS_ and self.validity_nsprefix_) else ''
+            validity_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='validity', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('t', node)
+        if value is not None and 't' not in already_processed:
+            already_processed.add('t')
+            try:
+                self.t = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (t): %s' % exp)
+        value = find_attr_value_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+        value = find_attr_value_('orientation', node)
+        if value is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            self.orientation = value
+            self.validate_e_orientation(self.orientation)    # validate type e_orientation
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'validity':
+            obj_ = t_road_objects_object_laneValidity.factory(parent_object_=self)
+            obj_.build(child_)
+            self.validity.append(obj_)
+            obj_.original_tagname_ = 'validity'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_signals_signalReference
+
+
+class t_road_surface(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, CRG=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if CRG is None:
+            self.CRG = []
+        else:
+            self.CRG = CRG
+        self.CRG_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_surface)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_surface.subclass:
+            return t_road_surface.subclass(*args_, **kwargs_)
+        else:
+            return t_road_surface(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_CRG(self):
+        return self.CRG
+    def set_CRG(self, CRG):
+        self.CRG = CRG
+    def add_CRG(self, value):
+        self.CRG.append(value)
+    def insert_CRG_at(self, index, value):
+        self.CRG.insert(index, value)
+    def replace_CRG_at(self, index, value):
+        self.CRG[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.CRG or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_surface', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_surface')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_surface')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_surface', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_surface'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_surface', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for CRG_ in self.CRG:
+            namespaceprefix_ = self.CRG_nsprefix_ + ':' if (UseCapturedNS_ and self.CRG_nsprefix_) else ''
+            CRG_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='CRG', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'CRG':
+            obj_ = t_road_surface_CRG.factory(parent_object_=self)
+            obj_.build(child_)
+            self.CRG.append(obj_)
+            obj_.original_tagname_ = 'CRG'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_surface
+
+
+class t_road_surface_CRG(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, file=None, sStart=None, sEnd=None, orientation=None, mode=None, purpose=None, sOffset=None, tOffset=None, zOffset=None, zScale=None, hOffset=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.file = _cast(None, file)
+        self.file_nsprefix_ = None
+        self.sStart = _cast(float, sStart)
+        self.sStart_nsprefix_ = None
+        self.sEnd = _cast(float, sEnd)
+        self.sEnd_nsprefix_ = None
+        self.orientation = _cast(None, orientation)
+        self.orientation_nsprefix_ = None
+        self.mode = _cast(None, mode)
+        self.mode_nsprefix_ = None
+        self.purpose = _cast(None, purpose)
+        self.purpose_nsprefix_ = None
+        self.sOffset = _cast(float, sOffset)
+        self.sOffset_nsprefix_ = None
+        self.tOffset = _cast(float, tOffset)
+        self.tOffset_nsprefix_ = None
+        self.zOffset = _cast(float, zOffset)
+        self.zOffset_nsprefix_ = None
+        self.zScale = _cast(float, zScale)
+        self.zScale_nsprefix_ = None
+        self.hOffset = _cast(float, hOffset)
+        self.hOffset_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_surface_CRG)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_surface_CRG.subclass:
+            return t_road_surface_CRG.subclass(*args_, **kwargs_)
+        else:
+            return t_road_surface_CRG(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_file(self):
+        return self.file
+    def set_file(self, file):
+        self.file = file
+    def get_sStart(self):
+        return self.sStart
+    def set_sStart(self, sStart):
+        self.sStart = sStart
+    def get_sEnd(self):
+        return self.sEnd
+    def set_sEnd(self, sEnd):
+        self.sEnd = sEnd
+    def get_orientation(self):
+        return self.orientation
+    def set_orientation(self, orientation):
+        self.orientation = orientation
+    def get_mode(self):
+        return self.mode
+    def set_mode(self, mode):
+        self.mode = mode
+    def get_purpose(self):
+        return self.purpose
+    def set_purpose(self, purpose):
+        self.purpose = purpose
+    def get_sOffset(self):
+        return self.sOffset
+    def set_sOffset(self, sOffset):
+        self.sOffset = sOffset
+    def get_tOffset(self):
+        return self.tOffset
+    def set_tOffset(self, tOffset):
+        self.tOffset = tOffset
+    def get_zOffset(self):
+        return self.zOffset
+    def set_zOffset(self, zOffset):
+        self.zOffset = zOffset
+    def get_zScale(self):
+        return self.zScale
+    def set_zScale(self, zScale):
+        self.zScale = zScale
+    def get_hOffset(self):
+        return self.hOffset
+    def set_hOffset(self, hOffset):
+        self.hOffset = hOffset
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_direction(self, value):
+        # Validate type e_direction, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['same', 'opposite']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_direction' % {"value" : value.encode("utf-8")} )
+    def validate_e_road_surface_CRG_mode(self, value):
+        # Validate type e_road_surface_CRG_mode, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['attached', 'attached0', 'genuine', 'global']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_road_surface_CRG_mode' % {"value" : value.encode("utf-8")} )
+    def validate_e_road_surface_CRG_purpose(self, value):
+        # Validate type e_road_surface_CRG_purpose, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['elevation', 'friction']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_road_surface_CRG_purpose' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_surface_CRG', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_surface_CRG')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_surface_CRG')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_surface_CRG', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_surface_CRG'):
+        if 'file' not in already_processed:
+            already_processed.add('file')
+            outfile.write(' file=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.file), input_name='file')), ))
+        if 'sStart' not in already_processed:
+            already_processed.add('sStart')
+            outfile.write(' sStart="%s"' % self.gds_format_double(self.sStart, input_name='sStart'))
+        if 'sEnd' not in already_processed:
+            already_processed.add('sEnd')
+            outfile.write(' sEnd="%s"' % self.gds_format_double(self.sEnd, input_name='sEnd'))
+        if 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            outfile.write(' orientation=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.orientation), input_name='orientation')), ))
+        if 'mode' not in already_processed:
+            already_processed.add('mode')
+            outfile.write(' mode=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.mode), input_name='mode')), ))
+        if self.purpose is not None and 'purpose' not in already_processed:
+            already_processed.add('purpose')
+            outfile.write(' purpose=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.purpose), input_name='purpose')), ))
+        if self.sOffset is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            outfile.write(' sOffset="%s"' % self.gds_format_double(self.sOffset, input_name='sOffset'))
+        if self.tOffset is not None and 'tOffset' not in already_processed:
+            already_processed.add('tOffset')
+            outfile.write(' tOffset="%s"' % self.gds_format_double(self.tOffset, input_name='tOffset'))
+        if self.zOffset is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            outfile.write(' zOffset="%s"' % self.gds_format_double(self.zOffset, input_name='zOffset'))
+        if self.zScale is not None and 'zScale' not in already_processed:
+            already_processed.add('zScale')
+            outfile.write(' zScale="%s"' % self.gds_format_double(self.zScale, input_name='zScale'))
+        if self.hOffset is not None and 'hOffset' not in already_processed:
+            already_processed.add('hOffset')
+            outfile.write(' hOffset="%s"' % self.gds_format_double(self.hOffset, input_name='hOffset'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_surface_CRG', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('file', node)
+        if value is not None and 'file' not in already_processed:
+            already_processed.add('file')
+            self.file = value
+        value = find_attr_value_('sStart', node)
+        if value is not None and 'sStart' not in already_processed:
+            already_processed.add('sStart')
+            try:
+                self.sStart = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sStart): %s' % exp)
+            self.validate_t_grEqZero(self.sStart)    # validate type t_grEqZero
+        value = find_attr_value_('sEnd', node)
+        if value is not None and 'sEnd' not in already_processed:
+            already_processed.add('sEnd')
+            try:
+                self.sEnd = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sEnd): %s' % exp)
+            self.validate_t_grEqZero(self.sEnd)    # validate type t_grEqZero
+        value = find_attr_value_('orientation', node)
+        if value is not None and 'orientation' not in already_processed:
+            already_processed.add('orientation')
+            self.orientation = value
+            self.validate_e_direction(self.orientation)    # validate type e_direction
+        value = find_attr_value_('mode', node)
+        if value is not None and 'mode' not in already_processed:
+            already_processed.add('mode')
+            self.mode = value
+            self.validate_e_road_surface_CRG_mode(self.mode)    # validate type e_road_surface_CRG_mode
+        value = find_attr_value_('purpose', node)
+        if value is not None and 'purpose' not in already_processed:
+            already_processed.add('purpose')
+            self.purpose = value
+            self.validate_e_road_surface_CRG_purpose(self.purpose)    # validate type e_road_surface_CRG_purpose
+        value = find_attr_value_('sOffset', node)
+        if value is not None and 'sOffset' not in already_processed:
+            already_processed.add('sOffset')
+            try:
+                self.sOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sOffset): %s' % exp)
+        value = find_attr_value_('tOffset', node)
+        if value is not None and 'tOffset' not in already_processed:
+            already_processed.add('tOffset')
+            try:
+                self.tOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (tOffset): %s' % exp)
+        value = find_attr_value_('zOffset', node)
+        if value is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            try:
+                self.zOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (zOffset): %s' % exp)
+        value = find_attr_value_('zScale', node)
+        if value is not None and 'zScale' not in already_processed:
+            already_processed.add('zScale')
+            try:
+                self.zScale = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (zScale): %s' % exp)
+        value = find_attr_value_('hOffset', node)
+        if value is not None and 'hOffset' not in already_processed:
+            already_processed.add('hOffset')
+            try:
+                self.hOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (hOffset): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_surface_CRG
+
+
+class t_road_railroad(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, switch=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if switch is None:
+            self.switch = []
+        else:
+            self.switch = switch
+        self.switch_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_railroad)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_railroad.subclass:
+            return t_road_railroad.subclass(*args_, **kwargs_)
+        else:
+            return t_road_railroad(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_switch(self):
+        return self.switch
+    def set_switch(self, switch):
+        self.switch = switch
+    def add_switch(self, value):
+        self.switch.append(value)
+    def insert_switch_at(self, index, value):
+        self.switch.insert(index, value)
+    def replace_switch_at(self, index, value):
+        self.switch[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.switch or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_railroad', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_railroad')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_railroad')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_railroad', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_railroad'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_railroad', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for switch_ in self.switch:
+            namespaceprefix_ = self.switch_nsprefix_ + ':' if (UseCapturedNS_ and self.switch_nsprefix_) else ''
+            switch_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='switch', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'switch':
+            obj_ = t_road_railroad_switch.factory(parent_object_=self)
+            obj_.build(child_)
+            self.switch.append(obj_)
+            obj_.original_tagname_ = 'switch'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_railroad
+
+
+class t_road_railroad_switch(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, id=None, position=None, mainTrack=None, sideTrack=None, partner=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.position = _cast(None, position)
+        self.position_nsprefix_ = None
+        self.mainTrack = mainTrack
+        self.mainTrack_nsprefix_ = None
+        self.sideTrack = sideTrack
+        self.sideTrack_nsprefix_ = None
+        self.partner = partner
+        self.partner_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_railroad_switch)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_railroad_switch.subclass:
+            return t_road_railroad_switch.subclass(*args_, **kwargs_)
+        else:
+            return t_road_railroad_switch(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_mainTrack(self):
+        return self.mainTrack
+    def set_mainTrack(self, mainTrack):
+        self.mainTrack = mainTrack
+    def get_sideTrack(self):
+        return self.sideTrack
+    def set_sideTrack(self, sideTrack):
+        self.sideTrack = sideTrack
+    def get_partner(self):
+        return self.partner
+    def set_partner(self, partner):
+        self.partner = partner
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_position(self):
+        return self.position
+    def set_position(self, position):
+        self.position = position
+    def validate_e_road_railroad_switch_position(self, value):
+        # Validate type e_road_railroad_switch_position, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['dynamic', 'straight', 'turn']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_road_railroad_switch_position' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.mainTrack is not None or
+            self.sideTrack is not None or
+            self.partner is not None or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_railroad_switch', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_railroad_switch')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_railroad_switch')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_railroad_switch', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_railroad_switch'):
+        if 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if 'position' not in already_processed:
+            already_processed.add('position')
+            outfile.write(' position=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.position), input_name='position')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_railroad_switch', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.mainTrack is not None:
+            namespaceprefix_ = self.mainTrack_nsprefix_ + ':' if (UseCapturedNS_ and self.mainTrack_nsprefix_) else ''
+            self.mainTrack.export(outfile, level, namespaceprefix_, namespacedef_='', name_='mainTrack', pretty_print=pretty_print)
+        if self.sideTrack is not None:
+            namespaceprefix_ = self.sideTrack_nsprefix_ + ':' if (UseCapturedNS_ and self.sideTrack_nsprefix_) else ''
+            self.sideTrack.export(outfile, level, namespaceprefix_, namespacedef_='', name_='sideTrack', pretty_print=pretty_print)
+        if self.partner is not None:
+            namespaceprefix_ = self.partner_nsprefix_ + ':' if (UseCapturedNS_ and self.partner_nsprefix_) else ''
+            self.partner.export(outfile, level, namespaceprefix_, namespacedef_='', name_='partner', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('name', node)
+        if value is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            self.name = 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
+        value = find_attr_value_('position', node)
+        if value is not None and 'position' not in already_processed:
+            already_processed.add('position')
+            self.position = value
+            self.validate_e_road_railroad_switch_position(self.position)    # validate type e_road_railroad_switch_position
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'mainTrack':
+            obj_ = t_road_railroad_switch_mainTrack.factory(parent_object_=self)
+            obj_.build(child_)
+            self.mainTrack = obj_
+            obj_.original_tagname_ = 'mainTrack'
+        elif nodeName_ == 'sideTrack':
+            obj_ = t_road_railroad_switch_sideTrack.factory(parent_object_=self)
+            obj_.build(child_)
+            self.sideTrack = obj_
+            obj_.original_tagname_ = 'sideTrack'
+        elif nodeName_ == 'partner':
+            obj_ = t_road_railroad_switch_partner.factory(parent_object_=self)
+            obj_.build(child_)
+            self.partner = obj_
+            obj_.original_tagname_ = 'partner'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_railroad_switch
+
+
+class t_road_railroad_switch_mainTrack(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, s=None, dir=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.dir = _cast(None, dir)
+        self.dir_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_railroad_switch_mainTrack)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_railroad_switch_mainTrack.subclass:
+            return t_road_railroad_switch_mainTrack.subclass(*args_, **kwargs_)
+        else:
+            return t_road_railroad_switch_mainTrack(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_dir(self):
+        return self.dir
+    def set_dir(self, dir):
+        self.dir = dir
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_elementDir(self, value):
+        # Validate type e_elementDir, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['+', '-']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_elementDir' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_railroad_switch_mainTrack', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_railroad_switch_mainTrack')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_railroad_switch_mainTrack')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_railroad_switch_mainTrack', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_railroad_switch_mainTrack'):
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 'dir' not in already_processed:
+            already_processed.add('dir')
+            outfile.write(' dir=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.dir), input_name='dir')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_railroad_switch_mainTrack', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('dir', node)
+        if value is not None and 'dir' not in already_processed:
+            already_processed.add('dir')
+            self.dir = value
+            self.validate_e_elementDir(self.dir)    # validate type e_elementDir
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_railroad_switch_mainTrack
+
+
+class t_road_railroad_switch_sideTrack(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, s=None, dir=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.s = _cast(float, s)
+        self.s_nsprefix_ = None
+        self.dir = _cast(None, dir)
+        self.dir_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_railroad_switch_sideTrack)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_railroad_switch_sideTrack.subclass:
+            return t_road_railroad_switch_sideTrack.subclass(*args_, **kwargs_)
+        else:
+            return t_road_railroad_switch_sideTrack(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_s(self):
+        return self.s
+    def set_s(self, s):
+        self.s = s
+    def get_dir(self):
+        return self.dir
+    def set_dir(self, dir):
+        self.dir = dir
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_elementDir(self, value):
+        # Validate type e_elementDir, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['+', '-']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_elementDir' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_railroad_switch_sideTrack', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_railroad_switch_sideTrack')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_railroad_switch_sideTrack')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_railroad_switch_sideTrack', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_railroad_switch_sideTrack'):
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if 's' not in already_processed:
+            already_processed.add('s')
+            outfile.write(' s="%s"' % self.gds_format_double(self.s, input_name='s'))
+        if 'dir' not in already_processed:
+            already_processed.add('dir')
+            outfile.write(' dir=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.dir), input_name='dir')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_railroad_switch_sideTrack', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+        value = find_attr_value_('s', node)
+        if value is not None and 's' not in already_processed:
+            already_processed.add('s')
+            try:
+                self.s = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (s): %s' % exp)
+            self.validate_t_grEqZero(self.s)    # validate type t_grEqZero
+        value = find_attr_value_('dir', node)
+        if value is not None and 'dir' not in already_processed:
+            already_processed.add('dir')
+            self.dir = value
+            self.validate_e_elementDir(self.dir)    # validate type e_elementDir
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_railroad_switch_sideTrack
+
+
+class t_road_railroad_switch_partner(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, id=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_road_railroad_switch_partner)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_road_railroad_switch_partner.subclass:
+            return t_road_railroad_switch_partner.subclass(*args_, **kwargs_)
+        else:
+            return t_road_railroad_switch_partner(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_railroad_switch_partner', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_road_railroad_switch_partner')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_road_railroad_switch_partner')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_road_railroad_switch_partner', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_road_railroad_switch_partner'):
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_road_railroad_switch_partner', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('name', node)
+        if value is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            self.name = 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):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_road_railroad_switch_partner
+
+
+class t_controller(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, name=None, sequence=None, control=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.sequence = _cast(int, sequence)
+        self.sequence_nsprefix_ = None
+        if control is None:
+            self.control = []
+        else:
+            self.control = control
+        self.control_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_controller)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_controller.subclass:
+            return t_controller.subclass(*args_, **kwargs_)
+        else:
+            return t_controller(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_control(self):
+        return self.control
+    def set_control(self, control):
+        self.control = control
+    def add_control(self, value):
+        self.control.append(value)
+    def insert_control_at(self, index, value):
+        self.control.insert(index, value)
+    def replace_control_at(self, index, value):
+        self.control[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_sequence(self):
+        return self.sequence
+    def set_sequence(self, sequence):
+        self.sequence = sequence
+    def hasContent_(self):
+        if (
+            self.control or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_controller', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_controller')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_controller')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_controller', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_controller'):
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if self.sequence is not None and 'sequence' not in already_processed:
+            already_processed.add('sequence')
+            outfile.write(' sequence="%s"' % self.gds_format_integer(self.sequence, input_name='sequence'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_controller', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for control_ in self.control:
+            namespaceprefix_ = self.control_nsprefix_ + ':' if (UseCapturedNS_ and self.control_nsprefix_) else ''
+            control_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='control', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+        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_('sequence', node)
+        if value is not None and 'sequence' not in already_processed:
+            already_processed.add('sequence')
+            try:
+                self.sequence = int(value)
+            except ValueError as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.sequence < 0:
+                raise_parse_error(node, 'Invalid NonNegativeInteger')
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'control':
+            obj_ = t_controller_control.factory(parent_object_=self)
+            obj_.build(child_)
+            self.control.append(obj_)
+            obj_.original_tagname_ = 'control'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_controller
+
+
+class t_controller_control(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, signalId=None, type_=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.signalId = _cast(None, signalId)
+        self.signalId_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_controller_control)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_controller_control.subclass:
+            return t_controller_control.subclass(*args_, **kwargs_)
+        else:
+            return t_controller_control(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_signalId(self):
+        return self.signalId
+    def set_signalId(self, signalId):
+        self.signalId = signalId
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_controller_control', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_controller_control')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_controller_control')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_controller_control', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_controller_control'):
+        if 'signalId' not in already_processed:
+            already_processed.add('signalId')
+            outfile.write(' signalId=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.signalId), input_name='signalId')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_controller_control', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('signalId', node)
+        if value is not None and 'signalId' not in already_processed:
+            already_processed.add('signalId')
+            self.signalId = 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
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_controller_control
+
+
+class t_junction(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, id=None, type_=None, connection=None, priority=None, controller=None, surface=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        if connection is None:
+            self.connection = []
+        else:
+            self.connection = connection
+        self.connection_nsprefix_ = None
+        if priority is None:
+            self.priority = []
+        else:
+            self.priority = priority
+        self.priority_nsprefix_ = None
+        if controller is None:
+            self.controller = []
+        else:
+            self.controller = controller
+        self.controller_nsprefix_ = None
+        self.surface = surface
+        self.surface_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_junction)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_junction.subclass:
+            return t_junction.subclass(*args_, **kwargs_)
+        else:
+            return t_junction(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_connection(self):
+        return self.connection
+    def set_connection(self, connection):
+        self.connection = connection
+    def add_connection(self, value):
+        self.connection.append(value)
+    def insert_connection_at(self, index, value):
+        self.connection.insert(index, value)
+    def replace_connection_at(self, index, value):
+        self.connection[index] = value
+    def get_priority(self):
+        return self.priority
+    def set_priority(self, priority):
+        self.priority = priority
+    def add_priority(self, value):
+        self.priority.append(value)
+    def insert_priority_at(self, index, value):
+        self.priority.insert(index, value)
+    def replace_priority_at(self, index, value):
+        self.priority[index] = value
+    def get_controller(self):
+        return self.controller
+    def set_controller(self, controller):
+        self.controller = controller
+    def add_controller(self, value):
+        self.controller.append(value)
+    def insert_controller_at(self, index, value):
+        self.controller.insert(index, value)
+    def replace_controller_at(self, index, value):
+        self.controller[index] = value
+    def get_surface(self):
+        return self.surface
+    def set_surface(self, surface):
+        self.surface = surface
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def validate_t_junction_id(self, value):
+        # Validate type t_junction_id, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            if not self.gds_validate_simple_patterns(
+                    self.validate_t_junction_id_patterns_, value):
+                warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_t_junction_id_patterns_, ))
+    validate_t_junction_id_patterns_ = [['^(.*)$']]
+    def validate_e_junction_type(self, value):
+        # Validate type e_junction_type, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['default', 'virtual']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_junction_type' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.connection or
+            self.priority or
+            self.controller or
+            self.surface is not None or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_junction')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_junction')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_junction', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_junction'):
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for connection_ in self.connection:
+            namespaceprefix_ = self.connection_nsprefix_ + ':' if (UseCapturedNS_ and self.connection_nsprefix_) else ''
+            connection_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='connection', pretty_print=pretty_print)
+        for priority_ in self.priority:
+            namespaceprefix_ = self.priority_nsprefix_ + ':' if (UseCapturedNS_ and self.priority_nsprefix_) else ''
+            priority_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='priority', pretty_print=pretty_print)
+        for controller_ in self.controller:
+            namespaceprefix_ = self.controller_nsprefix_ + ':' if (UseCapturedNS_ and self.controller_nsprefix_) else ''
+            controller_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='controller', pretty_print=pretty_print)
+        if self.surface is not None:
+            namespaceprefix_ = self.surface_nsprefix_ + ':' if (UseCapturedNS_ and self.surface_nsprefix_) else ''
+            self.surface.export(outfile, level, namespaceprefix_, namespacedef_='', name_='surface', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('name', node)
+        if value is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            self.name = 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
+            self.validate_t_junction_id(self.id)    # validate type t_junction_id
+        value = find_attr_value_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            self.type_ = value
+            self.validate_e_junction_type(self.type_)    # validate type e_junction_type
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'connection':
+            obj_ = t_junction_connection.factory(parent_object_=self)
+            obj_.build(child_)
+            self.connection.append(obj_)
+            obj_.original_tagname_ = 'connection'
+        elif nodeName_ == 'priority':
+            obj_ = t_junction_priority.factory(parent_object_=self)
+            obj_.build(child_)
+            self.priority.append(obj_)
+            obj_.original_tagname_ = 'priority'
+        elif nodeName_ == 'controller':
+            obj_ = t_junction_controller.factory(parent_object_=self)
+            obj_.build(child_)
+            self.controller.append(obj_)
+            obj_.original_tagname_ = 'controller'
+        elif nodeName_ == 'surface':
+            obj_ = t_junction_surface.factory(parent_object_=self)
+            obj_.build(child_)
+            self.surface = obj_
+            obj_.original_tagname_ = 'surface'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_junction
+
+
+class t_junction_connection(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, incomingRoad=None, connectingRoad=None, contactPoint=None, connectionMaster=None, type_=None, predecessor=None, successor=None, laneLink=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.incomingRoad = _cast(None, incomingRoad)
+        self.incomingRoad_nsprefix_ = None
+        self.connectingRoad = _cast(None, connectingRoad)
+        self.connectingRoad_nsprefix_ = None
+        self.contactPoint = _cast(None, contactPoint)
+        self.contactPoint_nsprefix_ = None
+        self.connectionMaster = _cast(None, connectionMaster)
+        self.connectionMaster_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.predecessor = predecessor
+        self.predecessor_nsprefix_ = None
+        self.successor = successor
+        self.successor_nsprefix_ = None
+        if laneLink is None:
+            self.laneLink = []
+        else:
+            self.laneLink = laneLink
+        self.laneLink_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_junction_connection)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_junction_connection.subclass:
+            return t_junction_connection.subclass(*args_, **kwargs_)
+        else:
+            return t_junction_connection(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_predecessor(self):
+        return self.predecessor
+    def set_predecessor(self, predecessor):
+        self.predecessor = predecessor
+    def get_successor(self):
+        return self.successor
+    def set_successor(self, successor):
+        self.successor = successor
+    def get_laneLink(self):
+        return self.laneLink
+    def set_laneLink(self, laneLink):
+        self.laneLink = laneLink
+    def add_laneLink(self, value):
+        self.laneLink.append(value)
+    def insert_laneLink_at(self, index, value):
+        self.laneLink.insert(index, value)
+    def replace_laneLink_at(self, index, value):
+        self.laneLink[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_incomingRoad(self):
+        return self.incomingRoad
+    def set_incomingRoad(self, incomingRoad):
+        self.incomingRoad = incomingRoad
+    def get_connectingRoad(self):
+        return self.connectingRoad
+    def set_connectingRoad(self, connectingRoad):
+        self.connectingRoad = connectingRoad
+    def get_contactPoint(self):
+        return self.contactPoint
+    def set_contactPoint(self, contactPoint):
+        self.contactPoint = contactPoint
+    def get_connectionMaster(self):
+        return self.connectionMaster
+    def set_connectionMaster(self, connectionMaster):
+        self.connectionMaster = connectionMaster
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def validate_e_contactPoint(self, value):
+        # Validate type e_contactPoint, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['start', 'end']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_contactPoint' % {"value" : value.encode("utf-8")} )
+    def validate_e_junction_type(self, value):
+        # Validate type e_junction_type, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['default', 'virtual']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_junction_type' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.predecessor is not None or
+            self.successor is not None or
+            self.laneLink or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction_connection', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_junction_connection')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_junction_connection')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_junction_connection', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_junction_connection'):
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if 'incomingRoad' not in already_processed:
+            already_processed.add('incomingRoad')
+            outfile.write(' incomingRoad=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.incomingRoad), input_name='incomingRoad')), ))
+        if 'connectingRoad' not in already_processed:
+            already_processed.add('connectingRoad')
+            outfile.write(' connectingRoad=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.connectingRoad), input_name='connectingRoad')), ))
+        if 'contactPoint' not in already_processed:
+            already_processed.add('contactPoint')
+            outfile.write(' contactPoint=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.contactPoint), input_name='contactPoint')), ))
+        if self.connectionMaster is not None and 'connectionMaster' not in already_processed:
+            already_processed.add('connectionMaster')
+            outfile.write(' connectionMaster=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.connectionMaster), input_name='connectionMaster')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction_connection', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.predecessor is not None:
+            namespaceprefix_ = self.predecessor_nsprefix_ + ':' if (UseCapturedNS_ and self.predecessor_nsprefix_) else ''
+            self.predecessor.export(outfile, level, namespaceprefix_, namespacedef_='', name_='predecessor', pretty_print=pretty_print)
+        if self.successor is not None:
+            namespaceprefix_ = self.successor_nsprefix_ + ':' if (UseCapturedNS_ and self.successor_nsprefix_) else ''
+            self.successor.export(outfile, level, namespaceprefix_, namespacedef_='', name_='successor', pretty_print=pretty_print)
+        for laneLink_ in self.laneLink:
+            namespaceprefix_ = self.laneLink_nsprefix_ + ':' if (UseCapturedNS_ and self.laneLink_nsprefix_) else ''
+            laneLink_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='laneLink', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = value
+        value = find_attr_value_('incomingRoad', node)
+        if value is not None and 'incomingRoad' not in already_processed:
+            already_processed.add('incomingRoad')
+            self.incomingRoad = value
+        value = find_attr_value_('connectingRoad', node)
+        if value is not None and 'connectingRoad' not in already_processed:
+            already_processed.add('connectingRoad')
+            self.connectingRoad = value
+        value = find_attr_value_('contactPoint', node)
+        if value is not None and 'contactPoint' not in already_processed:
+            already_processed.add('contactPoint')
+            self.contactPoint = value
+            self.validate_e_contactPoint(self.contactPoint)    # validate type e_contactPoint
+        value = find_attr_value_('connectionMaster', node)
+        if value is not None and 'connectionMaster' not in already_processed:
+            already_processed.add('connectionMaster')
+            self.connectionMaster = 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
+            self.validate_e_junction_type(self.type_)    # validate type e_junction_type
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'predecessor':
+            obj_ = t_junction_predecessorSuccessor.factory(parent_object_=self)
+            obj_.build(child_)
+            self.predecessor = obj_
+            obj_.original_tagname_ = 'predecessor'
+        elif nodeName_ == 'successor':
+            obj_ = t_junction_predecessorSuccessor.factory(parent_object_=self)
+            obj_.build(child_)
+            self.successor = obj_
+            obj_.original_tagname_ = 'successor'
+        elif nodeName_ == 'laneLink':
+            obj_ = t_junction_connection_laneLink.factory(parent_object_=self)
+            obj_.build(child_)
+            self.laneLink.append(obj_)
+            obj_.original_tagname_ = 'laneLink'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_junction_connection
+
+
+class t_junction_predecessorSuccessor(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, elementType='road', elementId=None, elementS=None, elementDir=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.elementType = _cast(None, elementType)
+        self.elementType_nsprefix_ = None
+        self.elementId = _cast(None, elementId)
+        self.elementId_nsprefix_ = None
+        self.elementS = _cast(float, elementS)
+        self.elementS_nsprefix_ = None
+        self.elementDir = _cast(None, elementDir)
+        self.elementDir_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_junction_predecessorSuccessor)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_junction_predecessorSuccessor.subclass:
+            return t_junction_predecessorSuccessor.subclass(*args_, **kwargs_)
+        else:
+            return t_junction_predecessorSuccessor(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_elementType(self):
+        return self.elementType
+    def set_elementType(self, elementType):
+        self.elementType = elementType
+    def get_elementId(self):
+        return self.elementId
+    def set_elementId(self, elementId):
+        self.elementId = elementId
+    def get_elementS(self):
+        return self.elementS
+    def set_elementS(self, elementS):
+        self.elementS = elementS
+    def get_elementDir(self):
+        return self.elementDir
+    def set_elementDir(self, elementDir):
+        self.elementDir = elementDir
+    def validate_t_grZero(self, value):
+        # Validate type t_grZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value <= 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on t_grZero' % {"value" : value} )
+    def validate_e_elementDir(self, value):
+        # Validate type e_elementDir, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['+', '-']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_elementDir' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction_predecessorSuccessor', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_junction_predecessorSuccessor')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_junction_predecessorSuccessor')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_junction_predecessorSuccessor', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_junction_predecessorSuccessor'):
+        if 'elementType' not in already_processed:
+            already_processed.add('elementType')
+            outfile.write(' elementType=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.elementType), input_name='elementType')), ))
+        if 'elementId' not in already_processed:
+            already_processed.add('elementId')
+            outfile.write(' elementId=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.elementId), input_name='elementId')), ))
+        if 'elementS' not in already_processed:
+            already_processed.add('elementS')
+            outfile.write(' elementS="%s"' % self.gds_format_double(self.elementS, input_name='elementS'))
+        if 'elementDir' not in already_processed:
+            already_processed.add('elementDir')
+            outfile.write(' elementDir=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.elementDir), input_name='elementDir')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction_predecessorSuccessor', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('elementType', node)
+        if value is not None and 'elementType' not in already_processed:
+            already_processed.add('elementType')
+            self.elementType = value
+        value = find_attr_value_('elementId', node)
+        if value is not None and 'elementId' not in already_processed:
+            already_processed.add('elementId')
+            self.elementId = value
+        value = find_attr_value_('elementS', node)
+        if value is not None and 'elementS' not in already_processed:
+            already_processed.add('elementS')
+            try:
+                self.elementS = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (elementS): %s' % exp)
+            self.validate_t_grZero(self.elementS)    # validate type t_grZero
+        value = find_attr_value_('elementDir', node)
+        if value is not None and 'elementDir' not in already_processed:
+            already_processed.add('elementDir')
+            self.elementDir = value
+            self.validate_e_elementDir(self.elementDir)    # validate type e_elementDir
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_junction_predecessorSuccessor
+
+
+class t_junction_connection_laneLink(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, from_=None, to=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.from_ = _cast(int, from_)
+        self.from__nsprefix_ = None
+        self.to = _cast(int, to)
+        self.to_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_junction_connection_laneLink)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_junction_connection_laneLink.subclass:
+            return t_junction_connection_laneLink.subclass(*args_, **kwargs_)
+        else:
+            return t_junction_connection_laneLink(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_from(self):
+        return self.from_
+    def set_from(self, from_):
+        self.from_ = from_
+    def get_to(self):
+        return self.to
+    def set_to(self, to):
+        self.to = to
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction_connection_laneLink', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_junction_connection_laneLink')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_junction_connection_laneLink')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_junction_connection_laneLink', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_junction_connection_laneLink'):
+        if 'from_' not in already_processed:
+            already_processed.add('from_')
+            outfile.write(' from="%s"' % self.gds_format_integer(self.from_, input_name='from'))
+        if 'to' not in already_processed:
+            already_processed.add('to')
+            outfile.write(' to="%s"' % self.gds_format_integer(self.to, input_name='to'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction_connection_laneLink', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('from', node)
+        if value is not None and 'from' not in already_processed:
+            already_processed.add('from')
+            try:
+                self.from_ = int(value)
+            except ValueError as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+        value = find_attr_value_('to', node)
+        if value is not None and 'to' not in already_processed:
+            already_processed.add('to')
+            try:
+                self.to = int(value)
+            except ValueError as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_junction_connection_laneLink
+
+
+class t_junction_priority(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, high=None, low=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.high = _cast(None, high)
+        self.high_nsprefix_ = None
+        self.low = _cast(None, low)
+        self.low_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_junction_priority)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_junction_priority.subclass:
+            return t_junction_priority.subclass(*args_, **kwargs_)
+        else:
+            return t_junction_priority(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_high(self):
+        return self.high
+    def set_high(self, high):
+        self.high = high
+    def get_low(self):
+        return self.low
+    def set_low(self, low):
+        self.low = low
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction_priority', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_junction_priority')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_junction_priority')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_junction_priority', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_junction_priority'):
+        if self.high is not None and 'high' not in already_processed:
+            already_processed.add('high')
+            outfile.write(' high=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.high), input_name='high')), ))
+        if self.low is not None and 'low' not in already_processed:
+            already_processed.add('low')
+            outfile.write(' low=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.low), input_name='low')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction_priority', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('high', node)
+        if value is not None and 'high' not in already_processed:
+            already_processed.add('high')
+            self.high = value
+        value = find_attr_value_('low', node)
+        if value is not None and 'low' not in already_processed:
+            already_processed.add('low')
+            self.low = value
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_junction_priority
+
+
+class t_junction_controller(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, id=None, type_=None, sequence=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        self.sequence = _cast(int, sequence)
+        self.sequence_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_junction_controller)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_junction_controller.subclass:
+            return t_junction_controller.subclass(*args_, **kwargs_)
+        else:
+            return t_junction_controller(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def get_sequence(self):
+        return self.sequence
+    def set_sequence(self, sequence):
+        self.sequence = sequence
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction_controller', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_junction_controller')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_junction_controller')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_junction_controller', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_junction_controller'):
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+        if self.sequence is not None and 'sequence' not in already_processed:
+            already_processed.add('sequence')
+            outfile.write(' sequence="%s"' % self.gds_format_integer(self.sequence, input_name='sequence'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction_controller', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('id', node)
+        if value is not None and 'id' not in already_processed:
+            already_processed.add('id')
+            self.id = 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_('sequence', node)
+        if value is not None and 'sequence' not in already_processed:
+            already_processed.add('sequence')
+            try:
+                self.sequence = int(value)
+            except ValueError as exp:
+                raise_parse_error(node, 'Bad integer attribute: %s' % exp)
+            if self.sequence < 0:
+                raise_parse_error(node, 'Invalid NonNegativeInteger')
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_junction_controller
+
+
+class t_junction_surface(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, CRG=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        if CRG is None:
+            self.CRG = []
+        else:
+            self.CRG = CRG
+        self.CRG_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_junction_surface)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_junction_surface.subclass:
+            return t_junction_surface.subclass(*args_, **kwargs_)
+        else:
+            return t_junction_surface(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_CRG(self):
+        return self.CRG
+    def set_CRG(self, CRG):
+        self.CRG = CRG
+    def add_CRG(self, value):
+        self.CRG.append(value)
+    def insert_CRG_at(self, index, value):
+        self.CRG.insert(index, value)
+    def replace_CRG_at(self, index, value):
+        self.CRG[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def hasContent_(self):
+        if (
+            self.CRG or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction_surface', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_junction_surface')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_junction_surface')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_junction_surface', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_junction_surface'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction_surface', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for CRG_ in self.CRG:
+            namespaceprefix_ = self.CRG_nsprefix_ + ':' if (UseCapturedNS_ and self.CRG_nsprefix_) else ''
+            CRG_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='CRG', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'CRG':
+            obj_ = t_junction_surface_CRG.factory(parent_object_=self)
+            obj_.build(child_)
+            self.CRG.append(obj_)
+            obj_.original_tagname_ = 'CRG'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_junction_surface
+
+
+class t_junction_surface_CRG(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, file=None, mode='global', purpose=None, zOffset=None, zScale=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.file = _cast(None, file)
+        self.file_nsprefix_ = None
+        self.mode = _cast(None, mode)
+        self.mode_nsprefix_ = None
+        self.purpose = _cast(None, purpose)
+        self.purpose_nsprefix_ = None
+        self.zOffset = _cast(float, zOffset)
+        self.zOffset_nsprefix_ = None
+        self.zScale = _cast(float, zScale)
+        self.zScale_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_junction_surface_CRG)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_junction_surface_CRG.subclass:
+            return t_junction_surface_CRG.subclass(*args_, **kwargs_)
+        else:
+            return t_junction_surface_CRG(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_file(self):
+        return self.file
+    def set_file(self, file):
+        self.file = file
+    def get_mode(self):
+        return self.mode
+    def set_mode(self, mode):
+        self.mode = mode
+    def get_purpose(self):
+        return self.purpose
+    def set_purpose(self, purpose):
+        self.purpose = purpose
+    def get_zOffset(self):
+        return self.zOffset
+    def set_zOffset(self, zOffset):
+        self.zOffset = zOffset
+    def get_zScale(self):
+        return self.zScale
+    def set_zScale(self, zScale):
+        self.zScale = zScale
+    def validate_e_road_surface_CRG_mode(self, value):
+        # Validate type e_road_surface_CRG_mode, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['attached', 'attached0', 'genuine', 'global']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_road_surface_CRG_mode' % {"value" : value.encode("utf-8")} )
+    def validate_e_road_surface_CRG_purpose(self, value):
+        # Validate type e_road_surface_CRG_purpose, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['elevation', 'friction']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_road_surface_CRG_purpose' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction_surface_CRG', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_junction_surface_CRG')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_junction_surface_CRG')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_junction_surface_CRG', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_junction_surface_CRG'):
+        if 'file' not in already_processed:
+            already_processed.add('file')
+            outfile.write(' file=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.file), input_name='file')), ))
+        if 'mode' not in already_processed:
+            already_processed.add('mode')
+            outfile.write(' mode=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.mode), input_name='mode')), ))
+        if self.purpose is not None and 'purpose' not in already_processed:
+            already_processed.add('purpose')
+            outfile.write(' purpose=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.purpose), input_name='purpose')), ))
+        if self.zOffset is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            outfile.write(' zOffset="%s"' % self.gds_format_double(self.zOffset, input_name='zOffset'))
+        if self.zScale is not None and 'zScale' not in already_processed:
+            already_processed.add('zScale')
+            outfile.write(' zScale="%s"' % self.gds_format_double(self.zScale, input_name='zScale'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junction_surface_CRG', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('file', node)
+        if value is not None and 'file' not in already_processed:
+            already_processed.add('file')
+            self.file = value
+        value = find_attr_value_('mode', node)
+        if value is not None and 'mode' not in already_processed:
+            already_processed.add('mode')
+            self.mode = value
+            self.validate_e_road_surface_CRG_mode(self.mode)    # validate type e_road_surface_CRG_mode
+        value = find_attr_value_('purpose', node)
+        if value is not None and 'purpose' not in already_processed:
+            already_processed.add('purpose')
+            self.purpose = value
+            self.validate_e_road_surface_CRG_purpose(self.purpose)    # validate type e_road_surface_CRG_purpose
+        value = find_attr_value_('zOffset', node)
+        if value is not None and 'zOffset' not in already_processed:
+            already_processed.add('zOffset')
+            try:
+                self.zOffset = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (zOffset): %s' % exp)
+        value = find_attr_value_('zScale', node)
+        if value is not None and 'zScale' not in already_processed:
+            already_processed.add('zScale')
+            try:
+                self.zScale = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (zScale): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_junction_surface_CRG
+
+
+class t_junctionGroup(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, id=None, type_=None, junctionReference=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        if junctionReference is None:
+            self.junctionReference = []
+        else:
+            self.junctionReference = junctionReference
+        self.junctionReference_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_junctionGroup)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_junctionGroup.subclass:
+            return t_junctionGroup.subclass(*args_, **kwargs_)
+        else:
+            return t_junctionGroup(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_junctionReference(self):
+        return self.junctionReference
+    def set_junctionReference(self, junctionReference):
+        self.junctionReference = junctionReference
+    def add_junctionReference(self, value):
+        self.junctionReference.append(value)
+    def insert_junctionReference_at(self, index, value):
+        self.junctionReference.insert(index, value)
+    def replace_junctionReference_at(self, index, value):
+        self.junctionReference[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def validate_e_junctionGroup_type(self, value):
+        # Validate type e_junctionGroup_type, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['roundabout', 'unknown']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_junctionGroup_type' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.junctionReference or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junctionGroup', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_junctionGroup')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_junctionGroup')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_junctionGroup', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_junctionGroup'):
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junctionGroup', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for junctionReference_ in self.junctionReference:
+            namespaceprefix_ = self.junctionReference_nsprefix_ + ':' if (UseCapturedNS_ and self.junctionReference_nsprefix_) else ''
+            junctionReference_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='junctionReference', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('name', node)
+        if value is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            self.name = 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
+        value = find_attr_value_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            self.type_ = value
+            self.validate_e_junctionGroup_type(self.type_)    # validate type e_junctionGroup_type
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'junctionReference':
+            obj_ = t_junctionGroup_junctionReference.factory(parent_object_=self)
+            obj_.build(child_)
+            self.junctionReference.append(obj_)
+            obj_.original_tagname_ = 'junctionReference'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_junctionGroup
+
+
+class t_junctionGroup_junctionReference(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, junction=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.junction = _cast(None, junction)
+        self.junction_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_junctionGroup_junctionReference)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_junctionGroup_junctionReference.subclass:
+            return t_junctionGroup_junctionReference.subclass(*args_, **kwargs_)
+        else:
+            return t_junctionGroup_junctionReference(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_junction(self):
+        return self.junction
+    def set_junction(self, junction):
+        self.junction = junction
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junctionGroup_junctionReference', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_junctionGroup_junctionReference')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_junctionGroup_junctionReference')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_junctionGroup_junctionReference', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_junctionGroup_junctionReference'):
+        if 'junction' not in already_processed:
+            already_processed.add('junction')
+            outfile.write(' junction=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.junction), input_name='junction')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_junctionGroup_junctionReference', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('junction', node)
+        if value is not None and 'junction' not in already_processed:
+            already_processed.add('junction')
+            self.junction = value
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_junctionGroup_junctionReference
+
+
+class t_station(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, id=None, type_=None, platform=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        self.type_ = _cast(None, type_)
+        self.type__nsprefix_ = None
+        if platform is None:
+            self.platform = []
+        else:
+            self.platform = platform
+        self.platform_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_station)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_station.subclass:
+            return t_station.subclass(*args_, **kwargs_)
+        else:
+            return t_station(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_platform(self):
+        return self.platform
+    def set_platform(self, platform):
+        self.platform = platform
+    def add_platform(self, value):
+        self.platform.append(value)
+    def insert_platform_at(self, index, value):
+        self.platform.insert(index, value)
+    def replace_platform_at(self, index, value):
+        self.platform[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def get_type(self):
+        return self.type_
+    def set_type(self, type_):
+        self.type_ = type_
+    def validate_e_station_type(self, value):
+        # Validate type e_station_type, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['small', 'medium', 'large']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_station_type' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.platform or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_station', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_station')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_station')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_station', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_station'):
+        if 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+        if self.type_ is not None and 'type_' not in already_processed:
+            already_processed.add('type_')
+            outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_station', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for platform_ in self.platform:
+            namespaceprefix_ = self.platform_nsprefix_ + ':' if (UseCapturedNS_ and self.platform_nsprefix_) else ''
+            platform_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='platform', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('name', node)
+        if value is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            self.name = 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
+        value = find_attr_value_('type', node)
+        if value is not None and 'type' not in already_processed:
+            already_processed.add('type')
+            self.type_ = value
+            self.validate_e_station_type(self.type_)    # validate type e_station_type
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'platform':
+            obj_ = t_station_platform.factory(parent_object_=self)
+            obj_.build(child_)
+            self.platform.append(obj_)
+            obj_.original_tagname_ = 'platform'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_station
+
+
+class t_station_platform(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, name=None, id=None, segment=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.name = _cast(None, name)
+        self.name_nsprefix_ = None
+        self.id = _cast(None, id)
+        self.id_nsprefix_ = None
+        if segment is None:
+            self.segment = []
+        else:
+            self.segment = segment
+        self.segment_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_station_platform)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_station_platform.subclass:
+            return t_station_platform.subclass(*args_, **kwargs_)
+        else:
+            return t_station_platform(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_segment(self):
+        return self.segment
+    def set_segment(self, segment):
+        self.segment = segment
+    def add_segment(self, value):
+        self.segment.append(value)
+    def insert_segment_at(self, index, value):
+        self.segment.insert(index, value)
+    def replace_segment_at(self, index, value):
+        self.segment[index] = value
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_name(self):
+        return self.name
+    def set_name(self, name):
+        self.name = name
+    def get_id(self):
+        return self.id
+    def set_id(self, id):
+        self.id = id
+    def hasContent_(self):
+        if (
+            self.segment or
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_station_platform', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_station_platform')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_station_platform')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_station_platform', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_station_platform'):
+        if self.name is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))
+        if 'id' not in already_processed:
+            already_processed.add('id')
+            outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_station_platform', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for segment_ in self.segment:
+            namespaceprefix_ = self.segment_nsprefix_ + ':' if (UseCapturedNS_ and self.segment_nsprefix_) else ''
+            segment_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='segment', pretty_print=pretty_print)
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('name', node)
+        if value is not None and 'name' not in already_processed:
+            already_processed.add('name')
+            self.name = 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):
+        if nodeName_ == 'segment':
+            obj_ = t_station_platform_segment.factory(parent_object_=self)
+            obj_.build(child_)
+            self.segment.append(obj_)
+            obj_.original_tagname_ = 'segment'
+        elif nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_station_platform
+
+
+class t_station_platform_segment(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, roadId=None, sStart=None, sEnd=None, side=None, userData=None, include=None, dataQuality=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.roadId = _cast(None, roadId)
+        self.roadId_nsprefix_ = None
+        self.sStart = _cast(float, sStart)
+        self.sStart_nsprefix_ = None
+        self.sEnd = _cast(float, sEnd)
+        self.sEnd_nsprefix_ = None
+        self.side = _cast(None, side)
+        self.side_nsprefix_ = None
+        if userData is None:
+            self.userData = []
+        else:
+            self.userData = userData
+        self.userData_nsprefix_ = None
+        if include is None:
+            self.include = []
+        else:
+            self.include = include
+        self.include_nsprefix_ = None
+        self.dataQuality = dataQuality
+        self.dataQuality_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_station_platform_segment)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_station_platform_segment.subclass:
+            return t_station_platform_segment.subclass(*args_, **kwargs_)
+        else:
+            return t_station_platform_segment(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_userData(self):
+        return self.userData
+    def set_userData(self, userData):
+        self.userData = userData
+    def add_userData(self, value):
+        self.userData.append(value)
+    def insert_userData_at(self, index, value):
+        self.userData.insert(index, value)
+    def replace_userData_at(self, index, value):
+        self.userData[index] = value
+    def get_include(self):
+        return self.include
+    def set_include(self, include):
+        self.include = include
+    def add_include(self, value):
+        self.include.append(value)
+    def insert_include_at(self, index, value):
+        self.include.insert(index, value)
+    def replace_include_at(self, index, value):
+        self.include[index] = value
+    def get_dataQuality(self):
+        return self.dataQuality
+    def set_dataQuality(self, dataQuality):
+        self.dataQuality = dataQuality
+    def get_roadId(self):
+        return self.roadId
+    def set_roadId(self, roadId):
+        self.roadId = roadId
+    def get_sStart(self):
+        return self.sStart
+    def set_sStart(self, sStart):
+        self.sStart = sStart
+    def get_sEnd(self):
+        return self.sEnd
+    def set_sEnd(self, sEnd):
+        self.sEnd = sEnd
+    def get_side(self):
+        return self.side
+    def set_side(self, side):
+        self.side = side
+    def validate_t_grEqZero(self, value):
+        # Validate type t_grEqZero, a restriction on xs:double.
+        if value is not None and Validate_simpletypes_:
+            if value < 0.0:
+                warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on t_grEqZero' % {"value" : value} )
+    def validate_e_station_platform_segment_side(self, value):
+        # Validate type e_station_platform_segment_side, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['left', 'right']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_station_platform_segment_side' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+            self.userData or
+            self.include or
+            self.dataQuality is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_station_platform_segment', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_station_platform_segment')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_station_platform_segment')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_station_platform_segment', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_station_platform_segment'):
+        if 'roadId' not in already_processed:
+            already_processed.add('roadId')
+            outfile.write(' roadId=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.roadId), input_name='roadId')), ))
+        if 'sStart' not in already_processed:
+            already_processed.add('sStart')
+            outfile.write(' sStart="%s"' % self.gds_format_double(self.sStart, input_name='sStart'))
+        if 'sEnd' not in already_processed:
+            already_processed.add('sEnd')
+            outfile.write(' sEnd="%s"' % self.gds_format_double(self.sEnd, input_name='sEnd'))
+        if 'side' not in already_processed:
+            already_processed.add('side')
+            outfile.write(' side=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.side), input_name='side')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_station_platform_segment', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for userData_ in self.userData:
+            namespaceprefix_ = self.userData_nsprefix_ + ':' if (UseCapturedNS_ and self.userData_nsprefix_) else ''
+            userData_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='userData', pretty_print=pretty_print)
+        for include_ in self.include:
+            namespaceprefix_ = self.include_nsprefix_ + ':' if (UseCapturedNS_ and self.include_nsprefix_) else ''
+            include_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='include', pretty_print=pretty_print)
+        if self.dataQuality is not None:
+            namespaceprefix_ = self.dataQuality_nsprefix_ + ':' if (UseCapturedNS_ and self.dataQuality_nsprefix_) else ''
+            self.dataQuality.export(outfile, level, namespaceprefix_, namespacedef_='', name_='dataQuality', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('roadId', node)
+        if value is not None and 'roadId' not in already_processed:
+            already_processed.add('roadId')
+            self.roadId = value
+        value = find_attr_value_('sStart', node)
+        if value is not None and 'sStart' not in already_processed:
+            already_processed.add('sStart')
+            try:
+                self.sStart = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sStart): %s' % exp)
+            self.validate_t_grEqZero(self.sStart)    # validate type t_grEqZero
+        value = find_attr_value_('sEnd', node)
+        if value is not None and 'sEnd' not in already_processed:
+            already_processed.add('sEnd')
+            try:
+                self.sEnd = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (sEnd): %s' % exp)
+            self.validate_t_grEqZero(self.sEnd)    # validate type t_grEqZero
+        value = find_attr_value_('side', node)
+        if value is not None and 'side' not in already_processed:
+            already_processed.add('side')
+            self.side = value
+            self.validate_e_station_platform_segment_side(self.side)    # validate type e_station_platform_segment_side
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        if nodeName_ == 'userData':
+            obj_ = t_userData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.userData.append(obj_)
+            obj_.original_tagname_ = 'userData'
+        elif nodeName_ == 'include':
+            obj_ = t_include.factory(parent_object_=self)
+            obj_.build(child_)
+            self.include.append(obj_)
+            obj_.original_tagname_ = 'include'
+        elif nodeName_ == 'dataQuality':
+            obj_ = t_dataQuality.factory(parent_object_=self)
+            obj_.build(child_)
+            self.dataQuality = obj_
+            obj_.original_tagname_ = 'dataQuality'
+# end class t_station_platform_segment
+
+
+class t_userData(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, code=None, value=None, anytypeobjs_=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.code = _cast(None, code)
+        self.code_nsprefix_ = None
+        self.value = _cast(None, value)
+        self.value_nsprefix_ = None
+        if anytypeobjs_ is None:
+            self.anytypeobjs_ = []
+        else:
+            self.anytypeobjs_ = anytypeobjs_
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_userData)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_userData.subclass:
+            return t_userData.subclass(*args_, **kwargs_)
+        else:
+            return t_userData(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_anytypeobjs_(self): return self.anytypeobjs_
+    def set_anytypeobjs_(self, anytypeobjs_): self.anytypeobjs_ = anytypeobjs_
+    def add_anytypeobjs_(self, value): self.anytypeobjs_.append(value)
+    def insert_anytypeobjs_(self, index, value): self._anytypeobjs_[index] = value
+    def get_code(self):
+        return self.code
+    def set_code(self, code):
+        self.code = code
+    def get_value(self):
+        return self.value
+    def set_value(self, value):
+        self.value = value
+    def hasContent_(self):
+        if (
+            self.anytypeobjs_
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_userData', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_userData')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_userData')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_userData', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_userData'):
+        if 'code' not in already_processed:
+            already_processed.add('code')
+            outfile.write(' code=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.code), input_name='code')), ))
+        if 'value' not in already_processed:
+            already_processed.add('value')
+            outfile.write(' value=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.value), input_name='value')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_userData', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for obj_ in self.anytypeobjs_:
+            obj_.export(outfile, level, namespaceprefix_, pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('code', node)
+        if value is not None and 'code' not in already_processed:
+            already_processed.add('code')
+            self.code = value
+        value = find_attr_value_('value', node)
+        if value is not None and 'value' not in already_processed:
+            already_processed.add('value')
+            self.value = value
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        content_ = self.gds_build_any(child_, 't_userData')
+        self.add_anytypeobjs_(content_)
+# end class t_userData
+
+
+class t_include(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, file=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.file = _cast(None, file)
+        self.file_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_include)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_include.subclass:
+            return t_include.subclass(*args_, **kwargs_)
+        else:
+            return t_include(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_file(self):
+        return self.file
+    def set_file(self, file):
+        self.file = file
+    def hasContent_(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_include', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_include')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_include')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_include', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_include'):
+        if 'file' not in already_processed:
+            already_processed.add('file')
+            outfile.write(' file=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.file), input_name='file')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_include', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('file', node)
+        if value is not None and 'file' not in already_processed:
+            already_processed.add('file')
+            self.file = value
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        pass
+# end class t_include
+
+
+class t_dataQuality(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, error=None, rawData=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.error = error
+        self.error_nsprefix_ = None
+        self.rawData = rawData
+        self.rawData_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_dataQuality)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_dataQuality.subclass:
+            return t_dataQuality.subclass(*args_, **kwargs_)
+        else:
+            return t_dataQuality(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_error(self):
+        return self.error
+    def set_error(self, error):
+        self.error = error
+    def get_rawData(self):
+        return self.rawData
+    def set_rawData(self, rawData):
+        self.rawData = rawData
+    def hasContent_(self):
+        if (
+            self.error is not None or
+            self.rawData is not None
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_dataQuality', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_dataQuality')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_dataQuality')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_dataQuality', pretty_print=pretty_print)
+            showIndent(outfile, level, pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_dataQuality'):
+        pass
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_dataQuality', fromsubclass_=False, pretty_print=True):
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.error is not None:
+            namespaceprefix_ = self.error_nsprefix_ + ':' if (UseCapturedNS_ and self.error_nsprefix_) else ''
+            self.error.export(outfile, level, namespaceprefix_, namespacedef_='', name_='error', pretty_print=pretty_print)
+        if self.rawData is not None:
+            namespaceprefix_ = self.rawData_nsprefix_ + ':' if (UseCapturedNS_ and self.rawData_nsprefix_) else ''
+            self.rawData.export(outfile, level, namespaceprefix_, namespacedef_='', name_='rawData', pretty_print=pretty_print)
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_ == 'error':
+            obj_ = t_dataQuality_Error.factory(parent_object_=self)
+            obj_.build(child_)
+            self.error = obj_
+            obj_.original_tagname_ = 'error'
+        elif nodeName_ == 'rawData':
+            obj_ = t_dataQuality_RawData.factory(parent_object_=self)
+            obj_.build(child_)
+            self.rawData = obj_
+            obj_.original_tagname_ = 'rawData'
+# end class t_dataQuality
+
+
+class t_dataQuality_Error(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, xyAbsolute=None, zAbsolute=None, xyRelative=None, zRelative=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.xyAbsolute = _cast(float, xyAbsolute)
+        self.xyAbsolute_nsprefix_ = None
+        self.zAbsolute = _cast(float, zAbsolute)
+        self.zAbsolute_nsprefix_ = None
+        self.xyRelative = _cast(float, xyRelative)
+        self.xyRelative_nsprefix_ = None
+        self.zRelative = _cast(float, zRelative)
+        self.zRelative_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_dataQuality_Error)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_dataQuality_Error.subclass:
+            return t_dataQuality_Error.subclass(*args_, **kwargs_)
+        else:
+            return t_dataQuality_Error(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_xyAbsolute(self):
+        return self.xyAbsolute
+    def set_xyAbsolute(self, xyAbsolute):
+        self.xyAbsolute = xyAbsolute
+    def get_zAbsolute(self):
+        return self.zAbsolute
+    def set_zAbsolute(self, zAbsolute):
+        self.zAbsolute = zAbsolute
+    def get_xyRelative(self):
+        return self.xyRelative
+    def set_xyRelative(self, xyRelative):
+        self.xyRelative = xyRelative
+    def get_zRelative(self):
+        return self.zRelative
+    def set_zRelative(self, zRelative):
+        self.zRelative = zRelative
+    def hasContent_(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_dataQuality_Error', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_dataQuality_Error')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_dataQuality_Error')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_dataQuality_Error', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_dataQuality_Error'):
+        if 'xyAbsolute' not in already_processed:
+            already_processed.add('xyAbsolute')
+            outfile.write(' xyAbsolute="%s"' % self.gds_format_double(self.xyAbsolute, input_name='xyAbsolute'))
+        if 'zAbsolute' not in already_processed:
+            already_processed.add('zAbsolute')
+            outfile.write(' zAbsolute="%s"' % self.gds_format_double(self.zAbsolute, input_name='zAbsolute'))
+        if 'xyRelative' not in already_processed:
+            already_processed.add('xyRelative')
+            outfile.write(' xyRelative="%s"' % self.gds_format_double(self.xyRelative, input_name='xyRelative'))
+        if 'zRelative' not in already_processed:
+            already_processed.add('zRelative')
+            outfile.write(' zRelative="%s"' % self.gds_format_double(self.zRelative, input_name='zRelative'))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_dataQuality_Error', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('xyAbsolute', node)
+        if value is not None and 'xyAbsolute' not in already_processed:
+            already_processed.add('xyAbsolute')
+            try:
+                self.xyAbsolute = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (xyAbsolute): %s' % exp)
+        value = find_attr_value_('zAbsolute', node)
+        if value is not None and 'zAbsolute' not in already_processed:
+            already_processed.add('zAbsolute')
+            try:
+                self.zAbsolute = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (zAbsolute): %s' % exp)
+        value = find_attr_value_('xyRelative', node)
+        if value is not None and 'xyRelative' not in already_processed:
+            already_processed.add('xyRelative')
+            try:
+                self.xyRelative = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (xyRelative): %s' % exp)
+        value = find_attr_value_('zRelative', node)
+        if value is not None and 'zRelative' not in already_processed:
+            already_processed.add('zRelative')
+            try:
+                self.zRelative = float(value)
+            except ValueError as exp:
+                raise ValueError('Bad float/double attribute (zRelative): %s' % exp)
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        pass
+# end class t_dataQuality_Error
+
+
+class t_dataQuality_RawData(GeneratedsSuper):
+    subclass = None
+    superclass = None
+    def __init__(self, date=None, source=None, sourceComment=None, postProcessing=None, postProcessingComment=None, **kwargs_):
+        self.original_tagname_ = None
+        self.parent_object_ = kwargs_.get('parent_object_')
+        self.ns_prefix_ = None
+        self.date = _cast(None, date)
+        self.date_nsprefix_ = None
+        self.source = _cast(None, source)
+        self.source_nsprefix_ = None
+        self.sourceComment = _cast(None, sourceComment)
+        self.sourceComment_nsprefix_ = None
+        self.postProcessing = _cast(None, postProcessing)
+        self.postProcessing_nsprefix_ = None
+        self.postProcessingComment = _cast(None, postProcessingComment)
+        self.postProcessingComment_nsprefix_ = None
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, t_dataQuality_RawData)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if t_dataQuality_RawData.subclass:
+            return t_dataQuality_RawData.subclass(*args_, **kwargs_)
+        else:
+            return t_dataQuality_RawData(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_ns_prefix_(self):
+        return self.ns_prefix_
+    def set_ns_prefix_(self, ns_prefix):
+        self.ns_prefix_ = ns_prefix
+    def get_date(self):
+        return self.date
+    def set_date(self, date):
+        self.date = date
+    def get_source(self):
+        return self.source
+    def set_source(self, source):
+        self.source = source
+    def get_sourceComment(self):
+        return self.sourceComment
+    def set_sourceComment(self, sourceComment):
+        self.sourceComment = sourceComment
+    def get_postProcessing(self):
+        return self.postProcessing
+    def set_postProcessing(self, postProcessing):
+        self.postProcessing = postProcessing
+    def get_postProcessingComment(self):
+        return self.postProcessingComment
+    def set_postProcessingComment(self, postProcessingComment):
+        self.postProcessingComment = postProcessingComment
+    def validate_e_dataQuality_RawData_Source(self, value):
+        # Validate type e_dataQuality_RawData_Source, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['sensor', 'cadaster', 'custom']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_dataQuality_RawData_Source' % {"value" : value.encode("utf-8")} )
+    def validate_e_dataQuality_RawData_PostProcessing(self, value):
+        # Validate type e_dataQuality_RawData_PostProcessing, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            value = str(value)
+            enumerations = ['raw', 'cleaned', 'processed', 'fused']
+            enumeration_respectee = False
+            for enum in enumerations:
+                if value == enum:
+                    enumeration_respectee = True
+                    break
+            if not enumeration_respectee:
+                warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on e_dataQuality_RawData_PostProcessing' % {"value" : value.encode("utf-8")} )
+    def hasContent_(self):
+        if (
+
+        ):
+            return True
+        else:
+            return False
+    def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_dataQuality_RawData', pretty_print=True):
+        imported_ns_def_ = GenerateDSNamespaceDefs_.get('t_dataQuality_RawData')
+        if imported_ns_def_ is not None:
+            namespacedef_ = imported_ns_def_
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.original_tagname_ is not None:
+            name_ = self.original_tagname_
+        if UseCapturedNS_ and self.ns_prefix_:
+            namespaceprefix_ = self.ns_prefix_ + ':'
+        showIndent(outfile, level, pretty_print)
+        outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        already_processed = set()
+        self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='t_dataQuality_RawData')
+        if self.hasContent_():
+            outfile.write('>%s' % (eol_, ))
+            self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='t_dataQuality_RawData', pretty_print=pretty_print)
+            outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))
+        else:
+            outfile.write('/>%s' % (eol_, ))
+    def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='t_dataQuality_RawData'):
+        if 'date' not in already_processed:
+            already_processed.add('date')
+            outfile.write(' date=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.date), input_name='date')), ))
+        if 'source' not in already_processed:
+            already_processed.add('source')
+            outfile.write(' source=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.source), input_name='source')), ))
+        if self.sourceComment is not None and 'sourceComment' not in already_processed:
+            already_processed.add('sourceComment')
+            outfile.write(' sourceComment=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.sourceComment), input_name='sourceComment')), ))
+        if 'postProcessing' not in already_processed:
+            already_processed.add('postProcessing')
+            outfile.write(' postProcessing=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.postProcessing), input_name='postProcessing')), ))
+        if self.postProcessingComment is not None and 'postProcessingComment' not in already_processed:
+            already_processed.add('postProcessingComment')
+            outfile.write(' postProcessingComment=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.postProcessingComment), input_name='postProcessingComment')), ))
+    def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='t_dataQuality_RawData', fromsubclass_=False, pretty_print=True):
+        pass
+    def build(self, node):
+        already_processed = set()
+        self.ns_prefix_ = node.prefix
+        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_('date', node)
+        if value is not None and 'date' not in already_processed:
+            already_processed.add('date')
+            self.date = value
+        value = find_attr_value_('source', node)
+        if value is not None and 'source' not in already_processed:
+            already_processed.add('source')
+            self.source = value
+            self.validate_e_dataQuality_RawData_Source(self.source)    # validate type e_dataQuality_RawData_Source
+        value = find_attr_value_('sourceComment', node)
+        if value is not None and 'sourceComment' not in already_processed:
+            already_processed.add('sourceComment')
+            self.sourceComment = value
+        value = find_attr_value_('postProcessing', node)
+        if value is not None and 'postProcessing' not in already_processed:
+            already_processed.add('postProcessing')
+            self.postProcessing = value
+            self.validate_e_dataQuality_RawData_PostProcessing(self.postProcessing)    # validate type e_dataQuality_RawData_PostProcessing
+        value = find_attr_value_('postProcessingComment', node)
+        if value is not None and 'postProcessingComment' not in already_processed:
+            already_processed.add('postProcessingComment')
+            self.postProcessingComment = value
+    def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
+        pass
+# end class t_dataQuality_RawData
+
+
+GDSClassesMapping = {
+}
+
+
+USAGE_TEXT = """
+Usage: python <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 get_required_ns_prefix_defs(rootNode):
+    '''Get all name space prefix definitions required in this XML doc.
+    Return a dictionary of definitions and a char string of definitions.
+    '''
+    nsmap = {
+        prefix: uri
+        for node in rootNode.iter()
+        for (prefix, uri) in node.nsmap.items()
+        if prefix is not None
+    }
+    namespacedefs = ' '.join([
+        'xmlns:{}="{}"'.format(prefix, uri)
+        for prefix, uri in nsmap.items()
+    ])
+    return nsmap, namespacedefs
+
+
+def parse(inFileName, silence=False):
+    global CapturedNsmap_
+    parser = None
+    doc = parsexml_(inFileName, parser)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'OpenDRIVE'
+        rootClass = OpenDRIVE
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    CapturedNsmap_, namespacedefs = get_required_ns_prefix_defs(rootNode)
+    if not silence:
+        sys.stdout.write('<?xml version="1.0" ?>\n')
+        rootObj.export(
+            sys.stdout, 0, name_=rootTag,
+            namespacedef_=namespacedefs,
+            pretty_print=True)
+    return rootObj
+
+
+def parseEtree(inFileName, silence=False):
+    parser = None
+    doc = parsexml_(inFileName, parser)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'OpenDRIVE'
+        rootClass = OpenDRIVE
+    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):
+    '''Parse a string, create the object tree, and export it.
+
+    Arguments:
+    - inString -- A string.  This XML fragment should not start
+      with an XML declaration containing an encoding.
+    - silence -- A boolean.  If False, export the object.
+    Returns -- The root object in the tree.
+    '''
+    parser = None
+    rootNode= parsexmlstring_(inString, parser)
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'OpenDRIVE'
+        rootClass = OpenDRIVE
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    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):
+    parser = None
+    doc = parsexml_(inFileName, parser)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'OpenDRIVE'
+        rootClass = OpenDRIVE
+    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 opendrive_parser_15M import *\n\n')
+        sys.stdout.write('import opendrive_parser_15M 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()
+
+RenameMappings_ = {
+}
+
+__all__ = [
+    "OpenDRIVE",
+    "t_controller",
+    "t_controller_control",
+    "t_dataQuality",
+    "t_dataQuality_Error",
+    "t_dataQuality_RawData",
+    "t_header",
+    "t_header_GeoReference",
+    "t_header_Offset",
+    "t_include",
+    "t_junction",
+    "t_junctionGroup",
+    "t_junctionGroup_junctionReference",
+    "t_junction_connection",
+    "t_junction_connection_laneLink",
+    "t_junction_controller",
+    "t_junction_predecessorSuccessor",
+    "t_junction_priority",
+    "t_junction_surface",
+    "t_junction_surface_CRG",
+    "t_road",
+    "t_road_elevationProfile",
+    "t_road_elevationProfile_elevation",
+    "t_road_lanes",
+    "t_road_lanes_laneOffset",
+    "t_road_lanes_laneSection",
+    "t_road_lanes_laneSection_center",
+    "t_road_lanes_laneSection_center_lane",
+    "t_road_lanes_laneSection_lcr_lane_link",
+    "t_road_lanes_laneSection_lcr_lane_link_predecessorSuccessor",
+    "t_road_lanes_laneSection_lcr_lane_roadMark",
+    "t_road_lanes_laneSection_lcr_lane_roadMark_explicit",
+    "t_road_lanes_laneSection_lcr_lane_roadMark_explicit_line",
+    "t_road_lanes_laneSection_lcr_lane_roadMark_sway",
+    "t_road_lanes_laneSection_lcr_lane_roadMark_type",
+    "t_road_lanes_laneSection_lcr_lane_roadMark_type_line",
+    "t_road_lanes_laneSection_left",
+    "t_road_lanes_laneSection_left_lane",
+    "t_road_lanes_laneSection_lr_lane",
+    "t_road_lanes_laneSection_lr_lane_access",
+    "t_road_lanes_laneSection_lr_lane_border",
+    "t_road_lanes_laneSection_lr_lane_height",
+    "t_road_lanes_laneSection_lr_lane_material",
+    "t_road_lanes_laneSection_lr_lane_rule",
+    "t_road_lanes_laneSection_lr_lane_speed",
+    "t_road_lanes_laneSection_lr_lane_visibility",
+    "t_road_lanes_laneSection_lr_lane_width",
+    "t_road_lanes_laneSection_right",
+    "t_road_lanes_laneSection_right_lane",
+    "t_road_lateralProfile",
+    "t_road_lateralProfile_crossfall",
+    "t_road_lateralProfile_shape",
+    "t_road_lateralProfile_superelevation",
+    "t_road_link",
+    "t_road_link_neighbor",
+    "t_road_link_predecessorSuccessor",
+    "t_road_objects",
+    "t_road_objects_bridge",
+    "t_road_objects_object",
+    "t_road_objects_objectReference",
+    "t_road_objects_object_borders",
+    "t_road_objects_object_borders_border",
+    "t_road_objects_object_laneValidity",
+    "t_road_objects_object_markings",
+    "t_road_objects_object_markings_marking",
+    "t_road_objects_object_markings_marking_cornerReference",
+    "t_road_objects_object_material",
+    "t_road_objects_object_outlines",
+    "t_road_objects_object_outlines_outline",
+    "t_road_objects_object_outlines_outline_cornerLocal",
+    "t_road_objects_object_outlines_outline_cornerRoad",
+    "t_road_objects_object_parkingSpace",
+    "t_road_objects_object_repeat",
+    "t_road_objects_tunnel",
+    "t_road_planView",
+    "t_road_planView_geometry",
+    "t_road_planView_geometry_arc",
+    "t_road_planView_geometry_line",
+    "t_road_planView_geometry_paramPoly3",
+    "t_road_planView_geometry_poly3",
+    "t_road_planView_geometry_spiral",
+    "t_road_railroad",
+    "t_road_railroad_switch",
+    "t_road_railroad_switch_mainTrack",
+    "t_road_railroad_switch_partner",
+    "t_road_railroad_switch_sideTrack",
+    "t_road_signals",
+    "t_road_signals_signal",
+    "t_road_signals_signalReference",
+    "t_road_signals_signal_dependency",
+    "t_road_signals_signal_positionInertial",
+    "t_road_signals_signal_positionRoad",
+    "t_road_signals_signal_reference",
+    "t_road_surface",
+    "t_road_surface_CRG",
+    "t_road_type",
+    "t_road_type_speed",
+    "t_station",
+    "t_station_platform",
+    "t_station_platform_segment",
+    "t_userData"
+]

+ 476 - 0
src/tool/opendriveParser/parse_opendrive.py

@@ -0,0 +1,476 @@
+# -*- coding=utf-8 -*-
+
+import numpy as np
+from lxml import etree
+from enum import Enum
+import os
+
+def get_string(node, name):
+    return node.get(name)
+
+def get_int(node, name):
+    return int(node.get(name))
+
+def get_float(node, name):
+    return float(node.get(name))
+
+class Header:
+    def __init__(self, node_header):
+        self.date = get_string(node_header, 'date')
+        self.name = get_string(node_header, 'name')
+        self.east = get_float(node_header, 'east')
+        self.north = get_float(node_header, 'north')
+        self.south = get_float(node_header, 'south')
+        self.west = get_float(node_header, 'west')
+        self.revMajor = get_int(node_header, 'revMajor')
+        self.revMinor = get_int(node_header, 'revMinor')
+        self.vendor = get_string(node_header, 'vendor')
+        self.version = get_string(node_header, 'version')
+
+        if node_header.find("geoReference") is not None:
+            self.geo_reference = node_header.find("geoReference").text
+
+        # print(self.name, self.date, self.geo_reference)
+
+class RoadLinkElement:
+    def __init__(self, node_roadlink_element):
+        # <predecessor contactPoint="end" elementId="91" elementType="junction" />
+        self.contactPoint = get_string(node_roadlink_element, 'contactPoint')
+        self.elementId = get_int(node_roadlink_element, 'elementId')
+        self.elementType = get_string(node_roadlink_element, 'elementType') 
+
+        # print(self.contactPoint, self.elementId, self.elementType)
+
+class RoadLink:
+    def __init__(self, node_roadlink):
+        self.predecessor = None
+        self.successor = None
+
+        node_predecessor = node_roadlink.find('predecessor')
+        if node_predecessor is not None:
+            self.predecessor = RoadLinkElement(node_predecessor)
+
+        node_successor = node_roadlink.find('successor')
+        if node_successor is not None:
+            self.successor = RoadLinkElement(node_successor)
+
+class RoadType:
+    def __init__(self, node_roadtype):
+        # <type s="0" type="motorway" /> 
+        self.s = get_float(node_roadtype, 's')
+        self.type = get_string(node_roadtype, 'type')
+
+class GeometryType(Enum):
+    unknown = 0
+    Line = 1
+    Arc = 2
+    Poly3 = 3
+    ParamPoly3 = 4
+
+class Geometry:
+    def __init__(self, node_geometry):
+        # <geometry hdg="1.97298146738386" length="204.215477960887" s="0" x="-901.947546366" y="1610.90849739965">
+        self.s = get_float(node_geometry, 's')
+        self.x = get_float(node_geometry, 'x')
+        self.y = get_float(node_geometry, 'y')
+        self.hdg = get_float(node_geometry, 'hdg')
+        self.heading = self.hdg
+        self.length = get_float(node_geometry, 'length')
+        self.geo_type = GeometryType.unknown
+        self.start_position = np.array([self.x, self.y])         
+
+class GeometryLine(Geometry):
+    def __init__(self, node_geometry):        
+        super().__init__(node_geometry)  
+        self.geo_type = GeometryType.Line           
+
+class GeometryArc(Geometry):
+    def __init__(self, node_geometry):
+        super().__init__(node_geometry)
+        self.geo_type = GeometryType.Arc
+        self.curvature = None
+
+        node_arc = node_geometry.find('arc')
+        if node_arc is not None:
+            self.curvature = get_float(node_arc, 'curvature')
+
+class GeometryPoly3(Geometry):
+    def __init__(self, node_geometry):
+        super().__init__(node_geometry)
+        self.geo_type = GeometryType.Poly3
+        self.a = 0
+        self.b = 0
+        self.c = 0
+        self.d = 0
+
+        node_poly3 = node_geometry.find('poly3')
+        if node_poly3 is not None:
+            self.a = get_float(node_poly3, 'a')
+            self.b = get_float(node_poly3, 'b')
+            self.c = get_float(node_poly3, 'c')
+            self.d = get_float(node_poly3, 'd')
+
+class GeometryParamPoly3(Geometry):
+    def __init__(self, node_geometry):
+        super().__init__(node_geometry)
+        self.geo_type = GeometryType.ParamPoly3
+        self.aU = 0
+        self.bU = 0
+        self.cU = 0
+        self.dU = 0
+        self.aV = 0
+        self.bV = 0
+        self.cV = 0
+        self.dV = 0 
+        self.pRange = 0
+
+        node_param_poly3 = node_geometry.find('ParamPoly3')
+        if node_param_poly3 is not None:
+            self.aU = get_float(node_param_poly3, 'aU')
+            self.bU = get_float(node_param_poly3, 'bU')
+            self.cU = get_float(node_param_poly3, 'cU')
+            self.dU = get_float(node_param_poly3, 'dU')
+            self.aV = get_float(node_param_poly3, 'aV')
+            self.bV = get_float(node_param_poly3, 'bV')
+            self.cV = get_float(node_param_poly3, 'cV')
+            self.dV = get_float(node_param_poly3, 'dV')            
+            self.pRange = get_float(node_param_poly3, 'pRange')
+
+class RoadElevation:
+    def __init__(self, node_elevation):
+        # <elevation s="0" a="12" b="0" c="0" d="0" />
+        self.s = get_float(node_elevation, 's')
+        self.a = get_float(node_elevation, 'a')
+        self.b = get_float(node_elevation, 'b')
+        self.c = get_float(node_elevation, 'c')
+        self.d = get_float(node_elevation, 'd')
+        # print('RoadElevation', self.s, self.a, self.b, self.c, self.d)
+
+class RoadLaneOffset:
+    def __init__(self, node_laneOffset):
+        # <laneOffset s="0" a="0" b="0" c="0" d="0" />
+        self.s = get_float(node_laneOffset, 's')
+        self.a = get_float(node_laneOffset, 'a')
+        self.b = get_float(node_laneOffset, 'b')
+        self.c = get_float(node_laneOffset, 'c')
+        self.d = get_float(node_laneOffset, 'd')
+
+class RoadLaneSection:
+    def __init__(self, node_laneSection):
+        self.id = -1
+        self.s = get_float(node_laneSection, 's')
+        self.left_lanes = []
+        self.center_lanes = []
+        self.right_lanes = []
+        self.all_lanes = {}
+
+        node_left = node_laneSection.find('left')
+        if node_left is not None:
+            for node_lane in node_left.findall('lane'):
+                lane = Lane(node_lane)
+                self.left_lanes.append(lane)
+                self.all_lanes[lane.id] = lane
+        
+        node_center = node_laneSection.find('center')
+        if node_center is not None:
+            for node_lane in node_center.findall('lane'):
+                lane = Lane(node_lane)
+                self.center_lanes.append(lane)
+                self.all_lanes[lane.id] = lane
+        
+        node_right = node_laneSection.find('right')
+        if node_right is not None:
+            for node_lane in node_right.findall('lane'):
+                lane = Lane(node_lane)
+                self.right_lanes.append(lane)
+                self.all_lanes[lane.id] = lane
+
+class LaneLinkElement: 
+    def __init__(self, node_element):
+        self.id = get_int(node_element, 'id')
+
+class LaneLink: 
+    def __init__(self, node_roadlink):
+        # <link>
+        #     <predecessor id="-1" />
+        #     <successor id="-1" />
+        # </link>  
+        self.predecessor = None
+        self.successor = None
+
+        node_predecessor = node_roadlink.find('predecessor')
+        if node_predecessor is not None:
+            self.predecessor = LaneLinkElement(node_predecessor)
+
+        node_successor = node_roadlink.find('successor')
+        if node_successor is not None:
+            self.successor = LaneLinkElement(node_successor)
+
+
+class LaneWidth: 
+    def __init__(self, node_width):
+        # <width a="0.2" b="0" c="0" d="0" sOffset="0" /> 
+        self.a = get_float(node_width, 'a')
+        self.b = get_float(node_width, 'b')
+        self.c = get_float(node_width, 'c')
+        self.d = get_float(node_width, 'd')
+        self.sOffset = get_float(node_width, 'sOffset')
+
+class LaneMark: 
+    def __init__(self, node_mark):
+        # <roadMark color="standard" sOffset="0" type="none" weight="standard" />
+        self.color = get_string(node_mark, 'color')
+        self.sOffset = get_float(node_mark, 'sOffset')
+        self.type = get_string(node_mark, 'type')
+        self.weight = get_string(node_mark, 'weight') 
+
+class LaneSpeed: 
+    def __init__(self, node_speed):
+        # <speed sOffset="0" max="13.8" /> 
+        self.sOffset = get_float(node_speed, 'sOffset')
+        self.max = get_float(node_speed, 'max')
+
+class laneHeight:
+    def __init__(self, node_height):
+        # <height sOffset="0" inner="0.2" outer="0.2" /> 
+        self.sOffset = get_float(node_height, 'sOffset')
+        self.inner = get_float(node_height, 'inner')
+        self.outer = get_float(node_height, 'outer')
+
+class LaneUserDataStyle:
+    def __init__(self, node_style):
+        # <style sOffset="0" laneStyle="spec_concrete_3d" mapping="auto" />
+        self.sOffset = get_float(node_style, 'sOffset')
+        self.laneStyle = get_string(node_style, 'laneStyle')
+        self.mapping = get_string(node_style, 'mapping')
+
+class LaneUserDataFillet:
+    def __init__(self, node_fillet):
+        # <fillet pos="leftOfLane" style="grass" id="650" />        
+        self.id = get_int(node_fillet, 'id')
+        self.pos = get_string(node_fillet, 'pos')
+        self.style = get_string(node_fillet, 'style')
+
+class LaneUserData:
+    def __init__(self, node_user):
+        # <userData code="viStyleDef">
+        #     <style sOffset="0" laneStyle="spec_concrete_3d" mapping="auto" />
+        #     <fillet pos="leftOfLane" style="grass" id="650" />
+        # </userData>
+        self.code = get_string(node_user, 'code')
+        self.style = None
+        self.fillet = None
+
+        node_style = node_user.find('style')
+        if node_style is not None:
+            self.style = LaneUserDataStyle(node_style)
+
+        node_fillet = node_user.find('fillet')
+        if node_fillet is not None:
+            self.fillet = LaneUserDataFillet(node_fillet)
+
+class Lane:
+    def __init__(self, node_lane):
+        self.id = get_int(node_lane, 'id')
+        self.level = get_string(node_lane, 'level')
+        self.type = get_string(node_lane, 'type')
+        self.link = None
+        self.width = None
+        self.roadMarks = []
+        self.speed = None
+        self.height = None
+        self.userData = None
+
+        node_link = node_lane.find('link')
+        if node_link is not None:
+            self.link = LaneLink(node_link)
+
+        node_width = node_lane.find('width')
+        if node_width is not None:
+            self.width = LaneWidth(node_width)
+
+        for node_mark in node_lane.findall('roadMark'):
+            roadMark = LaneMark(node_mark)
+            self.roadMarks.append(roadMark)
+
+        node_speed = node_lane.find('speed')
+        if node_speed is not None:
+            self.speed = LaneSpeed(node_speed)
+
+        node_height = node_lane.find('height')
+        if node_height is not None:
+            self.height = laneHeight(node_height)
+
+        node_user = node_lane.find('userData')
+        if node_user is not None:
+            self.userData = LaneUserData(node_user)
+
+class RoadObject:
+    def __init__(self, node_object):
+        # <object id="100101" type="vegetation" name="VegBush04.flt" s="0" t="1" zOffset="0" length="3" width="3" height="3" hdg="0.7055475" pitch="0" roll="0" />
+        self.id = get_int(node_object, 'id')
+        self.type = get_string(node_object, 'type')
+        self.name = get_string(node_object, 'name')
+        self.s = get_float(node_object, 's')
+        self.t = get_float(node_object, 't')
+        self.zOffset = get_float(node_object, 'zOffset')
+        self.length = get_float(node_object, 'length')
+        self.width = get_float(node_object, 'width')
+        self.height = get_float(node_object, 'height')
+        self.hdg = get_float(node_object, 'hdg')
+        self.pitch = get_float(node_object, 'pitch')
+        self.roll = get_float(node_object, 'roll')
+
+class Road:
+    def __init__(self, node_road):        
+        self.id = None
+        self.name = None
+        self.junction = None
+        self.length = None
+
+        self.link = None
+        self.type = None
+        self.planView = []
+        self.elevationProfile = []
+        self.laneOffsets = []
+        self.laneSections = []
+        self.objects = []
+
+        # <road id="201" name="" junction="-1" length="70.6552863027954">
+        self.id = get_int(node_road, 'id')
+        self.name = get_string(node_road, 'name')
+        self.junction = get_int(node_road, 'junction')
+        self.length = get_float(node_road, 'length')        
+
+        if self.id == 1002 or self.id==104431 or True:
+            print('road id', self.id)
+            # print(self.id, self.name, self.junction, self.length)
+
+            node_link = node_road.find('link')
+            if node_link is not None:
+                self.link = RoadLink(node_link)
+
+            node_type = node_road.find('type')
+            if node_type is not None:
+                self.type = RoadType(node_type)
+
+            node_planview = node_road.find('planView')
+            if node_planview is not None:
+                for node_geometry in node_planview.findall('geometry'): 
+                    geometry = None
+                    if node_geometry.find('line') is not None:                        
+                        geometry = GeometryLine(node_geometry)
+                    elif node_geometry.find('arc') is not None:                        
+                        geometry = GeometryArc(node_geometry)
+                    elif node_geometry.find('poly3') is not None:                        
+                        geometry = GeometryPoly3(node_geometry)                    
+                    if geometry is not None:
+                        self.planView.append(geometry)
+
+            node_elevations = node_road.find('elevationProfile')
+            if node_elevations is not None:
+                for node_elevation in node_elevations.findall('elevation'):
+                    elevation = RoadElevation(node_elevation)
+                    self.elevationProfile.append(elevation)
+                    
+            node_lanes = node_road.find('lanes')
+            if node_lanes is not None:
+                for node_laneOffset in node_lanes.findall('laneOffset'):
+                    laneOffset = RoadLaneOffset(node_laneOffset)
+                    self.laneOffsets.append(laneOffset)
+                
+                for node_laneSection in node_lanes.findall('laneSection'):
+                    laneSection = RoadLaneSection(node_laneSection)
+                    laneSection.id = len(self.laneSections)
+                    self.laneSections.append(laneSection)
+
+            node_objects = node_road.find('objects')
+            if node_objects is not None:
+                for node_object in node_objects.findall('object'):
+                    road_object =  RoadObject(node_object)  
+                    self.objects.append(road_object)     
+
+class Control:
+    def __init__(self, node_control):
+        self.signalId = get_int(node_control, 'signalId')
+        self.type = get_string(node_control, 'type')
+
+class Controller:
+    def __init__(self, node_controller):
+        self.id = get_int(node_controller, 'id')
+        self.controls = []
+
+        for node_control in node_controller.findall('control'):
+            control = Control(node_control)
+            self.controls.append(control)
+
+class JunctionLaneLink:
+    def __init__(self, node_laneLink):        
+        self.from_lane = get_int(node_laneLink, 'from')
+        self.to_lane = get_int(node_laneLink, 'to')
+
+class JunctionConnection:
+    def __init__(self, node_connection):
+        self.id = get_int(node_connection, 'id')
+        self.incomingRoad = get_int(node_connection, 'incomingRoad')
+        self.connectingRoad = get_int(node_connection, 'connectingRoad')
+        self.contactPoint = get_string(node_connection, 'contactPoint')
+        self.laneLinks = []
+
+        for node_laneLink in node_connection.findall('laneLink'):
+            laneLink = JunctionLaneLink(node_laneLink)
+            self.laneLinks.append(laneLink)
+     
+class Junction:
+    def __init__(self, node_junction):
+        self.id = get_int(node_junction, 'id')
+        self.name = get_string(node_junction, 'name')
+        self.connections = []
+
+        for node_connection in node_junction.findall('connection'):
+            connection = JunctionConnection(node_connection)
+            self.connections.append(connection)
+        
+class OpenDrive:
+    def __init__(self, node_root):
+        self.header = None
+        self.roads = []
+        self.junctions = []
+        self.controllers = []
+
+        node_header = node_root.find('header')
+        if node_header is not None:
+            self.header = Header(node_header)
+
+        for node_road in node_root.findall('road'):
+            road = Road(node_road)
+            self.roads.append(road)
+
+        for node_controller in node_root.findall('controller'):
+            controller = Controller(node_controller)
+            print('controller', controller.id)
+            self.controllers.append(controller)
+
+        for node_junction in node_root.findall('junction'):
+            junction = Junction(node_junction)
+            print('junction', junction.id)
+            self.junctions.append(junction)
+
+
+if __name__ == "__main__":
+    
+    xodr_file = r'sample_largezone.xodr'
+    
+    if os.path.exists(xodr_file):
+        doc = etree.parse(xodr_file)
+        opendrive = OpenDrive(doc.getroot())    
+        print('parse ok')
+
+        for road in opendrive.roads:
+            for lanesection in road.laneSections:
+                for lane in lanesection.all_lanes.values():
+                    if len(lane.roadMarks) > 1:
+                        print(road.id, lanesection.id, lanesection.s)
+    else:
+        print(xodr_file, 'not found')
+     

+ 23 - 0
src/tool/opendriveParser/readme.md

@@ -0,0 +1,23 @@
+# Convert OpenDrive To Json 
+
+1. ##  xsd to python class
+
+https://pypi.org/project/generateDS/
+
+```python
+generateDS.py -o opendrive_parser_14H.py OpenDRIVE_1.4H.xsd
+
+generateDS.py -o opendrive_parser_15M.py OpenDRIVE_1.5M.xsd
+```
+
+2. ## Convert
+
+```python
+xodr_file = r'sample_largezone.xodr'
+opendrive = opendrive_parser.parse(xodr_file, silence=True)
+
+convert = ConvertOpenDrive(opendrive, 0.5)
+
+convert.json_all_baseroad(r'./tmp/all_baseroad_new.json')
+```
+

+ 23 - 0
src/tool/opendriveParser/txt2json.py

@@ -0,0 +1,23 @@
+def point2json(coord):
+    return {
+        "position": [coord[0], coord[1], coord[2]]
+    }
+
+import json
+import numpy as np
+
+points = []
+f = open('data.txt', 'r')
+point = f.readline()
+while point:
+    coord = np.array(point.split(), dtype=float)
+    points.append(point2json(coord))
+    point = f.readline()
+
+f.close()
+
+with open('data.json', 'w') as outf:
+    outf.write(json.dumps(points, indent=4, separators=(',', ': ')))
+
+outf.close()
+

+ 0 - 10
src/ui/ui_ads_hmi/ADCIntelligentVehicle.cpp

@@ -1599,16 +1599,6 @@ void ADCIntelligentVehicle::on_pushButton_9_clicked()//慢速
     //        ServiceControlStatus.low_speed = low_speed_.toInt();
 }
 
-
-
-/**
- * @brief ADCIntelligentVehicle::UpdatePlanTrace
- * @param strdata
- * @param nSize
- * @param index
- * @param dt
- * @param strmemname
- */
 void ADCIntelligentVehicle::UpdatePlanTrace(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
 {
     mMutexPlan.lock();

+ 51 - 0
src/ui/xviz_civetweb/common/boost.h

@@ -0,0 +1,51 @@
+#pragma once
+
+#ifndef _IV_BOOST_H_
+#define _IV_BOOST_H_
+
+#if defined __GNUC__
+#  pragma GCC system_header 
+#endif
+#ifndef __CUDACC__
+//https://bugreports.qt-project.org/browse/QTBUG-22829
+#ifndef Q_MOC_RUN
+#include <boost/version.hpp>
+#include <boost/numeric/conversion/cast.hpp>
+#include <boost/thread/mutex.hpp>
+#include <boost/thread/condition.hpp>
+#include <boost/thread.hpp>
+#include <boost/thread/thread.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/bind.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/function.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/weak_ptr.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/inherit.hpp>
+#include <boost/mpl/inherit_linearly.hpp>
+#include <boost/mpl/joint_view.hpp>
+#include <boost/mpl/transform.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/algorithm/string.hpp>
+#ifndef Q_MOC_RUN
+#include <boost/date_time/posix_time/posix_time.hpp>
+#endif
+#if BOOST_VERSION >= 104700
+#include <boost/chrono.hpp>
+#endif
+#include <boost/tokenizer.hpp>
+#include <boost/foreach.hpp>
+#include <boost/shared_array.hpp>
+#include <boost/interprocess/sync/file_lock.hpp>
+#if BOOST_VERSION >= 104900
+#include <boost/interprocess/permissions.hpp>
+#endif
+#include <boost/iostreams/device/mapped_file.hpp>
+#define BOOST_PARAMETER_MAX_ARITY 7
+#include <boost/signals2.hpp>
+#include <boost/signals2/slot.hpp>
+#endif
+#endif
+#endif    // _IV_BOOST_H_

+ 21 - 0
src/ui/xviz_civetweb/common/can_type.h

@@ -0,0 +1,21 @@
+#ifndef CAN_TYPE_H
+#define CAN_TYPE_H
+
+#include <common/boost.h>
+/**
+ *
+ */
+
+namespace iv {
+struct can_state
+{
+    bool mbCANOpen;
+    int mnCh1RecvCount;
+    int mnCh1SendCount;
+    int mnCh2RecvCount;
+};
+
+typedef boost::shared_ptr<iv::can_state> can_state_ptr;
+}
+
+#endif // CAN_TYPE_H

+ 24 - 0
src/ui/xviz_civetweb/common/car_status.cpp

@@ -0,0 +1,24 @@
+#include "common/car_status.h"
+
+#ifdef linux
+
+unsigned long GetTickCount()
+{
+ struct timespec ts;
+ clock_gettime(CLOCK_MONOTONIC,&ts);
+ return (ts.tv_sec * 1000 + ts.tv_nsec/(1000*1000) );
+}
+#endif
+
+iv::CarStatus::CarStatus()
+{
+	speed = 0;
+	braking_pressure = 0;
+	wheel_angle = 0;
+	location = boost::shared_ptr<iv::GPS_INS>(new iv::GPS_INS);
+    mRunTime.start();
+}
+
+iv::CarStatus::~CarStatus()
+{
+}

+ 110 - 0
src/ui/xviz_civetweb/common/car_status.h

@@ -0,0 +1,110 @@
+#pragma once
+#ifndef _IV_COMMON_CAR_STATUS_
+#define _IV_COMMON_CAR_STATUS_
+
+#include <common/boost.h>
+#include <boost/serialization/singleton.hpp>
+#include <common/gps_type.h>
+#include <common/obstacle_type.h>
+#include <time.h>
+#include <QTime>
+
+//#include "platform/platform.h"
+
+
+#ifdef linux
+unsigned long GetTickCount();
+#endif
+namespace iv {
+class CarStatus : public boost::noncopyable {
+public:
+    CarStatus();
+    ~CarStatus();
+
+    float speed;			//车速
+    std::int16_t wheel_angle;		//方向盘转角
+    std::uint8_t braking_pressure;	//刹车压力
+    bool mbRunPause = true;
+    bool mbBrainCtring = false;
+    bool mdecition_period;
+    bool status[6] = { true, false, false, false, true, false };	//bool arrive = false;	//  x4:是否到达站点(0:未到 1:到达)
+    //bool people = false;	//	x3:车上是否有人(0:无人 1:有人)
+    //bool stop = false;	    //	x2:是否停车(0:否   1:是)
+    //bool call = false;		//	x1:是否叫车(0:否	1:是)
+    //bool available = true;	// 是否可被叫车
+    //bool fire = false;
+    //       int carState = 0;	// 0:停车	1:正常循迹	2:前往站点
+
+    int carState = 0;	// 0:停车	1:正常循迹	2:前往站点
+    int toclient = 0;
+    int clientto = 0;
+    double srclng = 0.0;
+    double srclat = 0.0;
+    double dstlng = 0.0;
+    double dstlat = 0.0;
+
+    //        std::vector <iv::platform::station> car_stations;
+
+
+//    AWS_display aws_display;
+//    lane Lane;
+//    obstacle_status obstacleStatus;
+//    obstacle_data_a obstacleStatusA[15];
+//    obstacle_data_b obstacleStatusB[15];
+//    obstacle_data_c obstacleStatusC[15];
+//    aftermarket_lane aftermarketLane;
+//    lka_left_lane_a LKAleftLaneA;
+//    lka_left_lane_b LKAleftLaneB;
+//    lka_right_lane_a LKArightLaneA;
+//    lka_right_lane_b LKArightLaneB;
+//    next_lane_a nextLaneA_left[4], nextLaneA_right[4];
+//    next_lane_b nextLaneB_left[4], nextLaneB_right[4];
+//    ref_points refPoints;
+//    num_of_next_lane_mark_reported numOfNextLaneMarkReported;
+
+
+    double mfAcc = 0;
+    double mfWheel = 0;
+    double mfBrake = 0;
+    QTime mRunTime;
+
+    int mRadarS = -1;
+    int mLidarS = -1;
+    int mMobileyeS = -1;
+    int mRTKStatus = 0;
+
+    double mLidarObs;
+    double mRadarObs;
+    double mObs;
+    bool mbcanSt = false;
+    float mfttc = 0;
+    bool mbBrainRunning;
+
+
+    GPS_INS aim_gps_ins;
+    bool bocheMode=false;
+    int bocheEnable=0;
+
+    iv::GPSData location;		//当前车辆位置
+    boost::array<iv::ObstacleBasic, 64> obs_radar;//毫米波雷达的障碍物数据
+//    iv::ultrasonic_obs multrasonic_obs;
+
+    /*Vbox红绿灯*/
+    uint32_t st_straight;
+    uint32_t st_left;
+    uint32_t st_right;
+    uint32_t st_turn;
+    uint32_t time_straight;
+    uint32_t time_left;
+    uint32_t time_right;
+    uint32_t time_turn;
+
+    double esr_y_offset = 0;
+    double lidar_y_offset = 0;
+
+
+};
+typedef boost::serialization::singleton<iv::CarStatus> CarStatusSingleton;//非线程安全,注意多线程加锁,单例模式
+}
+#define ServiceCarStatus iv::CarStatusSingleton::get_mutable_instance()
+#endif // !_IV_COMMON_CAR_STATUS_

+ 21 - 0
src/ui/xviz_civetweb/common/common.pri

@@ -0,0 +1,21 @@
+DISTFILES +=
+
+HEADERS += \
+    $$PWD/boost.h \
+    $$PWD/car_status.h \
+    $$PWD/constants.h \
+    $$PWD/gps_type.h \
+    $$PWD/can_type.h \
+    $$PWD/logout.h \
+    $$PWD/obstacle_type.h \
+    $$PWD/decition_type.h \
+    $$PWD/vehiclestate_type.h \
+    $$PWD/hmi_type.h \
+    $$PWD/perceptionoutput.h \
+    $$PWD/tracepointstation.h \
+    $$PWD/lidar.h
+
+SOURCES += \
+    $$PWD/car_status.cpp \
+    $$PWD/perceptionoutput.cpp \
+    $$PWD/lidar.cpp

+ 44 - 0
src/ui/xviz_civetweb/common/constants.h

@@ -0,0 +1,44 @@
+#pragma once
+#ifndef _IV_COMMON_CONSTANTS_
+#define _IV_COMMON_CONSTANTS_
+
+#include <common/car_status.h>
+namespace iv {
+
+
+const std::uint8_t SPEED_MAX = 30;						//车速上限
+const std::uint8_t BRAKING_PRESSURE_PERCENT_MAX = 50;	//刹车压力上限
+const std::uint8_t ACCELERATE_PERCENT_MAX = 1;			//油门开合度上限
+
+const std::uint8_t CONTROL_SPEED_TOLERANCE = 5;		//控制车速时容忍误差范围
+const std::uint8_t CONTROL_WHEEL_ANGLE_TOLERANCE = 5;	//控制方向盘时容忍误差范围
+
+const std::uint16_t WHEEL_ZERO = 0x1F4A;
+//static iv::CarStatus CarStatus_(new iv::CarStatusBasic);
+
+const float SPEED_RATIO = 0.08;		//实际车速和can中读出的车速比率
+
+const float Veh_Width = 2.1;		//车宽
+const float Veh_Lenth = 4.6;
+const float Esr_Offset = 0;		//ESR偏移量
+const float Esr_Y_Offset = 3.7;  //ESR纵向偏移量    每辆车不一样
+const float Lidar_Y_Offset = 0;  //前向激光雷达的纵向偏移量   每辆车不一样
+
+const std::uint8_t THREAD_EXECUTECONTROL_MAXNUM = 1;	//decition_executer 执行线程最大数量
+
+
+const double MaxValue = 1.7976931348623157E+308;  //     Represents the largest possible value of a System.Double. This field is constant.
+
+
+const double MinValue = -1.7976931348623157E+308; //     Represents the smallest possible value of a System.Double. This field is constant.
+
+
+
+
+
+
+}
+
+
+
+#endif // !_IV_COMMON_CONSTANTS_

+ 19 - 0
src/ui/xviz_civetweb/common/decition_type.h

@@ -0,0 +1,19 @@
+#pragma once
+#ifndef _IV_DECITION_DECITION_TYPE_
+#define _IV_DECITION_DECITION_TYPE_
+#include <common/boost.h>
+namespace iv {
+namespace decition {
+struct DecitionBasic {
+    float speed;				//车速
+    float wheel_angle;			//转向角度
+    float brake;				//刹车
+    float accelerator;			//油门
+    bool leftlamp;				//左转向灯
+    bool rightlamp;				//右转向灯
+};
+typedef boost::shared_ptr<DecitionBasic> Decition;	//决策
+}
+}
+#endif // !_IV_DECITION_DECITION_TYPE_
+

+ 109 - 0
src/ui/xviz_civetweb/common/gps_type.h

@@ -0,0 +1,109 @@
+#pragma once
+/*
+*GPS 惯导数据
+*/
+#ifndef _IV_COMMON_GPS_TYPE_
+#define _IV_COMMON_GPS_TYPE_
+
+#include "boost.h"
+namespace iv {
+    struct GPS_INS
+    {
+        int valid = 0xff;
+        int index = 0;	//gps点序号
+
+        double gps_lat = 0;//纬度
+        double gps_lng = 0;//经度
+
+        double gps_x = 0;
+        double gps_y = 0;
+        double gps_z = 0;
+
+        double ins_roll_angle = 0;	//横滚角 一般定义载体的右、前、上三个方向构成右手系,绕向前的轴旋转就是横滚角,绕向右的轴旋转就是俯仰角,绕向上的轴旋转就是航向角
+        double ins_pitch_angle = 0;	//俯仰角
+        double ins_heading_angle = 0;	//航向角
+
+        int ins_status = 0;	//惯导状态 4
+        int rtk_status = 0;	//rtk状态 6 -5 -3
+        int gps_satelites_num = 0;
+
+        //-----加速度--------------
+        double accel_x = 0;
+        double accel_y = 0;
+        double accel_z = 0;
+
+        //-------角速度------------
+        double ang_rate_x = 0;
+        double ang_rate_y = 0;
+        double ang_rate_z = 0;
+
+        //-----------方向速度--------------
+        double vel_N = 0;
+        double vel_E = 0;
+        double vel_D = 0;
+
+        int speed_mode = 0;
+        int mode2 = 0;
+        double speed = 0;			//速度  若导航点则为导航预设速度  若为当前点则为当前车速
+
+        int roadMode;
+        int runMode;
+        int roadSum;
+        int roadOri;
+
+        double mfLaneWidth = 3.5; // Current Lane Width
+
+        double mfDisToLaneLeft = 1.8; //Distance to Lane Left
+        int mnLaneChangeMark = 0; //1 to Left 0 not change   -1 to right
+        double mfDisToRoadLeft = 1.8; //Distance to Road Left
+        double mfRoadWidth = 3.5; // Road Width
+
+        bool mbInLaneAvoid = false; //if true suport In Lane Avoid
+        double gps_lat_avoidleft;
+        double gps_lng_avoidleft;
+        double gps_lat_avoidright;
+        double gps_lng_avoidright;
+        double gps_x_avoidleft = 0;
+        double gps_y_avoidleft = 0;
+        double gps_x_avoidright = 0;
+        double gps_y_avoidright = 0;
+
+        bool mbnoavoid = false; //If true this point is no avoid.
+        double mfCurvature = 0.0;
+
+        char mcreserved[10];
+        int mnreserved[5];
+        double mfreserved[2];
+
+
+
+    };
+
+    typedef boost::shared_ptr<iv::GPS_INS> GPSData;
+    class Point2D
+   {
+     public:
+        double x = 0, y = 0, speed=0,obs_speed_x=0,obs_speed_y=0;
+        int v1 = 0, v2 = 0;
+        int roadMode = 0;
+        int obs_type=0;
+
+
+        Point2D()
+       {
+           x = y = v1 = 0;
+       }
+
+        Point2D(double _x, double _y)
+       {
+           x = _x; y = _y;
+       }
+
+
+    };
+
+
+
+
+}
+#endif // !_IV_COMMON_GPS_TYPE_

+ 19 - 0
src/ui/xviz_civetweb/common/hmi_type.h

@@ -0,0 +1,19 @@
+#ifndef HMI_TYPE_H
+#define HMI_TYPE_H
+
+#include <common/boost.h>
+namespace iv {
+namespace hmi {
+struct HMIBasic {
+    bool mbPause = false;
+    bool mbBocheMode = false;
+    bool mbbusmode = false;
+    bool mbchemen = false;
+    bool mbjinguang = false;
+    bool mbyuanguang = false;
+};
+typedef boost::shared_ptr<HMIBasic> Decition;	//决策
+}
+}
+
+#endif // HMI_TYPE_H

+ 84 - 0
src/ui/xviz_civetweb/common/lidar.cpp

@@ -0,0 +1,84 @@
+#include "lidar.h"
+
+iv::Lidar::Lidar()
+{
+	Lidar_Grid = boost::shared_ptr<std::vector<iv::ObstacleBasic>>(new std::vector<iv::ObstacleBasic>);
+    Lidar_ = boost::shared_ptr<std::vector<iv::ObstacleBasic>>(new std::vector<iv::ObstacleBasic>);
+
+    std::shared_ptr<std::vector<iv::Perception::PerceptionOutput>> pertem(new std::vector<iv::Perception::PerceptionOutput>);
+    mper = pertem;
+}
+
+iv::Lidar::~Lidar()
+{
+}
+
+void iv::Lidar::copyfromlidar(iv::ObsLiDAR& obs)
+{
+    is_run = true;
+    if(mtx1.try_lock() == true)
+    {
+        Lidar_->clear();
+        Lidar_.swap(obs);
+        genggai1 = true;
+        mtx1.unlock();
+    }
+}
+void iv::Lidar::copylidarto(iv::ObsLiDAR& obs)
+{
+	if (genggai1 == true)
+	{
+        mtx1.lock();
+        obs->clear();
+        Lidar_.swap(obs);
+		genggai1 = false;
+		mtx1.unlock();
+	}
+}
+
+void iv::Lidar::copyfromlidarobs(iv::ObsLiDAR& obs)
+{
+    if(mtx2.try_lock() == true)
+    {
+        Lidar_Grid->clear();
+        Lidar_Grid.swap(obs);
+        genggai2 = true;
+        mtx2.unlock();
+    }
+}
+void iv::Lidar::copylidarobsto(iv::ObsLiDAR& obs)
+{
+	if (genggai2 == true)
+	{
+		mtx2.lock();
+		obs->clear();
+		Lidar_Grid.swap(obs);
+		genggai2 = false;
+		mtx2.unlock();
+	}
+}
+
+void iv::Lidar::copyfromlidarper(std::shared_ptr<std::vector<iv::Perception::PerceptionOutput> > & per)
+{
+    mMutexper.lock();
+    mper.swap(per);
+    mMutexper.unlock();
+}
+
+void iv::Lidar::copylidarperto(std::shared_ptr<std::vector<iv::Perception::PerceptionOutput> > & per)
+{
+ //   int nSize = mper->size();
+    mMutexper.lock();
+//    per.swap(mper);
+    mper.swap(per);
+    mMutexper.unlock();
+//    if(nSize > 0)qDebug("have per");
+}
+
+
+bool iv::Lidar::did_lidar_ok()
+{
+    bool temp = is_run;
+    is_run = false;
+    return temp;
+}

+ 39 - 0
src/ui/xviz_civetweb/common/lidar.h

@@ -0,0 +1,39 @@
+#pragma once
+#ifndef _IV_COMMON_LIDAR_
+#define _IV_COMMON_LIDAR_
+
+#include <common/boost.h>
+#include <boost/serialization/singleton.hpp>
+#include <common/obstacle_type.h>
+#include <common/car_status.h>
+
+#include <QMutex>
+
+#include "perceptionoutput.h"
+
+namespace iv {
+class Lidar : public boost::noncopyable {
+public:
+    Lidar();
+    ~Lidar();
+    bool genggai1 = false, genggai2 = false;
+    bool is_run = false;
+    boost::mutex mtx1, mtx2;
+    iv::ObsLiDAR Lidar_Grid;
+    iv::ObsLiDAR Lidar_;
+    QMutex mMutexper;
+    std::shared_ptr<std::vector<iv::Perception::PerceptionOutput>> mper;
+
+    void copyfromlidar(iv::ObsLiDAR& obs);
+    void copylidarto(iv::ObsLiDAR& obs);
+    void copyfromlidarobs(iv::ObsLiDAR& obs);
+    void copylidarobsto(iv::ObsLiDAR& obs);
+
+    void copyfromlidarper(std::shared_ptr<std::vector<iv::Perception::PerceptionOutput>> & per);
+    void copylidarperto(std::shared_ptr<std::vector<iv::Perception::PerceptionOutput>> & per);
+    bool did_lidar_ok();
+};
+typedef boost::serialization::singleton<iv::Lidar> LidarSingleton;
+}
+#define ServiceLidar iv::LidarSingleton::get_mutable_instance()
+#endif // !_IV_COMMON_LIDAR_

+ 136 - 0
src/ui/xviz_civetweb/common/logout.h

@@ -0,0 +1,136 @@
+/**
+* 用于输出log文件的类.
+*/
+
+
+#ifndef LOG_H      
+#define LOG_H      
+
+
+//log文件路径    
+#define LOG_FILE_NAME "log_319.txt"    
+
+//启用开关    
+#define LOG_ENABLE    
+
+#include <fstream>      
+#include <string>      
+#include <ctime>
+//#include <Windows.h>
+//#include <tchar.h>
+/*
+using namespace std;
+
+class CLog
+{
+public:
+    static void GetLogFilePath(CHAR* szPath)
+    {
+        GetModuleFileNameA(NULL, szPath, MAX_PATH);
+        memset(strrchr(szPath, _T('\\')), NULL, strlen(strrchr(szPath, _T('\\'))) * sizeof(CHAR));
+        strcat(szPath, "\\");
+        strcat(szPath, LOG_FILE_NAME);
+    }
+    //输出一个内容,可以是字符串(ascii)、整数、浮点数、布尔、枚举
+    //格式为:[2011-11-11 11:11:11] aaaaaaa并换行
+    template <class T>
+    static void WriteLog(T x)
+    {
+        CHAR szPath[MAX_PATH] = { 0 };
+        GetLogFilePath(szPath);
+
+        ofstream fout(szPath, ios::app);
+        fout.seekp(ios::end);
+        fout << GetSystemTime() << x << endl;
+        fout.close();
+    }
+
+    //输出2个内容,以等号连接。一般用于前面是一个变量的描述字符串,后面接这个变量的值
+    template<class T1, class T2>
+    static void WriteLog2(T1 x1, T2 x2)
+    {
+        CHAR szPath[MAX_PATH] = { 0 };
+        GetLogFilePath(szPath);
+        ofstream fout(szPath, ios::app);
+        fout.seekp(ios::end);
+        fout << GetSystemTime() << x1 << " = " << x2 << endl;
+        fout.close();
+    }
+
+    template<class T1, class T2, class T3, class T4, class T5, class T6 >
+    static void WriteLog6(T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, T6 x6)
+    {
+        CHAR szPath[MAX_PATH] = { 0 };
+        GetLogFilePath(szPath);
+        ofstream fout(szPath, ios::app);
+        fout.seekp(ios::end);
+        fout << GetSystemTime() << x1 << "  " << x2 << "  "
+                                << x3 << "  " << x4 << "  "
+                                << x5 << "  " << x6 << endl;
+        fout.close();
+    }
+
+    //输出一行当前函数开始的标志,宏传入__FUNCTION__
+    template <class T>
+    static void WriteFuncBegin(T x)
+    {
+        CHAR szPath[MAX_PATH] = { 0 };
+        GetLogFilePath(szPath);
+        ofstream fout(szPath, ios::app);
+        fout.seekp(ios::end);
+        fout << GetSystemTime() << "    --------------------" << x << "  Begin--------------------" << endl;
+        fout.close();
+    }
+
+    //输出一行当前函数结束的标志,宏传入__FUNCTION__
+    template <class T>
+    static void WriteFuncEnd(T x)
+    {
+        CHAR szPath[MAX_PATH] = { 0 };
+        GetLogFilePath(szPath);
+        ofstream fout(szPath, ios::app);
+        fout.seekp(ios::end);
+        fout << GetSystemTime() << "--------------------" << x << "  End  --------------------" << endl;
+        fout.close();
+    }
+
+
+private:
+    //获取本地时间,格式如"[2011-11-11 11:11:11] ";
+    static string GetSystemTime()
+    {
+        time_t tNowTime;
+        time(&tNowTime);
+        tm* tLocalTime = localtime(&tNowTime);
+        char szTime[30] = { '\0' };
+        strftime(szTime, 30, "[%Y-%m-%d %H:%M:%S] ", tLocalTime);
+        string strTime = szTime;
+        return strTime;
+    }
+
+};
+
+#ifdef LOG_ENABLE    
+
+//用下面这些宏来使用本文件    
+#define LOG(x)              CLog::WriteLog(x);          //括号内可以是字符串(ascii)、整数、浮点数、bool等    
+#define LOG2(x1,x2)     CLog::WriteLog2(x1,x2);    
+#define LOG6(x1,x2,x3,x4,x5,x6)		CLog::WriteLog6(x1,x2,x3,x4,x5,x6);
+#define LOG_FUNC        LOG(__FUNCTION__)               //输出当前所在函数名    
+#define LOG_LINE        LOG(__LINE__)                       //输出当前行号    
+#define LOG_FUNC_BEGIN  CLog::WriteFuncBegin(__FUNCTION__);     //形式如:[时间]"------------FuncName  Begin------------"    
+#define LOG_FUNC_END     CLog::WriteFuncEnd(__FUNCTION__);      //形式如:[时间]"------------FuncName  End------------"    
+
+#else    
+
+#define LOG(x)                  
+#define LOG2(x1,x2)         
+#define LOG6(x1,x2,x3,x4,x5,x6)
+#define LOG_FUNC            
+#define LOG_LINE            
+#define LOG_FUNC_BEGIN      
+#define LOG_FUNC_END        
+
+#endif    
+*/
+#endif      

+ 62 - 0
src/ui/xviz_civetweb/common/obstacle_type.h

@@ -0,0 +1,62 @@
+#pragma once
+#ifndef _IV_COMMON_OBSTACLE_TYPE_
+#define _IV_COMMON_OBSTACLE_TYPE_
+#include <vector>
+#include <common/boost.h>
+/**
+*障碍物类型
+*/
+namespace iv {
+const int grx = 250, gry = 500, centerx = 125, centery = 250;
+const double gridwide = 0.2;
+struct ObstacleBasic
+{
+    bool valid;
+    float nomal_x;
+    float nomal_y;
+    float nomal_z;
+
+    float speed_relative;
+    float speed_x;
+    float speed_y;
+    float speed_z;
+
+    float high;
+    float low;
+
+    int esr_ID;
+};
+
+typedef boost::shared_ptr<std::vector<iv::ObstacleBasic>> ObsLiDAR;
+typedef boost::shared_ptr<std::vector<iv::ObstacleBasic>> ObsRadar;
+typedef boost::shared_ptr<std::vector<iv::ObstacleBasic>> ObsCamera;
+typedef boost::shared_ptr<std::vector<iv::ObstacleBasic>>ObsRadarPointer;
+struct Obs_grid
+{
+    double high;
+    double low;
+    double obshight;
+    int pointcount;
+    int ob;//障碍物属性,0地面 ,1路沿,2障碍物
+};
+
+typedef Obs_grid LidarGrid;
+typedef Obs_grid* LidarGridPtr;
+
+struct array_360
+{
+    float x;
+    float y;
+    float z;
+};
+
+struct detect_info
+{
+    int light;
+};
+
+typedef detect_info CameraInfo;
+typedef detect_info* CameraInfoPtr;
+}
+
+#endif // !_IV_COMMON_OBSTACLE_TYPE_

+ 8 - 0
src/ui/xviz_civetweb/common/perceptionoutput.cpp

@@ -0,0 +1,8 @@
+#include "perceptionoutput.h"
+
+iv::Perception::PerceptionOutput::PerceptionOutput()
+{
+
+}
+
+

+ 55 - 0
src/ui/xviz_civetweb/common/perceptionoutput.h

@@ -0,0 +1,55 @@
+#ifndef PERCEPTIONOUTPUT_H
+#define PERCEPTIONOUTPUT_H
+
+namespace iv {
+namespace Perception {
+class Point3f
+{
+public:
+    float x;
+    float y;
+    float z;
+};
+class Point2f
+{
+public:
+    float x;
+    float y;
+};
+
+class PerceptionOutput
+{
+public:
+    PerceptionOutput();
+    Point3f location; /**<position of bbox center, measured in lidar or vehicle coordinate system, according to user's setting*/
+    Point3f direction; /**<direction of bbox, vector format, measured by the length edge direction, in lidar or vehicle coordinate system, according to user's setting*/
+    float yaw; /**<direction of bbox with roll pitch raw depictions, for simplicity, just yaw is usefull, coincident with "direction"*/
+    Point3f size; /**<size of bbox, length, width, height of box, length is always >= width*/
+    Point3f nearest_point; /**<position of nearest corner of bbox, measured in lidar or vehicle coordinate system, according to user's setting*/
+
+    int tracker_id; /**<tracker id for objects, same object in sequtial frames share the same id*/
+    float track_prob; /**<tracking association probability, confidence level (0~1), the higher, the better.*/
+
+    Point2f velocity; /**<relative speed of obstacles, measured in local vehicle coordinate system*/
+    Point2f acceleration; /**<relative acceleration of obstacles, measured in local vehicle coordinate system*/
+
+    Point2f velocity_abs; /**<speed of obstacles, measured in global coordinate system*/
+    Point2f acceleration_abs; /**<acceleration of obstacles, measured in global coordinate system*/
+    float angle_velocity; /**< angle velocity in radian*/
+
+    float life; /**<total current tracker life time, including visible and invisible ones, with unit seconds*/
+    float visible_life; /**<current tracker life time only considering visible tracks, with unit seconds*/
+    float robustness; /**< robustness analyzed by a historical sequential tracker frames, the smaller, the better.*/
+
+    int label; /**<type of obstacles, like pedestrain, bike, car, truck*/
+    float label_confidence; /**< confidence of classification*/
+
+    bool is_background; /**< if is background, the flag will be set true. */
+};
+
+}
+
+}
+
+
+#endif // PERCEPTIONOUTPUT_H

+ 74 - 0
src/ui/xviz_civetweb/common/tracepointstation.h

@@ -0,0 +1,74 @@
+#ifndef TRACEPOINTSTATION_H
+#define TRACEPOINTSTATION_H
+
+namespace iv {
+
+struct Station
+   {
+       int index;
+       GPS_INS station_location;
+       int map_index;
+   };
+
+class TracePoint
+        {
+      public:
+              double x = 0, y = 0, speed=0;
+             int v1 = 0, v2 = 0;
+             int roadMode = 0;
+
+             TracePoint()
+            {
+                x = y = v1 = 0;
+            }
+
+             TracePoint(double _x, double _y)
+            {
+                x = _x; y = _y;
+            }
+
+    };
+
+
+    class TrafficLight
+   {
+     public:
+        int leftColor = 0, rightColor = 0, straightColor=0, uturnColor=0;
+        int leftTime=0, rightTime=0 ,straightTime=0, uturnTime=0;
+
+        TrafficLight()
+       {
+           leftColor = 0, rightColor = 0, straightColor=0, uturnColor=0;
+           leftTime=0, rightTime=0 ,straightTime=0, uturnTime=0;
+       }
+
+    };
+
+    class StationCmd
+    {
+    public:
+        bool received;
+        uint32_t carID,carMode,emergencyStop,stationStop;
+        bool has_carID,has_carMode,has_emergencyStop,has_stationStop,mode_manual_drive;
+        uint32_t stationID[20];
+        GPS_INS  stationGps[20];
+        uint32_t stationTotalNum;
+        StationCmd()
+        {
+            received=false;
+            has_carID=false;
+            has_carMode=false;
+            has_emergencyStop=false;
+            has_stationStop=false;
+            mode_manual_drive=false;
+            carID=0;
+            carMode=0;
+            emergencyStop=0;
+            stationStop=0;
+            stationTotalNum=0;
+        }
+    };
+
+
+}
+#endif // TRACEPOINTSTATION_H

+ 20 - 0
src/ui/xviz_civetweb/common/vehiclestate_type.h

@@ -0,0 +1,20 @@
+#ifndef VEHICLESTATE_TYPE_H
+#define VEHICLESTATE_TYPE_H
+
+
+#include <common/boost.h>
+namespace iv {
+namespace decition {
+struct VehicleStateBasic {
+    float mfObs;
+    float mfRadarObs;
+    float mfLidarObs;
+    bool mbBocheEnable;
+    double decision_period;
+    bool mbBrainRunning;
+};
+typedef boost::shared_ptr<VehicleStateBasic> VehicleStatePtr;	//决策
+}
+}
+
+#endif // VEHICLESTATE_TYPE_H

+ 34 - 0
src/ui/xviz_civetweb/commoninclude.h

@@ -0,0 +1,34 @@
+#ifndef COMMONINCLUDE_H
+#define COMMONINCLUDE_H
+#include <thread>
+#include <vector>
+#include <qjsondocument.h>
+#include <qjsonobject.h>
+#include <QJsonArray>
+#include <QDebug>
+#include <QVector>
+#include "common/can_type.h"
+#include "common/decition_type.h"
+#include "common/vehiclestate_type.h"
+#include "common/hmi_type.h"
+#include "common/lidar.h"
+#include "common/obstacle_type.h"
+#include "common/constants.h"
+#include "common/perceptionoutput.h"
+#include "common/tracepointstation.h"
+#include "ivlog.h"
+#include "modulecomm.h"
+#include "gpsimu.pb.h"
+#include "radarobjectarray.pb.h"
+#include "decition.pb.h"
+#include "brainstate.pb.h"
+#include "canstate.pb.h"
+#include "fusionobject.pb.h"
+#include "fusionobjectarray.pb.h"
+#include "canstate.pb.h"
+#include "chassis.pb.h"
+#include "mmath.h"
+#include <pcl/visualization/cloud_viewer.h>
+#include <pcl/io/io.h>
+#include <pcl/io/pcd_io.h>
+#endif // COMMONINCLUDE_H

+ 875 - 0
src/ui/xviz_civetweb/datacluster.cpp

@@ -0,0 +1,875 @@
+#include "datacluster.h"
+DataCluster::DataCluster()
+{
+    ModuleFun funmap = std::bind(&DataCluster::UpdateMap,this,std::placeholders::_1, \
+                                 std::placeholders::_2,std::placeholders::_3,std::placeholders::_4, \
+                                 std::placeholders::_5);
+    mpamaptrace = iv::modulecomm::RegisterRecvPlus("tracemap",funmap);
+    //GPS接收注册
+    ModuleFun fungpsimu =std::bind(&DataCluster::UpdateGPSIMU,this,std::placeholders::_1, \
+                                   std::placeholders::_2,std::placeholders::_3, \
+                                   std::placeholders::_4, std::placeholders::_5);
+    mpagpsimu = iv::modulecomm::RegisterRecvPlus("hcp2_gpsimu",fungpsimu);
+    //lidarPoint
+    ModuleFun funlidarpc =std::bind(&DataCluster::UpdateLidarPc,this,std::placeholders::_1, \
+                                    std::placeholders::_2,std::placeholders::_3, \
+                                    std::placeholders::_4, std::placeholders::_5);
+    mpalidarpc = iv::modulecomm::RegisterRecvPlus("lidar_pc",funlidarpc);
+    //fusion OBS
+    ModuleFun funfusion =std::bind(&DataCluster::UpdateFusion,this,std::placeholders::_1, \
+                                   std::placeholders::_2,std::placeholders::_3, \
+                                   std::placeholders::_4, std::placeholders::_5);
+    mpafusion = iv::modulecomm::RegisterRecvPlus("li_ra_fusion",funfusion);
+    //brain
+    ModuleFun funbrain =std::bind(&DataCluster::UpdateDecition,this,std::placeholders::_1, \
+                                  std::placeholders::_2,std::placeholders::_3, \
+                                  std::placeholders::_4, std::placeholders::_5);
+    mpabrain = iv::modulecomm::RegisterRecvPlus("deciton",funbrain);
+    //chassis
+    ModuleFun funchassis =std::bind(&DataCluster::UpdateChassis,this,std::placeholders::_1, \
+                                    std::placeholders::_2,std::placeholders::_3,std::placeholders::_4, \
+                                    std::placeholders::_5);
+    mpachassis = iv::modulecomm::RegisterRecvPlus("chassis",funchassis);
+    //canstate
+    ModuleFun funcanstate =std::bind(&DataCluster::UpdateCanSt,this,std::placeholders::_1, \
+                                     std::placeholders::_2,std::placeholders::_3,std::placeholders::_4, \
+                                     std::placeholders::_5);
+    mpacanstate = iv::modulecomm::RegisterRecvPlus("canstate",funcanstate);
+    //brainState
+    ModuleFun funbrainstate =std::bind(&DataCluster::UpdateVehicleState,this, \
+                                       std::placeholders::_1,std::placeholders::_2,std::placeholders::_3, \
+                                       std::placeholders::_4,std::placeholders::_5);
+    mpaVechicleState = iv::modulecomm::RegisterRecvPlus("brainstate",funbrainstate);
+    //plantrace
+    ModuleFun funplantrace = std::bind(&DataCluster::UpdatePlanTrace,this,std::placeholders::_1, \
+                                       std::placeholders::_2,std::placeholders::_3,std::placeholders::_4, \
+                                       std::placeholders::_5);
+    mpaplantrace = iv::modulecomm::RegisterRecvPlus("plantrace",funplantrace);
+    
+    //obstraceleft
+    ModuleFun funplantrace_left = std::bind(&DataCluster::UpdatePlanTraceLeft,this, \
+                                            std::placeholders::_1,std::placeholders::_2, std::placeholders::_3, \
+                                            std::placeholders::_4,std::placeholders::_5);
+    mpaplantrace_left = iv::modulecomm::RegisterRecvPlus("obstraceleft",funplantrace_left);
+    //obstraceRight
+    ModuleFun funplantrace_right = std::bind(&DataCluster::UpdatePlanTraceRight,this, \
+                                             std::placeholders::_1,std::placeholders::_2, \
+                                             std::placeholders::_3,std::placeholders::_4,std::placeholders::_5);
+    mpaplantrace_right = iv::modulecomm::RegisterRecvPlus("obstraceright",funplantrace_right);
+    
+}
+DataCluster::~DataCluster()
+{
+    mpagpsimu = Q_NULLPTR;
+}
+
+void DataCluster::UpdateMap(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+    int gpsunitsize = sizeof(iv::GPS_INS);
+    int nMapSize = nSize/gpsunitsize;
+    //    std::cout<<"map size is "<<nMapSize<<std::endl;
+
+    if(nMapSize < 1)return;
+
+    bool bUpdate = false;
+    if(nMapSize != m_navigation_data.size())
+    {
+        bUpdate = true;
+    }
+    else
+    {
+        iv::GPS_INS * p = (iv::GPS_INS *)strdata;
+        if((p->gps_lat == m_navigation_data.at(0)->gps_lat)&&(p->ins_heading_angle == m_navigation_data.at(0)->ins_heading_angle))
+        {
+            //           qDebug("same map");
+            bUpdate = false;
+        }
+        else
+        {
+            bUpdate = true;
+        }
+    }
+
+    if(bUpdate)
+    {
+        int i;
+        mMutexNavi.lock();
+        m_navigation_data.clear();
+        for(i=0;i<nMapSize;i++)
+        {
+            iv::GPS_INS x;
+            memcpy(&x,strdata + i*gpsunitsize,gpsunitsize);
+            iv::GPSData data(new iv::GPS_INS);
+            *data = x;
+            m_navigation_data.push_back(data);
+        }
+        mnNaviUpdateTime = QDateTime::currentMSecsSinceEpoch();
+        mMutexNavi.unlock();
+
+        qDebug("map update");
+        //        if(m_navigation_data.size()>0)
+        //        {
+        //            mDataToUI.mInfo.is_mapLoad = 1;
+        //        }
+        //        else
+        //        {
+        //            mDataToUI.mInfo.is_mapLoad = 0;
+        //        }
+    }
+    else
+    {
+        //       qDebug("not need update");
+    }
+}
+
+
+void DataCluster::UpdateGPSIMU(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+    mMutexGPS.unlock();
+    iv::gps::gpsimu  xgpsimu;
+    if(!xgpsimu.ParseFromArray(strdata,nSize))
+    {
+        gIvlog->warn("UpdateGPSIMU parse error. nSize is %d",nSize);
+        return;
+    }
+    
+    iv::GPSData data(new iv::GPS_INS);
+    
+    data->gps_lat = xgpsimu.lat();
+    data->gps_lng = xgpsimu.lon();
+    data->ins_heading_angle = xgpsimu.heading();
+    data->rtk_status = xgpsimu.rtk_state();
+    data->ins_status = xgpsimu.ins_state();
+    data->vel_D = xgpsimu.vd();    //地向速度,单位(米/秒)
+    data->vel_E = xgpsimu.ve();    //东向速度,单位(米/秒)
+    data->vel_N = xgpsimu.vn();    //北向速度,单位(米/秒)
+    GaussProjCal(data->gps_lng,data->gps_lat,&data->gps_x,&data->gps_y);
+//    qDebug()<<data->gps_x<<data->gps_y;
+    ServiceCarStatus.mRTKStatus = data->rtk_status;
+    ServiceCarStatus.speed = data->speed;
+    ServiceCarStatus.location->gps_lat = data->gps_lat;
+    ServiceCarStatus.location->gps_lng = data->gps_lng;
+    ServiceCarStatus.location->ins_heading_angle = data->ins_heading_angle;
+    ServiceCarStatus.location->gps_x = data->gps_x;
+    ServiceCarStatus.location->gps_y = data->gps_y;
+    ServiceCarStatus.location->rtk_status = data->rtk_status;
+    ServiceCarStatus.location->ins_status = data->ins_status;
+    ServiceCarStatus.speed = sqrt(pow(data->vel_E,2)+pow(data->vel_N,2)) * 3.6;  //double pow(double x, double y) 返回 x 的 y 次幂,即 xy。
+
+    mMutexGPS.unlock();
+}
+
+void DataCluster::UpdateLidarPc(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+    if(nSize <=16)return;
+    unsigned int * pHeadSize = (unsigned int *)strdata;
+    if(*pHeadSize > nSize)
+    {
+        std::cout<<"ListenPointCloud data is small headsize ="<<*pHeadSize<<"  data size is"<<nSize<<std::endl;
+    }
+
+    pcl::PointCloud<pcl::PointXYZI>::Ptr point_cloud(
+                new pcl::PointCloud<pcl::PointXYZI>());
+    int nNameSize;
+    nNameSize = *pHeadSize - 4-4-8;
+    char * strName = new char[nNameSize+1];
+    strName[nNameSize] = 0;
+    memcpy(strName,(char *)((char *)strdata +4),nNameSize);
+    point_cloud->header.frame_id = strName;
+    memcpy(&point_cloud->header.seq,(char *)strdata+4+nNameSize,4);
+    memcpy(&point_cloud->header.stamp,(char *)strdata+4+nNameSize+4,8);
+    int nPCount = (nSize - *pHeadSize)/sizeof(pcl::PointXYZI);
+    int i;
+    pcl::PointXYZI * p;
+    p = (pcl::PointXYZI *)((char *)strdata + *pHeadSize);
+    for(i=0;i<nPCount;i++)
+    {
+        pcl::PointXYZI xp;
+        xp.x = p->x;
+        xp.y = p->y;
+        xp.z = p->z;
+        xp.intensity = p->intensity;
+        point_cloud->push_back(xp);
+        p++;
+    }
+    mMutexPointCloud.lock();
+    mpointCloud.points.resize(nPCount);
+    mpointCloud.points = point_cloud->points;
+    mMutexPointCloud.unlock();
+}
+
+void DataCluster::UpdateFusion(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+    iv::fusion::fusionobjectarray xfusionarray;
+    if(!xfusionarray.ParseFromArray(strdata,nSize))
+    {
+        gIvlog->warn("UpdateFusion Parse Error.");
+        return;
+    }
+    mMutexFusion.lock();
+    mfusionarray.CopyFrom(xfusionarray);
+    mbfusionUpdate = true;
+    mMutexFusion.unlock();
+    ServiceCarStatus.mLidarS = 10;
+}
+void DataCluster::UpdateDecition(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+    
+    iv::brain::decition xdecition;
+    if(!xdecition.ParseFromArray(strdata,nSize))
+    {
+        gIvlog->warn("ADCIntelligentVehicle::UpdateDecition parse errror. nSize is %d",nSize);
+        return;
+    }
+    //ServiceCarStatus.mfAcc = xdecition.accelerator();   //
+    ServiceCarStatus.mfAcc = xdecition.torque();          //
+    ServiceCarStatus.mfBrake = xdecition.brake();
+    ServiceCarStatus.mfWheel = xdecition.wheelangle();
+    ServiceCarStatus.mfttc = xdecition.ttc();
+    
+    //    mnTimeUpdateDecition = mTimeState.elapsed();
+}
+
+void DataCluster::UpdateChassis(const char *strdata, const unsigned int nSize, const unsigned int index, const QDateTime *dt, const char *strmemname)
+{
+    iv::chassis xchassis;
+    static int ncount = 0;
+    if(!xchassis.ParseFromArray(strdata,nSize))
+    {
+        std::cout<<"iv::decition::BrainDecition::UpdateChassis ParseFrom Array Error."<<std::endl;
+        return;
+    }
+    
+    if((xchassis.has_epsmode())&&(xchassis.epsmode() == 0))
+    {
+        ServiceCarStatus.mbRunPause = true;
+    }
+    
+    if((xchassis.has_soc()))
+    {
+        mfSOC = xchassis.soc();
+    }
+    
+}
+
+void DataCluster::UpdateCanSt(const char *strdata, const unsigned int nSize, const unsigned int index, const QDateTime *dt, const char *strmemname)
+{
+    iv::canstate::canstate recCanstate;
+    if(!recCanstate.ParseFromArray(strdata, nSize))
+    {
+        gIvlog->warn("ADCIntelligentVehicle::updateCanstate error");
+        return;
+    }
+
+    if(recCanstate.b_canstate())
+    {
+        //        gIvlog->debug("UpdateCANState<success>");
+        ServiceCarStatus.mbcanSt = 1;
+    }
+    else
+    {
+        //        gIvlog->debug("UpdateCANState<failed>size %d %s ");
+        ServiceCarStatus.mbcanSt = 0;
+    }
+}
+void DataCluster::UpdateVehicleState(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+    iv::brain::brainstate xbrainstate;
+    if(!xbrainstate.ParseFromArray(strdata,nSize))
+    {
+        gIvlog->warn("ADCIntelligentVehicle::UpdateVehicleState parse error,nSize is %d ",nSize);
+        return;
+    }
+    ServiceCarStatus.bocheEnable = xbrainstate.mbbocheenable();
+    ServiceCarStatus.mObs = xbrainstate.mfobs();
+    ServiceCarStatus.mLidarObs = xbrainstate.mflidarobs();
+    ServiceCarStatus.mRadarObs = xbrainstate.mfradarobs();
+    ServiceCarStatus.mbBrainRunning = xbrainstate.mbbrainrunning();
+    ServiceCarStatus.mbBrainCtring = xbrainstate.mbbrainrunning();
+    ServiceCarStatus.mdecition_period =  xbrainstate.decision_period();
+}
+void DataCluster::UpdatePlanTrace(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+    mMutexPlan.lock();
+    m_plan.clear();
+    int nplansize = nSize/sizeof(iv::TracePoint);
+    int npsize = sizeof(iv::TracePoint);
+    int i;
+    for(i=0;i<nplansize;i++)
+    {
+        iv::TracePoint x;
+        memcpy(&x,strdata + i*npsize,npsize);
+        m_plan.push_back(x);
+    }
+    mMutexPlan.unlock();
+}
+
+void DataCluster::UpdatePlanTraceLeft(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+    mMutexPlanLeft.lock();
+    m_plan_left.clear();
+    int nplansize = nSize/sizeof(iv::TracePoint);
+    if(nplansize < 1)
+        std::cout<<"UpdatePlanTrace_left size is 0................. "<<std::endl;
+    //        return;
+    int npsize = sizeof(iv::TracePoint);
+    int i;
+    for(i=0;i<nplansize;i++)
+    {
+        iv::TracePoint x;
+        memcpy(&x,strdata + i*npsize,npsize);
+        m_plan_left.push_back(x);
+    }
+    mMutexPlanLeft.unlock();
+}
+
+void DataCluster::UpdatePlanTraceRight(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+    mMutexPlanRight.lock();
+    m_plan_right.clear();
+    int nplansize = nSize/sizeof(iv::TracePoint);
+    if(nplansize < 1)
+        std::cout<<"UpdatePlanTrace_right size is 0................. "<<std::endl;
+    int npsize = sizeof(iv::TracePoint);
+    int i;
+    for(i=0;i<nplansize;i++)
+    {
+        iv::TracePoint x;
+        memcpy(&x,strdata + i*npsize,npsize);
+        m_plan_right.push_back(x);
+    }
+    mMutexPlanRight.unlock();
+}
+
+QJsonObject DataCluster::fillPoseData()
+{
+    mMutexGPS.lock();
+    QJsonObject objMapOri,objVehPose,objPoses;
+    QJsonArray arrOri,arrPosition;
+    objMapOri.insert("longitude",QJsonValue(ServiceCarStatus.location->gps_lng));
+    objMapOri.insert("latitude",QJsonValue(ServiceCarStatus.location->gps_lat));
+    objMapOri.insert("altitude",QJsonValue(0));//海拔数据
+    arrOri.insert(0,QJsonValue(0));
+    arrOri.insert(1,QJsonValue(0));
+    arrOri.insert(2,QJsonValue((90 - ServiceCarStatus.location->ins_heading_angle)*PI/180.0 ));
+    arrPosition.insert(0,QJsonValue(0));
+    arrPosition.insert(1,QJsonValue(0));
+    arrPosition.insert(2,QJsonValue(0));
+    objVehPose.insert("timestamp",QJsonValue(QDateTime::currentMSecsSinceEpoch()/100));
+    objVehPose.insert("map_origin",QJsonValue(objMapOri));
+    objVehPose.insert("position",QJsonValue(arrPosition));
+    objVehPose.insert("orientation",QJsonValue(arrOri));
+    objPoses.insert("/vehicle_pose",QJsonValue(objVehPose));
+    mMutexGPS.unlock();
+
+    //debug++++
+    if(0)
+    {
+        QJsonObject objUp,objOrign,objFrame;
+        QJsonArray arrUp;
+
+        objUp.insert("timestamp",QJsonValue(QDateTime::currentMSecsSinceEpoch()/100));
+        objUp.insert("poses",QJsonValue(objPoses));
+        arrUp.insert(0,QJsonValue(objUp));
+        objOrign.insert("update_type",QJsonValue("SNAPSHOT"));
+        objOrign.insert("updates",QJsonValue(arrUp));
+        objFrame.insert("type","xviz/state_update");
+        objFrame.insert("data",objOrign);
+
+        //        qDebug()<<objFrame.begin();
+        return objFrame;
+        //    baframe = QJsonDocument(objOrign).toJson();
+
+    }
+    //    debug++++
+    return objPoses;
+
+}
+
+QJsonObject DataCluster::fillLidarPC()
+{
+    QJsonObject objBase,objPoints,obj;
+    QJsonArray arrPoints,arrColors,arrLidarPoints;
+    int pointSize = 0;
+    mMutexPointCloud.lock();
+    pointSize = mpointCloud.points.size();
+    for(int i=0;i<pointSize;i++)
+    {
+        QJsonArray arrC,arrP;
+        arrP.append(QJsonValue(mpointCloud.points.at(i).y));
+        arrP.append(QJsonValue(-mpointCloud.points.at(i).x));
+        arrP.append(QJsonValue(mpointCloud.points.at(i).z+2));
+        //        arrC.append(QJsonValue(int(mpointCloud.points.at(i).intensity)*80%256));
+        arrC.append(QJsonValue(255));
+        arrC.append(QJsonValue(255));
+        arrC.append(QJsonValue(0));
+        arrColors.append(QJsonValue(arrC));
+        arrPoints.append(QJsonValue(arrP));
+    }
+    mMutexPointCloud.unlock();
+
+    objPoints.insert("colors",QJsonValue(arrColors));
+    objPoints.insert("points",QJsonValue(arrPoints));
+    objBase.insert("object_id",QJsonValue("pointcloud"));
+    objPoints.insert("base",QJsonValue(objBase));
+
+    arrLidarPoints.append(QJsonValue(objPoints));
+    obj.insert("points",QJsonValue(arrLidarPoints));
+    return obj;
+}
+
+//填充障碍物数据==TracePoint==Label==
+QJsonObject DataCluster::fillObsData()
+{
+    QJsonObject objPloygons;
+    QJsonArray arrPloygons;
+    int nsize;
+    iv::fusion::fusionobjectarray xfusionarray;
+    mMutexFusion.lock();
+    xfusionarray.CopyFrom(mfusionarray);
+    mMutexFusion.unlock();
+    nsize = xfusionarray.obj_size();
+
+    for(int a = 0; a < nsize; a++)
+    {
+        QJsonArray arrVertices,arrClass;
+        QJsonObject objBase,objStyle,objvertices;
+        QJsonArray arrVerticesElm1;
+        QJsonArray arrVerticesElm2;
+        QJsonArray arrVerticesElm3;
+        QJsonArray arrVerticesElm4;
+        QJsonArray arrVerticesElm5;
+        arrVerticesElm1.append(QJsonValue(xfusionarray.obj(a).centroid().y()-1));
+        arrVerticesElm1.append(QJsonValue(-xfusionarray.obj(a).centroid().x()+0.5));
+        arrVerticesElm1.append(QJsonValue(-1));
+        arrVerticesElm2.append(QJsonValue(xfusionarray.obj(a).centroid().y()-1));
+        arrVerticesElm2.append(QJsonValue(-xfusionarray.obj(a).centroid().x()-0.5));
+        arrVerticesElm2.append(QJsonValue(-1));
+        arrVerticesElm3.append(QJsonValue(xfusionarray.obj(a).centroid().y()+1));
+        arrVerticesElm3.append(QJsonValue(-xfusionarray.obj(a).centroid().x()-0.5));
+        arrVerticesElm3.append(QJsonValue(-1));
+        arrVerticesElm4.append(QJsonValue(xfusionarray.obj(a).centroid().y()+1));
+        arrVerticesElm4.append(QJsonValue(-xfusionarray.obj(a).centroid().x()+0.5));
+        arrVerticesElm4.append(QJsonValue(-1));
+        arrVerticesElm5.append(QJsonValue(xfusionarray.obj(a).centroid().y()-1));
+        arrVerticesElm5.append(QJsonValue(-xfusionarray.obj(a).centroid().x()+0.5));
+        arrVerticesElm5.append(QJsonValue(-1));
+        arrVertices.append(QJsonValue(arrVerticesElm1));
+        arrVertices.append(QJsonValue(arrVerticesElm2));
+        arrVertices.append(QJsonValue(arrVerticesElm3));
+        arrVertices.append(QJsonValue(arrVerticesElm4));
+        arrVertices.append(QJsonValue(arrVerticesElm5));
+
+        objvertices.insert("vertices",QJsonValue(arrVertices));
+
+        objBase.insert("object_id",QJsonValue(int(xfusionarray.obj(a).id())));
+        objStyle.insert("height",QJsonValue(1));
+        objBase.insert("style",QJsonValue(objStyle));
+        arrClass.append(QJsonValue("Car"));//TODO:leixing
+        objBase.insert("classes",QJsonValue(arrClass));
+
+        objvertices.insert("base",QJsonValue(objBase));
+
+        arrPloygons.append(QJsonValue(objvertices));
+    }
+    objPloygons.insert("polygons",QJsonValue(arrPloygons));
+    return objPloygons;
+}
+//填充障碍物预瞄点
+QJsonObject DataCluster::fillTrackPoint()
+{
+    int nsize;
+    QJsonArray arrCircles;
+    QJsonObject objCircles,objBase;
+    iv::fusion::fusionobjectarray xfusionarray;
+    mMutexFusion.lock();
+    xfusionarray.CopyFrom(mfusionarray);
+    mMutexFusion.unlock();
+    nsize = xfusionarray.obj_size();
+    for(int a = 0; a < nsize; a++)
+    {
+        QJsonArray arrPosition;
+        QJsonObject objTextElm;
+        arrPosition.append(QJsonValue(xfusionarray.obj(a).centroid().y()));
+        arrPosition.append(QJsonValue(-xfusionarray.obj(a).centroid().x()));
+        arrPosition.append(QJsonValue(2));
+        objTextElm.insert("center",QJsonValue(arrPosition));
+        objBase.insert("object_id",QJsonValue(QString::number(int(xfusionarray.obj(a).id()))));
+        objTextElm.insert("base",QJsonValue(objBase));
+        arrCircles.append(QJsonValue(objTextElm));
+    }
+    objCircles.insert("circles",QJsonValue(arrCircles));
+    return objCircles;
+}
+//填充障碍物标签数据
+QJsonObject DataCluster::fillObsLabel()
+{
+    int nsize;
+    QJsonArray arrText;
+    QJsonObject objText;
+    iv::fusion::fusionobjectarray xfusionarray;
+    mMutexFusion.lock();
+    xfusionarray.CopyFrom(mfusionarray);
+    mMutexFusion.unlock();
+    nsize = xfusionarray.obj_size();
+    for(int a = 0; a < nsize; a++)
+    {
+        QJsonArray arrPosition;
+        QJsonObject objTextElm;
+        arrPosition.append(QJsonValue(xfusionarray.obj(a).centroid().y()));
+        arrPosition.append(QJsonValue(-xfusionarray.obj(a).centroid().x()));
+        arrPosition.append(QJsonValue(2));
+        objTextElm.insert("position",QJsonValue(arrPosition));
+        objTextElm.insert("text",QJsonValue(QString::number(int(xfusionarray.obj(a).id()))));
+        arrText.append(QJsonValue(objTextElm));
+    }
+    objText.insert("texts",QJsonValue(arrText));
+    return objText;
+}
+//填充预测轨迹数据
+QJsonObject DataCluster::fillTrajectory()
+{
+    QJsonObject obj;
+
+    return obj;
+}
+
+//填充车辆预瞄轨迹数据
+QJsonObject DataCluster::fillVehTrajectory()
+{
+    QJsonObject objTrajectory,objVertices;
+    QJsonArray arrPolylinesk,arrVertices;
+    int size;
+
+    mMutexPlanRight.lock();
+    std::vector<iv::TracePoint> xplan(m_plan_right);
+    mMutexPlanRight.unlock();
+    size = xplan.size();
+    int minSize = 500;
+    size = size<minSize?size:minSize;
+    for(int i = 0; i < size; i++)
+    {
+        QJsonArray arrVerticesEle;
+        arrVerticesEle.insert(0,QJsonValue(xplan.at(i).y));
+        arrVerticesEle.insert(1,QJsonValue(-xplan.at(i).x));
+        arrVerticesEle.insert(2,QJsonValue(0));
+        arrVertices.insert(i,QJsonValue(arrVerticesEle));
+    }
+    objVertices.insert("vertices",QJsonValue(arrVertices));
+    arrPolylinesk.insert(0,QJsonValue(objVertices));
+    objTrajectory.insert("polylines",QJsonValue(arrPolylinesk));
+    //    qDebug()<<"VehTraj"<<objTrajectory;
+    return objTrajectory;
+}
+
+//填充序列曲线数据
+QJsonArray DataCluster::fillTimeSeries()
+{
+
+    QJsonArray arrTime_Series,arrStreams,arrDoubles;
+    QJsonObject objtimeSeries,objValues;
+    objtimeSeries.insert("timestamp",QJsonValue(QDateTime::currentMSecsSinceEpoch()/100));
+    arrStreams.append(QJsonValue("/vehicle/velocity"));
+    arrStreams.append(QJsonValue("/vehicle/acceleration"));
+    arrStreams.append(QJsonValue("/vehicle/wheel_angle"));
+    objtimeSeries.insert("streams",QJsonValue(arrStreams));
+    arrDoubles.append(QJsonValue(ServiceCarStatus.speed));
+    arrDoubles.append(QJsonValue(ServiceCarStatus.mfAcc>0?ServiceCarStatus.mfAcc:(-ServiceCarStatus.mfBrake)));
+    arrDoubles.append(QJsonValue(ServiceCarStatus.mfWheel));
+    objValues.insert("doubles",QJsonValue(arrDoubles));
+    objtimeSeries.insert("values",QJsonValue(objValues));
+    arrTime_Series.append(QJsonValue(objtimeSeries));
+
+    QJsonArray arrStreams1,arrStrings;
+    QJsonObject objtimeSeries1,objValues1;
+    objtimeSeries1.insert("timestamp",QJsonValue(QDateTime::currentMSecsSinceEpoch()/100));
+    arrStreams1.append(QJsonValue("/vehicle/autonomy_state"));
+    objtimeSeries1.insert("streams",QJsonValue(arrStreams1));
+    arrStrings.append(QJsonValue("autonomous"));
+    objValues1.insert("strings",QJsonValue(arrStrings));
+    objtimeSeries1.insert("values",QJsonValue(objValues1));
+    arrTime_Series.append(QJsonValue(objtimeSeries1));
+    return arrTime_Series;
+}
+
+QJsonObject DataCluster::fillPrimitives()
+{
+    QJsonObject objPrimtives;
+    objPrimtives.insert("/vehicle/trajectory",QJsonValue(fillVehTrajectory()));
+    objPrimtives.insert("/tracklets/objects",QJsonValue(fillObsData()));
+    objPrimtives.insert("/tracklets/label",QJsonValue(fillObsLabel()));
+    objPrimtives.insert("/tracklets/tracking_point",QJsonValue(fillTrackPoint()));
+    //    objPrimtives.insert("/lidar/points",QJsonValue(fillLidarPC()));
+    objPrimtives.insert("/tracklets/roadmap",QJsonValue(fillMapTrace()));
+    return objPrimtives;
+}
+
+QJsonObject DataCluster::fillPrimitivesTest()
+{
+    QJsonObject objPrimtives;
+
+    QJsonObject objTrajectory,objVertices;
+    QJsonArray arrPolylinesk,arrVertices;
+    int size;
+
+    mMutexPlanRight.lock();
+    std::vector<iv::TracePoint> xplan(m_plan_right);
+    mMutexPlanRight.unlock();
+    size = xplan.size();
+    for(int i = 0; i < 300; i++)
+    {
+        QJsonArray arrVerticesEle;
+        arrVerticesEle.insert(0,QJsonValue(xplan.at(i).y));
+        arrVerticesEle.insert(1,QJsonValue(-xplan.at(i).x));
+        arrVerticesEle.insert(2,QJsonValue(0));
+        arrVertices.insert(i,QJsonValue(arrVerticesEle));
+    }
+    objVertices.insert("vertices",QJsonValue(arrVertices));
+    arrPolylinesk.insert(0,QJsonValue(objVertices));
+    objTrajectory.insert("polylines",QJsonValue(arrPolylinesk));
+
+    //zhangaiwu
+    QJsonObject objPloygons;
+    QJsonArray arrPloygons;
+
+    QJsonArray arrVertices1,arrClass;
+    QJsonObject objBase,objStyle,objvertices;
+    QJsonArray arrVerticesElm1;
+    QJsonArray arrVerticesElm2;
+    QJsonArray arrVerticesElm3;
+    QJsonArray arrVerticesElm4;
+    QJsonArray arrVerticesElm5;
+    double x,y,x1,x2,x3,y1,y2,y3;
+    double r = -ServiceCarStatus.location->ins_heading_angle*PI/180;
+    x = xplan.at(100).x;
+    y = xplan.at(100).y;
+
+    x1 = x+2*cos(r);
+    y1 = y + 2*sin(r);
+    x2 = x-5*sin(r)+2*cos(r);
+    y2 = 2*sin(r)+y+5*cos(r);
+    x3 = x-5*sin(r);
+    y3 = y+5*cos(r);
+
+    //    arrVerticesElm1.append(QJsonValue(xplan.at(100).y));
+    //    arrVerticesElm1.append(QJsonValue(-xplan.at(100).x+0.8));
+    //    arrVerticesElm1.append(QJsonValue(-1));
+    //    arrVerticesElm2.append(QJsonValue(xplan.at(100).y));
+    //    arrVerticesElm2.append(QJsonValue(-xplan.at(100).x-0.8));
+    //    arrVerticesElm2.append(QJsonValue(-1));
+    //    arrVerticesElm3.append(QJsonValue(xplan.at(130).y));
+    //    arrVerticesElm3.append(QJsonValue(-xplan.at(100).x-0.8));
+    //    arrVerticesElm3.append(QJsonValue(-1));
+    //    arrVerticesElm4.append(QJsonValue(xplan.at(130).y));
+    //    arrVerticesElm4.append(QJsonValue(-xplan.at(100).x+0.8));
+    //    arrVerticesElm4.append(QJsonValue(-1));
+    //    arrVerticesElm5.append(QJsonValue(xplan.at(100).y));
+    //    arrVerticesElm5.append(QJsonValue(-xplan.at(100).x+0.8));
+    //    arrVerticesElm5.append(QJsonValue(-1));
+    arrVerticesElm1.append(QJsonValue(y));
+    arrVerticesElm1.append(QJsonValue(-x));
+    arrVerticesElm1.append(QJsonValue(-1));
+    arrVerticesElm2.append(QJsonValue(y1));
+    arrVerticesElm2.append(QJsonValue(-x1));
+    arrVerticesElm2.append(QJsonValue(-1));
+    arrVerticesElm3.append(QJsonValue(y2));
+    arrVerticesElm3.append(QJsonValue(-x2));
+    arrVerticesElm3.append(QJsonValue(-1));
+    arrVerticesElm4.append(QJsonValue(y3));
+    arrVerticesElm4.append(QJsonValue(-x3));
+    arrVerticesElm4.append(QJsonValue(-1));
+    //    arrVerticesElm5.append(QJsonValue(y));
+    //    arrVerticesElm5.append(QJsonValue(-x));
+    //    arrVerticesElm5.append(QJsonValue(-1));
+    arrVertices1.append(QJsonValue(arrVerticesElm1));
+    arrVertices1.append(QJsonValue(arrVerticesElm2));
+    arrVertices1.append(QJsonValue(arrVerticesElm3));
+    arrVertices1.append(QJsonValue(arrVerticesElm4));
+    //    arrVertices1.append(QJsonValue(arrVerticesElm5));
+
+    objvertices.insert("vertices",QJsonValue(arrVertices1));
+    objBase.insert("object_id",QJsonValue(1));
+    objStyle.insert("height",QJsonValue(1));
+    objBase.insert("style",QJsonValue(objStyle));
+    arrClass.append(QJsonValue("Car"));//TODO:leixing
+    objBase.insert("classes",QJsonValue(arrClass));
+
+    objvertices.insert("base",QJsonValue(objBase));
+
+    arrPloygons.append(QJsonValue(objvertices));
+
+    objPloygons.insert("polygons",QJsonValue(arrPloygons));
+    //tracking point
+    QJsonArray arrCircles;
+    QJsonObject objCircles;
+
+    QJsonArray arrPosition;
+    QJsonObject objTextElm,objBase1;
+    arrPosition.append(QJsonValue(xplan.at(100).y));
+    arrPosition.append(QJsonValue(-xplan.at(100).x));
+    arrPosition.append(QJsonValue(-1));
+    objTextElm.insert("center",QJsonValue(arrPosition));
+    objBase1.insert("object_id",QJsonValue(1));
+    objTextElm.insert("base",QJsonValue(objBase1));
+    arrCircles.append(QJsonValue(objTextElm));
+    objCircles.insert("circles",QJsonValue(arrCircles));
+
+    //label
+
+
+    objPrimtives.insert("/vehicle/trajectory",QJsonValue(objTrajectory));
+    objPrimtives.insert("/tracklets/objects",QJsonValue(objPloygons));
+    //    objPrimtives.insert("/tracklets/label",QJsonValue());
+    objPrimtives.insert("/tracklets/tracking_point",QJsonValue(objCircles));
+    objPrimtives.insert("/tracklets/roadmap",QJsonValue(fillMapTrace()));
+    return objPrimtives;
+}
+QJsonObject DataCluster::fillMapTrace()
+{
+    QJsonObject objTrajectory,objVerticesL,objVerticesR;
+    QJsonArray arrPolylinesk,arrVerticesL,arrVerticesR;
+    int size;
+
+    std::vector<iv::GPSData> navigation_data;
+    mMutexNavi.lock();
+    navigation_data = m_navigation_data;
+    mMutexNavi.unlock();
+
+    double * x0, * y0, * lng, * x1, * y1, * x2, * y2;
+    std::shared_ptr<double> ptrx0,ptry0,ptrlng,ptrx1,ptry1,ptrx2,ptry2;
+    int sizeN = navigation_data.size();
+    if(!sizeN)
+        qDebug()<<"no map";
+    else
+    {
+        x0 = new double[sizeN];
+        y0 = new double[sizeN];
+        lng = new double[sizeN];
+        x1 = new double[sizeN];
+        y1 = new double[sizeN];
+        x2 = new double[sizeN];
+        y2 = new double[sizeN];
+
+        ptrx0.reset(x0);
+        ptry0.reset(y0);
+        ptrlng.reset(lng);
+        ptrx1.reset(x1);
+        ptry1.reset(y1);
+        ptrx2.reset(x2);
+        ptry2.reset(y2);
+        double xx = 0, yy = 0;
+        double sumx = 0, sumy = 0;//, ave_x = 0, ave_y = 0;
+        int sizeN = navigation_data.size();
+        int x_max = 0, y_max = 0;//数组里的最大值
+        int x_min = 0x3f3f3f3f, y_min = 0x3f3f3f3f;//inf为 #define inf 0x3f3f3f3f
+        double k1, k2;
+
+
+        //路径点的预处理
+        for (int i = 0; i < sizeN; i++)
+        {
+            x0[i] = navigation_data[i]->gps_x;
+            y0[i] = navigation_data[i]->gps_y;
+            lng[i] = navigation_data[i]->ins_heading_angle;
+            sumx = sumx + navigation_data[i]->gps_x;
+            sumy = sumy + navigation_data[i]->gps_y;
+            if (x0[i] > x_max) {
+                x_max = x0[i];
+                //max_x_pos = i;
+            }
+            if (x0[i] < x_min) {
+                x_min = x0[i];
+                //min_x_pos = i;
+            }
+
+            if (y0[i] > y_max) {
+                y_max = y0[i];
+                //max_y_pos = i;
+            }
+            if (y0[i] < y_min) {
+                y_min = y0[i];
+                //min_y_pos = i;
+            }
+        }
+        // TODO: add mutexlock
+        x0[0] = ServiceCarStatus.location->gps_x;
+        y0[0] = ServiceCarStatus.location->gps_y;
+        //          std::cout<<"x = "<<x0[0]<<" y= "<<y0[0]<<std::endl;
+        lng[0] = ServiceCarStatus.location->ins_heading_angle;
+        //根据标定原点的选取,对路径点进行转化
+        for (int i = 1; i < sizeN; i++)
+        {
+            //         if(i == 1)std::cout<<" x1 = "<<x0[i]<<std::endl;
+            x0[i] = x0[i] - x0[0];
+            y0[i] = y0[i] - y0[0];
+            xx = x0[i];
+            yy = y0[i];
+            x0[i] = xx * cos(lng[0] * PI / 180) - yy * sin(lng[0] * PI / 180);
+            y0[i] = xx * sin(lng[0] * PI / 180) + yy * cos(lng[0] * PI / 180);
+            k1 = sin((90 + (lng[i] - lng[0])) * PI / 180);
+            k2 = cos((90 + (lng[i] - lng[0])) * PI / 180);
+#if 0
+            x1[i] = x0[i] + k1 * 5;
+            y1[i] = y0[i] + k2 * 5;
+            x2[i] = x0[i] - k1 * 5;
+            y2[i] = y0[i] - k2 * 5;
+#else
+            x1[i] = x0[i] + k1 * 1.75;
+            y1[i] = y0[i] + k2 * 1.75;
+            x2[i] = x0[i] - k1 * 1.75;
+            y2[i] = y0[i] - k2 * 1.75;
+#endif
+        }
+        x1[0] = x1[1];
+        y1[0] = y1[1];
+        x2[0] = x2[1];
+        y2[0] = y2[1];
+
+        int maxSize = 2000;
+        size = sizeN < maxSize ? sizeN : maxSize;
+        for(int i = 0; i < sizeN; i++)
+        {
+            QJsonArray arrVerticesEleL;
+            arrVerticesEleL.insert(0,QJsonValue(y1[i]));
+            arrVerticesEleL.insert(1,QJsonValue(-x1[i]));
+            arrVerticesEleL.insert(2,QJsonValue(0));
+            arrVerticesL.insert(i,QJsonValue(arrVerticesEleL));
+            QJsonArray arrVerticesEleR;
+            arrVerticesEleR.insert(0,QJsonValue(y2[i]));
+            arrVerticesEleR.insert(1,QJsonValue(-x2[i]));
+            arrVerticesEleR.insert(2,QJsonValue(0));
+            arrVerticesR.insert(i,QJsonValue(arrVerticesEleR));
+        }
+        objVerticesL.insert("vertices",QJsonValue(arrVerticesL));
+        arrPolylinesk.insert(0,QJsonValue(objVerticesL));
+        objVerticesR.insert("vertices",QJsonValue(arrVerticesR));
+        arrPolylinesk.insert(1,QJsonValue(objVerticesR));
+        objTrajectory.insert("polylines",QJsonValue(arrPolylinesk));
+        //    qDebug()<<"VehTraj"<<objTrajectory;
+    }
+    return objTrajectory;
+}
+QJsonObject DataCluster::fillFrame()
+{
+    QJsonArray arrUpdates,arrTimeSeries;
+    QJsonObject objData,objFrame;
+    QJsonObject objposeData,objPriData,objUpdates;
+    objposeData = fillPoseData();
+    objPriData = fillPrimitivesTest();
+    arrTimeSeries = fillTimeSeries();
+    objUpdates.insert("timestamp",QJsonValue(QDateTime::currentMSecsSinceEpoch()/100));
+    objUpdates.insert("poses",QJsonValue(objposeData));
+    objUpdates.insert("primitives",QJsonValue(objPriData));
+    objUpdates.insert("time_series",QJsonValue(arrTimeSeries));
+    arrUpdates.insert(0,QJsonValue(objUpdates));
+
+    objData.insert("update_type",QJsonValue("SNAPSHOT"));
+    objData.insert("updates",QJsonValue(arrUpdates));
+
+    objFrame.insert("type",QJsonValue("xviz/state_update"));
+    objFrame.insert("data",QJsonValue(objData));
+
+    //    qDebug()<<"frame: "<<objFrame;
+    return objFrame;
+}
+

+ 96 - 0
src/ui/xviz_civetweb/datacluster.h

@@ -0,0 +1,96 @@
+#ifndef DATACLUSTER_H
+#define DATACLUSTER_H
+#include "commoninclude.h"
+#define PI 3.14
+
+extern iv::Ivlog * gIvlog;
+
+class DataCluster
+{
+public:
+    DataCluster();
+    ~DataCluster();
+//    QByteArray bameta;
+//    QByteArray baframe;
+
+private:
+    //map
+    QMutex mMutexNavi;
+    std::vector<iv::GPSData> m_navigation_data;
+    qint64 mnNaviUpdateTime = 0;
+    //gps
+    QMutex mMutexGPS;
+    //fusion
+    QMutex mMutexFusion;
+    iv::fusion::fusionobjectarray mfusionarray;
+    std::string mvobsStype[3] =  {"Car","Pedestrian","Others"};
+    bool mbfusionUpdate = false;
+    //chassis
+    float mfSOC = 0;
+    //plantTrace
+    QMutex mMutexPlan,mMutexPlanLeft,mMutexPlanRight;
+    std::vector<iv::TracePoint> m_plan,m_plan_left,m_plan_right;
+    //lidar pc
+    QMutex mMutexPointCloud;
+    pcl::PointCloud<pcl::PointXYZI> mpointCloud;
+    /******** ShareMem section START *******/
+    void * mpamaptrace = Q_NULLPTR;
+    void * mpagpsimu = Q_NULLPTR;
+    void * mpalidarpc = Q_NULLPTR;
+    void * mpafusion = Q_NULLPTR;
+    void * mpabrain = Q_NULLPTR;
+    void * mpachassis = Q_NULLPTR;
+    void * mpacanstate = Q_NULLPTR;
+    void * mpaVechicleState = Q_NULLPTR;
+    void * mpaplantrace = Q_NULLPTR;
+    void * mpaplantrace_left = Q_NULLPTR;
+    void * mpaplantrace_right = Q_NULLPTR;
+    void UpdateMap(const char * strdata,const unsigned int nSize,const unsigned int index, \
+                      const QDateTime * dt,const char * strmemname);
+    void UpdateGPSIMU(const char * strdata,const unsigned int nSize,const unsigned int index, \
+                      const QDateTime * dt,const char * strmemname);
+    void UpdateLidarPc(const char * strdata,const unsigned int nSize,const unsigned int index, \
+                      const QDateTime * dt,const char * strmemname);
+    void UpdateFusion(const char * strdata,const unsigned int nSize,const unsigned int index, \
+                      const QDateTime * dt,const char * strmemname);
+    void UpdateDecition(const char * strdata,const unsigned int nSize,const unsigned int index, \
+                      const QDateTime * dt,const char * strmemname);
+    void UpdateChassis(const char * strdata,const unsigned int nSize,const unsigned int index, \
+                      const QDateTime * dt,const char * strmemname);
+    void UpdateCanSt(const char * strdata,const unsigned int nSize,const unsigned int index, \
+                      const QDateTime * dt,const char * strmemname);
+    void UpdateVehicleState(const char * strdata,const unsigned int nSize,const unsigned int index, \
+                      const QDateTime * dt,const char * strmemname);
+    void UpdatePlanTrace(const char * strdata,const unsigned int nSize,const unsigned int index, \
+                      const QDateTime * dt,const char * strmemname);
+    void UpdatePlanTraceLeft(const char * strdata,const unsigned int nSize,const unsigned int index, \
+                      const QDateTime * dt,const char * strmemname);
+    void UpdatePlanTraceRight(const char * strdata,const unsigned int nSize,const unsigned int index, \
+                      const QDateTime * dt,const char * strmemname);
+    /********ShareMem section END*******/
+
+    /********Json Frame Data Section Start *******/
+    QJsonObject fillPoseData();
+    //填充障碍物数据
+    QJsonObject fillObsData();
+    //填充障碍物预瞄点
+    QJsonObject fillTrackPoint();
+    //填充站该无标签数据
+    QJsonObject fillObsLabel();
+    //填充预测轨迹数据
+    QJsonObject fillTrajectory();
+    //填充车辆预瞄轨迹数据
+    QJsonObject fillVehTrajectory();
+    //填充序列曲线数据
+    QJsonArray fillTimeSeries();
+    QJsonObject fillPrimitives();
+    QJsonObject fillPrimitivesTest();
+    QJsonObject fillLidarPC();
+    QJsonObject fillMapTrace();
+public:
+    QJsonObject fillFrame();
+    /********Json Frame Data Section END *******/
+
+};
+
+#endif // DATACLUSTER_H

+ 2 - 0
src/ui/xviz_civetweb/main.cpp

@@ -7,6 +7,8 @@
 
 #define DOCUMENT_ROOT "./frontend/dist"
 
+iv::Ivlog * gIvlog;
+
 int main(int argc, char *argv[])
 {
     QCoreApplication a(argc, argv);

+ 76 - 0
src/ui/xviz_civetweb/mmath.cpp

@@ -0,0 +1,76 @@
+#include "mmath.h"
+
+//高斯投影由经纬度(Unit:DD)反算大地坐标(含带号,Unit:Metres)
+void GaussProjCal(double longitude, double latitude, double *X, double *Y)
+{
+    int ProjNo = 0; int ZoneWide; ////带宽
+    double longitude1, latitude1, longitude0, latitude0, X0, Y0, xval, yval;
+    double a, f, e2, ee, NN, T, C, A, M, iPI;
+    iPI = 0.0174532925199433; ////3.1415926535898/180.0;
+    ZoneWide = 6; ////6度带宽
+    a = 6378245.0; f = 1.0 / 298.3; //54年北京坐标系参数
+                                    ////a=6378140.0; f=1/298.257; //80年西安坐标系参数
+    ProjNo = (int)(longitude / ZoneWide);
+    longitude0 = ProjNo * ZoneWide + ZoneWide / 2;
+    longitude0 = longitude0 * iPI;
+    latitude0 = 0;
+    longitude1 = longitude * iPI; //经度转换为弧度
+    latitude1 = latitude * iPI; //纬度转换为弧度
+    e2 = 2 * f - f * f;
+    ee = e2 * (1.0 - e2);
+    NN = a / sqrt(1.0 - e2 * sin(latitude1)*sin(latitude1));
+    T = tan(latitude1)*tan(latitude1);
+    C = ee * cos(latitude1)*cos(latitude1);
+    A = (longitude1 - longitude0)*cos(latitude1);
+    M = a * ((1 - e2 / 4 - 3 * e2*e2 / 64 - 5 * e2*e2*e2 / 256)*latitude1 - (3 * e2 / 8 + 3 * e2*e2 / 32 + 45 * e2*e2
+        *e2 / 1024)*sin(2 * latitude1)
+        + (15 * e2*e2 / 256 + 45 * e2*e2*e2 / 1024)*sin(4 * latitude1) - (35 * e2*e2*e2 / 3072)*sin(6 * latitude1));
+    xval = NN * (A + (1 - T + C)*A*A*A / 6 + (5 - 18 * T + T * T + 72 * C - 58 * ee)*A*A*A*A*A / 120);
+    yval = M + NN * tan(latitude1)*(A*A / 2 + (5 - T + 9 * C + 4 * C*C)*A*A*A*A / 24
+        + (61 - 58 * T + T * T + 600 * C - 330 * ee)*A*A*A*A*A*A / 720);
+    X0 = 1000000L * (ProjNo + 1) + 500000L;
+    Y0 = 0;
+    xval = xval + X0; yval = yval + Y0;
+    *X = xval;
+    *Y = yval;
+}
+
+//高斯投影由大地坐标(Unit:Metres)反算经纬度(Unit:DD)
+void GaussProjInvCal(double X, double Y, double *longitude, double *latitude)
+{
+    int ProjNo; int ZoneWide; ////带宽
+    double longitude1, latitude1, longitude0, latitude0, X0, Y0, xval, yval;
+    double e1, e2, f, a, ee, NN, T, C, M, D, R, u, fai, iPI;
+    iPI = 0.0174532925199433; ////3.1415926535898/180.0;
+    a = 6378245.0; f = 1.0 / 298.3; //54年北京坐标系参数
+    ////a=6378140.0; f=1/298.257; //80年西安坐标系参数
+    ZoneWide = 6; ////6度带宽
+    ProjNo = (int)(X / 1000000L); //查找带号
+    longitude0 = (ProjNo - 1) * ZoneWide + ZoneWide / 2;
+    longitude0 = longitude0 * iPI; //中央经线
+    X0 = ProjNo * 1000000L + 500000L;
+    Y0 = 0;
+    xval = X - X0; yval = Y - Y0; //带内大地坐标
+    e2 = 2 * f - f * f;
+    e1 = (1.0 - sqrt(1 - e2)) / (1.0 + sqrt(1 - e2));
+    ee = e2 / (1 - e2);
+    M = yval;
+    u = M / (a*(1 - e2 / 4 - 3 * e2*e2 / 64 - 5 * e2*e2*e2 / 256));
+    fai = u + (3 * e1 / 2 - 27 * e1*e1*e1 / 32)*sin(2 * u) + (21 * e1*e1 / 16 - 55 * e1*e1*e1*e1 / 32)*sin(
+                4 * u)
+            + (151 * e1*e1*e1 / 96)*sin(6 * u) + (1097 * e1*e1*e1*e1 / 512)*sin(8 * u);
+    C = ee * cos(fai)*cos(fai);
+    T = tan(fai)*tan(fai);
+    NN = a / sqrt(1.0 - e2 * sin(fai)*sin(fai));
+    R = a * (1 - e2) / sqrt((1 - e2 * sin(fai)*sin(fai))*(1 - e2 * sin(fai)*sin(fai))*(1 - e2 * sin
+                                                                                       (fai)*sin(fai)));
+    D = xval / NN;
+    //计算经度(Longitude) 纬度(Latitude)
+    longitude1 = longitude0 + (D - (1 + 2 * T + C)*D*D*D / 6 + (5 - 2 * C + 28 * T - 3 * C*C + 8 * ee + 24 * T*T)*D
+                               *D*D*D*D / 120) / cos(fai);
+    latitude1 = fai - (NN*tan(fai) / R)*(D*D / 2 - (5 + 3 * T + 10 * C - 4 * C*C - 9 * ee)*D*D*D*D / 24
+                                         + (61 + 90 * T + 298 * C + 45 * T*T - 256 * ee - 3 * C*C)*D*D*D*D*D*D / 720);
+    //转换为度 DD
+    *longitude = longitude1 / iPI;
+    *latitude = latitude1 / iPI;
+}

+ 10 - 0
src/ui/xviz_civetweb/mmath.h

@@ -0,0 +1,10 @@
+#ifndef MMATH_H
+#define MMATH_H
+#include <math.h>
+
+//高斯投影由经纬度(Unit:DD)反算大地坐标(含带号,Unit:Metres)
+void GaussProjCal(double longitude, double latitude, double *X, double *Y);
+
+//高斯投影由大地坐标(Unit:Metres)反算经纬度(Unit:DD)
+void GaussProjInvCal(double X, double Y, double *longitude, double *latitude);
+#endif // MMATH_H

+ 36 - 24
src/ui/xviz_civetweb/wshandler.cpp

@@ -1,12 +1,7 @@
 #include "wshandler.h"
 
-
-#include <iostream>
-#include <QFile>
-
 WSHandler::WSHandler()
 {
-
 }
 
 WSHandler::~WSHandler()
@@ -16,14 +11,14 @@ WSHandler::~WSHandler()
 }
 
 bool WSHandler::handleConnection(CivetServer *server,
-                              const struct mg_connection *conn)
+                                 const struct mg_connection *conn)
 {
     std::cout<<"WS Connected."<<std::endl;
     return true;
 }
 
 void WSHandler::handleReadyState(CivetServer *server,
-                              struct mg_connection *conn)
+                                 struct mg_connection *conn)
 {
 
     std::cout<<"WS Ready"<<std::endl;
@@ -32,16 +27,16 @@ void WSHandler::handleReadyState(CivetServer *server,
 
 }
 bool WSHandler::handleData(CivetServer *server,
-                        struct mg_connection *conn,
-                        int bits,
-                        char *data,
-                        size_t data_len)
+                           struct mg_connection *conn,
+                           int bits,
+                           char *data,
+                           size_t data_len)
 {
     return true;
 }
 
 void WSHandler::handleClose(CivetServer *server,
-                         const struct mg_connection *conn)
+                            const struct mg_connection *conn)
 {
     std::cout<<"WS Close "<<std::endl;
 }
@@ -50,25 +45,33 @@ void WSHandler::handleClose(CivetServer *server,
 void WSHandler::ThreadSend(mg_connection *conn)
 {
     std::cout<<"Thread send running."<<std::endl;
+    QByteArray bameta;
+    QByteArray baframe;
     QFile xFile;
-    xFile.setFileName("/home/nvidia/metadata.json");
+    xFile.setFileName("/home/nvidia/frame/1-frame.json");
     if(!xFile.open(QIODevice::ReadOnly))
     {
         std::cout<<"Read meta File Fail."<<std::endl;
         return;
     }
-    QByteArray bameta = xFile.readAll();
+    bameta = xFile.readAll();
     xFile.close();
-    xFile.setFileName("/home/nvidia/frame.json");
-    if(!xFile.open(QIODevice::ReadOnly))
+
+    //ceshi
+    if(0)
     {
-        std::cout<<"Read frame File Fail."<<std::endl;
-        return;
+        xFile.setFileName("/home/nvidia/frame/2-frame.json");
+        if(!xFile.open(QIODevice::ReadOnly))
+        {
+            std::cout<<"Read frame File Fail."<<std::endl;
+            return;
+        }
+        baframe = xFile.readAll();
+        xFile.close();
     }
-    QByteArray baframe = xFile.readAll();
-    xFile.close();
-
-    int nsend = mg_websocket_write(conn, MG_WEBSOCKET_OPCODE_TEXT,bameta.data(),bameta.size());
+    //发送metadata数据
+    int nsend = mg_websocket_write(conn, MG_WEBSOCKET_OPCODE_TEXT, \
+                                   bameta.data(),bameta.size());
     if(nsend == 0)
     {
         std::cout<<" bameta websocket closed."<<std::endl;
@@ -79,10 +82,19 @@ void WSHandler::ThreadSend(mg_connection *conn)
         std::cout<<" bameta websocket error."<<std::endl;
         return;
     }
+    //,.
+
+//QTime timer;
     while(mbRun)
     {
-        std::this_thread::sleep_for(std::chrono::milliseconds(300));
-        nsend = mg_websocket_write(conn, MG_WEBSOCKET_OPCODE_TEXT,baframe.data(),baframe.size());
+        std::this_thread::sleep_for(std::chrono::milliseconds(100));
+        QJsonObject obj = dataCluster.fillFrame();
+//        qDebug()<<"obj"<<obj;
+//        timer.start();
+        baframe = QJsonDocument(obj).toJson();
+        nsend = mg_websocket_write(conn, MG_WEBSOCKET_OPCODE_TEXT, \
+                                   baframe.data(),baframe.size());
+//        qDebug()<<timer.elapsed();
         if(nsend == 0)
         {
             std::cout<<" websocket closed."<<std::endl;

+ 4 - 11
src/ui/xviz_civetweb/wshandler.h

@@ -1,20 +1,16 @@
 #ifndef WSHANDLER_H
 #define WSHANDLER_H
-
-
 #include "CivetServer.h"
+#include "datacluster.h"
+#include <iostream>
+#include <QFile>
 #include <cstring>
-
 #ifdef _WIN32
 #include <windows.h>
 #else
 #include <unistd.h>
 #endif
 
-#include <thread>
-#include <vector>
-
-
 #ifdef USE_WEBSOCKET
 
 class WSHandler  : public CivetWebSocketHandler
@@ -22,8 +18,6 @@ class WSHandler  : public CivetWebSocketHandler
 public:
     WSHandler();
     ~WSHandler();
-
-public:
     virtual bool handleConnection(CivetServer *server,
                                   const struct mg_connection *conn);
     virtual void handleReadyState(CivetServer *server,
@@ -36,11 +30,10 @@ public:
 
     virtual void handleClose(CivetServer *server,
                              const struct mg_connection *conn);
-
+    DataCluster dataCluster;
 private:
     bool mbRun = true;
     std::vector<std::thread * > mvectorthread;
-private:
     void ThreadSend(struct mg_connection *conn);
 };
 

+ 60 - 2
src/ui/xviz_civetweb/xviz_civetweb.pro

@@ -14,10 +14,23 @@ DEFINES += QT_DEPRECATED_WARNINGS
 # You can also select to disable deprecated APIs only up to a certain version of Qt.
 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
 
+include(common/common.pri)
+
 SOURCES += main.cpp \
     ../../../thirdpartylib/civetweb/CivetServer.cpp \
     ../../../thirdpartylib/civetweb/civetweb.c \
-    wshandler.cpp
+    ../../include/msgtype/gpsimu.pb.cc \
+    ../../include/msgtype/radarobject.pb.cc \
+    ../../include/msgtype/radarobjectarray.pb.cc \
+    ../../include/msgtype/brainstate.pb.cc \
+    ../../include/msgtype/decition.pb.cc \
+    ../../include/msgtype/fusionobjectarray.pb.cc \
+    ../../include/msgtype/fusionobject.pb.cc \
+    ../../include/msgtype/canstate.pb.cc \
+    ../../include/msgtype/chassis.pb.cc \
+    wshandler.cpp \
+    datacluster.cpp \
+    mmath.cpp
 
 
 !include(../../../include/common.pri ) {
@@ -26,11 +39,56 @@ SOURCES += main.cpp \
 
 
 INCLUDEPATH += $$PWD/../../../thirdpartylib/civetweb
+
+INCLUDEPATH += /opt/ros/kinetic/include
+INCLUDEPATH += /usr/include/pcl-1.8
+INCLUDEPATH += /usr/include/eigen3
+INCLUDEPATH += /usr/include/vtk-6.3
 DEFINES += NO_SSL
 #DEFINES += NO_SSL_DL
 DEFINES += USE_WEBSOCKET
 
+unix:LIBS +=  -lpcl_common\
+        -lpcl_features\
+        -lpcl_filters\
+        -lpcl_io\
+        -lpcl_io_ply\
+        -lpcl_kdtree\
+        -lpcl_keypoints\
+        -lpcl_octree\
+        -lpcl_outofcore\
+        -lpcl_people\
+        -lpcl_recognition\
+        -lpcl_registration\
+        -lpcl_sample_consensus\
+        -lpcl_search\
+        -lpcl_segmentation\
+        -lpcl_surface\
+        -lpcl_tracking\
+        -lpcl_visualization
+
 HEADERS += \
     ../../../thirdpartylib/civetweb/CivetServer.h \
     ../../../thirdpartylib/civetweb/civetweb.h \
-    wshandler.h
+    ../../include/msgtype/gpsimu.pb.h \
+    ../../include/msgtype/radarobject.pb.h \
+    ../../include/msgtype/radarobjectarray.pb.h \
+    ../../include/msgtype/brainstate.pb.h \
+    ../../include/msgtype/decition.pb.h \
+    ../../include/msgtype/canstate.pb.h \
+    ../../include/msgtype/fusionobjectarray.pb.h \
+    ../../include/msgtype/fusionobject.pb.h \
+    ../../include/msgtype/canstate.pb.h \
+    ../../include/msgtype/chassis.pb.h \
+    wshandler.h \
+    datacluster.h \
+    mmath.h \
+    commoninclude.h
+
+!include(../../../include/ivprotobuf.pri ) {
+    error( "Couldn't find the ivprotobuf.pri file!" )
+}
+
+!include(../../../include/ivboost.pri ) {
+    error( "Couldn't find the ivboost.pri file!" )
+}