[mapguide-commits] r5996 - in trunk/MgDev: Common/MdfModel Common/MdfParser Common/Schema Common/Stylization Server/src/UnitTesting UnitTest/TestData/MdfModel Web/src/schemareport/templatefiles Web/src/viewerfiles

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Jul 21 17:54:29 EDT 2011


Author: aleck
Date: 2011-07-21 14:54:29 -0700 (Thu, 21 Jul 2011)
New Revision: 5996

Added:
   trunk/MgDev/Common/Schema/LayerDefinition-2.4.0.xsd
   trunk/MgDev/Common/Schema/MapDefinition-2.4.0.xsd
   trunk/MgDev/Common/Schema/SymbolDefinition-2.4.0.xsd
   trunk/MgDev/Common/Schema/WatermarkDefinition-2.4.0.xsd
Modified:
   trunk/MgDev/Common/MdfModel/Path.cpp
   trunk/MgDev/Common/MdfModel/Path.h
   trunk/MgDev/Common/MdfParser/IOCompoundSymbolDefinition.cpp
   trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.cpp
   trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.cpp
   trunk/MgDev/Common/MdfParser/IOMapDefinition.cpp
   trunk/MgDev/Common/MdfParser/IOPath.cpp
   trunk/MgDev/Common/MdfParser/IOSimpleSymbolDefinition.cpp
   trunk/MgDev/Common/MdfParser/IOSymbolInstance.cpp
   trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.cpp
   trunk/MgDev/Common/MdfParser/IOWatermarkDefinition.cpp
   trunk/MgDev/Common/MdfParser/SAX2Parser.cpp
   trunk/MgDev/Common/Stylization/SE_StyleVisitor.cpp
   trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.cpp
   trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.h
   trunk/MgDev/Server/src/UnitTesting/TestMdfModel.cpp
   trunk/MgDev/UnitTest/TestData/MdfModel/MdfTestCompoundSymbol.sd
   trunk/MgDev/UnitTest/TestData/MdfModel/MdfTestSimpleSymbol.sd
   trunk/MgDev/Web/src/schemareport/templatefiles/layerdefinition.templ
   trunk/MgDev/Web/src/schemareport/templatefiles/mapdefinition.templ
   trunk/MgDev/Web/src/viewerfiles/arealayerdef.templ
   trunk/MgDev/Web/src/viewerfiles/layerdefinition.templ
   trunk/MgDev/Web/src/viewerfiles/linelayerdef.templ
Log:
This submission i for Ticket #1754

This is to implement RFC 113 ( http://trac.osgeo.org/mapguide/wiki/MapGuideRfc113) .

The new schema of SymbolDefinition?, layer definition map definition and watermark definition is added. the new version numbers are all 2.4.0. Also, the Stylizer is modified to handle the additional scale properties. In evaluate method of SE_Polygon and SE_Polyline, the line buffer is scaled for each feature.

The MdfParser? and MdfModel? is also update to version 2.4.0 for the above 4 schemas The MdfModel? server unit test was updated to test the new schema versions

TESTING PERFORMED: Tested in MapGuide using mapagent to set a layer definition with scale factors being a constant & expression. Both work. In the case of expression, I use featureid as the width, witch varies per-feature.

The MdfModel? unittest was run and passed.


Modified: trunk/MgDev/Common/MdfModel/Path.cpp
===================================================================
--- trunk/MgDev/Common/MdfModel/Path.cpp	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/MdfModel/Path.cpp	2011-07-21 21:54:29 UTC (rev 5996)
@@ -47,6 +47,8 @@
     this->m_sLineCap            = Path::sLineCapDefault;
     this->m_sLineJoin           = Path::sLineJoinDefault;
     this->m_sLineMiterLimit     = L"5.0";  // NOXLATE
+    this->m_sScaleX             = L"1.0";  // NOXLATE
+    this->m_sScaleY             = L"1.0";  // NOXLATE
 }
 
 //-------------------------------------------------------------------------
@@ -205,6 +207,42 @@
 // PURPOSE:
 // PARAMETERS:
 //-------------------------------------------------------------------------
+const MdfString& Path::GetScaleX() const
+{
+    return this->m_sScaleX;
+}
+
+//-------------------------------------------------------------------------
+// PURPOSE:
+// PARAMETERS:
+//-------------------------------------------------------------------------
+void Path::SetScaleX(const MdfString& scaleX)
+{
+    this->m_sScaleX = scaleX;
+}
+
+//-------------------------------------------------------------------------
+// PURPOSE:
+// PARAMETERS:
+//-------------------------------------------------------------------------
+const MdfString& Path::GetScaleY() const
+{
+    return this->m_sScaleY;
+}
+
+//-------------------------------------------------------------------------
+// PURPOSE:
+// PARAMETERS:
+//-------------------------------------------------------------------------
+void Path::SetScaleY(const MdfString& scaleY)
+{
+    this->m_sScaleY = scaleY;
+}
+
+//-------------------------------------------------------------------------
+// PURPOSE:
+// PARAMETERS:
+//-------------------------------------------------------------------------
 void Path::AcceptVisitor(IGraphicElementVisitor& igeVisitor)
 {
     igeVisitor.VisitPath(*this);

Modified: trunk/MgDev/Common/MdfModel/Path.h
===================================================================
--- trunk/MgDev/Common/MdfModel/Path.h	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/MdfModel/Path.h	2011-07-21 21:54:29 UTC (rev 5996)
@@ -64,6 +64,12 @@
         const MdfString& GetLineMiterLimit() const;
         void SetLineMiterLimit(const MdfString& lineMiterLimit);
 
+        const MdfString& GetScaleX() const;
+        void SetScaleX(const MdfString& scaleX);
+
+        const MdfString& GetScaleY() const;
+        void SetScaleY(const MdfString& scaleY);
+
         virtual void AcceptVisitor(IGraphicElementVisitor& igeVisitor);
 
     private:
@@ -80,6 +86,8 @@
         MdfString m_sLineCap;
         MdfString m_sLineJoin;
         MdfString m_sLineMiterLimit;
+        MdfString m_sScaleX;
+        MdfString m_sScaleY;
     };
 
 END_NAMESPACE_MDFMODEL

Modified: trunk/MgDev/Common/MdfParser/IOCompoundSymbolDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOCompoundSymbolDefinition.cpp	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/MdfParser/IOCompoundSymbolDefinition.cpp	2011-07-21 21:54:29 UTC (rev 5996)
@@ -88,7 +88,7 @@
         MdfString strVersion;
         if (version)
         {
-            if ((*version >= Version(1, 0, 0)) && (*version <= Version(1, 1, 0)))
+            if ((*version >= Version(1, 0, 0)) && (*version <= Version(2, 4, 0)))
             {
                 // SymbolDefinition in MapGuide 2008 - current
                 strVersion = version->ToString();
@@ -104,7 +104,7 @@
         else
         {
             // use the current highest version
-            strVersion = L"1.1.0";
+            strVersion = L"2.4.0";
         }
 
         fd << tab.tab() << "<CompoundSymbolDefinition xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"SymbolDefinition-" << EncodeString(strVersion) << ".xsd\" version=\"" << EncodeString(strVersion) << "\">" << std::endl; // NOXLATE

Modified: trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.cpp	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/MdfParser/IODrawingLayerDefinition.cpp	2011-07-21 21:54:29 UTC (rev 5996)
@@ -143,9 +143,17 @@
 // Determine which WatermarkDefinition schema version to use based
 // on the supplied LDF version:
 // * LDF version <= 2.3.0  =>  WD version 2.3.0
+// * LDF version == 2.4.0  =>  WD version 2.4.0
 bool IODrawingLayerDefinition::GetWatermarkDefinitionVersion(Version* ldfVersion, Version& wdVersion)
 {
-    wdVersion = Version(2, 3, 0);
+    if(ldfVersion && *ldfVersion <= Version(2, 3, 0))
+    {
+        wdVersion = Version(2, 3, 0);
+    }
+    else
+    {
+        wdVersion = Version(2, 4, 0);
+    }
     return true;
 }
 
@@ -161,7 +169,7 @@
             // LDF in MapGuide 2006
             strVersion = L"1.0.0";
         }
-        else if ((*version >= Version(1, 0, 0)) && (*version <= Version(2, 3, 0)))
+        else if ((*version >= Version(1, 0, 0)) && (*version <= Version(2, 4, 0)))
         {
             // LDF in MapGuide 2007 - current
             strVersion = version->ToString();
@@ -177,7 +185,7 @@
     else
     {
         // use the current highest version
-        strVersion = L"2.3.0";
+        strVersion = L"2.4.0";
     }
 
     fd << tab.tab() << "<LayerDefinition xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"LayerDefinition-" << EncodeString(strVersion) << ".xsd\" version=\"" << EncodeString(strVersion) << "\">" << std::endl; // NOXLATE

Modified: trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.cpp	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/MdfParser/IOGridLayerDefinition.cpp	2011-07-21 21:54:29 UTC (rev 5996)
@@ -147,9 +147,17 @@
 // Determine which WatermarkDefinition schema version to use based
 // on the supplied LDF version:
 // * LDF version <= 2.3.0  =>  WD version 2.3.0
+// * else                  =>  WD version 2.4.0
 bool IOGridLayerDefinition::GetWatermarkDefinitionVersion(Version* ldfVersion, Version& wdVersion)
 {
-    wdVersion = Version(2, 3, 0);
+    if(ldfVersion && *ldfVersion <= Version(2, 3, 0))
+    {
+        wdVersion = Version(2, 3, 0);
+    }
+    else
+    {
+        wdVersion = Version(2, 4, 0);
+    }
     return true;
 }
 
@@ -165,7 +173,7 @@
             // LDF in MapGuide 2006
             strVersion = L"1.0.0";
         }
-        else if ((*version >= Version(1, 0, 0)) && (*version <= Version(2, 3, 0)))
+        else if ((*version >= Version(1, 0, 0)) && (*version <= Version(2, 4, 0)))
         {
             // LDF in MapGuide 2007 - current
             strVersion = version->ToString();
@@ -181,7 +189,7 @@
     else
     {
         // use the current highest version
-        strVersion = L"2.3.0";
+        strVersion = L"2.4.0";
     }
 
     fd << tab.tab() << "<LayerDefinition xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"LayerDefinition-" << EncodeString(strVersion) << ".xsd\" version=\"" << EncodeString(strVersion) << "\">" << std::endl; // NOXLATE

Modified: trunk/MgDev/Common/MdfParser/IOMapDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOMapDefinition.cpp	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/MdfParser/IOMapDefinition.cpp	2011-07-21 21:54:29 UTC (rev 5996)
@@ -171,9 +171,17 @@
 // Determine which WatermarkDefinition schema version to use based
 // on the supplied MDF version:
 // * MDF version <= 2.3.0  =>  WD version 2.3.0
+// * else                  =>  WD version 2.4.0
 bool IOMapDefinition::GetWatermarkDefinitionVersion(Version* mdfVersion, Version& wdVersion)
 {
-    wdVersion = Version(2, 3, 0);
+    if(mdfVersion && *mdfVersion <= Version(2, 3, 0))
+    {
+        wdVersion = Version(2, 3, 0);
+    }
+    else
+    {
+        wdVersion = Version(2, 4, 0);
+    }
     return true;
 }
 
@@ -184,7 +192,7 @@
     MdfString strVersion;
     if (version)
     {
-        if ((*version >= Version(1, 0, 0)) && (*version <= Version(2, 3, 0)))
+        if ((*version >= Version(1, 0, 0)) && (*version <= Version(2, 4, 0)))
         {
             // MDF in MapGuide 2006 - current
             strVersion = version->ToString();
@@ -200,7 +208,7 @@
     else
     {
         // use the current highest version
-        strVersion = L"2.3.0";
+        strVersion = L"2.4.0";
     }
 
     if (!version || (*version > Version(1, 0, 0)))

Modified: trunk/MgDev/Common/MdfParser/IOPath.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOPath.cpp	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/MdfParser/IOPath.cpp	2011-07-21 21:54:29 UTC (rev 5996)
@@ -40,8 +40,48 @@
 void IOPath::StartElement(const wchar_t* name, HandlerStack* handlerStack)
 {
     this->m_currElemName = name;
-    if (this->m_currElemName == L"ExtendedData1") // NOXLATE
+    if (this->m_currElemName == L"Geometry")
     {
+        // value read in ElementChars
+    }
+    else if (this->m_currElemName == L"FillColor")
+    {
+        // value read in ElementChars
+    }
+    else if (this->m_currElemName == L"LineColor")
+    {
+        // value read in ElementChars
+    }
+    else if (this->m_currElemName == L"LineWeight")
+    {
+        // value read in ElementChars
+    }
+    else if (this->m_currElemName == L"LineWeightScalable")
+    {
+        // value read in ElementChars
+    }
+    else if (this->m_currElemName == L"LineCap")
+    {
+        // value read in ElementChars
+    }
+    else if (this->m_currElemName == L"LineJoin")
+    {
+        // value read in ElementChars
+    }
+    else if (this->m_currElemName == L"LineMiterLimit")
+    {
+        // value read in ElementChars
+    }
+    else if (this->m_currElemName == L"ScaleX")
+    {
+        // value read in ElementChars
+    }
+    else if (this->m_currElemName == L"ScaleY")
+    {
+        // value read in ElementChars
+    }
+    else if (this->m_currElemName == L"ExtendedData1") // NOXLATE
+    {
         this->m_procExtData = true;
     }
     else
@@ -63,6 +103,8 @@
     else IF_STRING_PROPERTY(this->m_currElemName, path, LineCap, ch)
     else IF_STRING_PROPERTY(this->m_currElemName, path, LineJoin, ch)
     else IF_STRING_PROPERTY(this->m_currElemName, path, LineMiterLimit, ch)
+    else IF_STRING_PROPERTY(this->m_currElemName, path, ScaleX, ch)
+    else IF_STRING_PROPERTY(this->m_currElemName, path, ScaleY, ch)
     else IOGraphicElement::ElementChars(ch);
 }
 
@@ -78,9 +120,28 @@
     fd << tab.tab() << "<" << name << ">" << std::endl;
     tab.inctab();
 
+    MdfStringStream fdExtData;
+
     IOGraphicElement::Write(fd, path, version, tab);
 
     EMIT_STRING_PROPERTY(fd, path, Geometry, false, NULL, tab)
+
+    if (!version || (*version >= Version(2, 4, 0)))
+    {
+        EMIT_DOUBLE_PROPERTY(fd, path, ScaleX, true, 1.0, tab)    // default is 1.0
+        EMIT_DOUBLE_PROPERTY(fd, path, ScaleY, true, 1.0, tab)    // default is 1.0
+    }
+    else
+    {
+        // save new property as extended data for symbol definition version <= 1.1.0
+        tab.inctab();
+
+        EMIT_DOUBLE_PROPERTY(fdExtData, path, ScaleX, true, 1.0, tab)    // default is 1.0
+        EMIT_DOUBLE_PROPERTY(fdExtData, path, ScaleY, true, 1.0, tab)    // default is 1.0
+
+        tab.dectab();
+    }
+
     EMIT_STRING_PROPERTY(fd, path, FillColor, true, L"", tab)         // default is empty string
     EMIT_STRING_PROPERTY(fd, path, LineColor, true, L"", tab)         // default is empty string
     EMIT_DOUBLE_PROPERTY(fd, path, LineWeight, true, 0.0, tab)        // default is 0.0
@@ -90,7 +151,7 @@
     EMIT_DOUBLE_PROPERTY(fd, path, LineMiterLimit, true, 5.0, tab)    // default is 5.0
 
     // Write any unknown XML / extended data
-    IOUnknown::Write(fd, path->GetUnknownXml(), version, tab);
+    IOUnknown::Write(fd, path->GetUnknownXml(), fdExtData.str(), version, tab);
 
     tab.dectab();
     fd << tab.tab() << "</" << name << ">" << std::endl;

Modified: trunk/MgDev/Common/MdfParser/IOSimpleSymbolDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOSimpleSymbolDefinition.cpp	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/MdfParser/IOSimpleSymbolDefinition.cpp	2011-07-21 21:54:29 UTC (rev 5996)
@@ -123,7 +123,7 @@
         MdfString strVersion;
         if (version)
         {
-            if ((*version >= Version(1, 0, 0)) && (*version <= Version(1, 1, 0)))
+            if ((*version >= Version(1, 0, 0)) && (*version <= Version(2, 4, 0)))
             {
                 // SymbolDefinition in MapGuide 2008 - current
                 strVersion = version->ToString();
@@ -139,7 +139,7 @@
         else
         {
             // use the current highest version
-            strVersion = L"1.1.0";
+            strVersion = L"2.4.0";
         }
 
         fd << tab.tab() << "<SimpleSymbolDefinition xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"SymbolDefinition-" << EncodeString(strVersion) << ".xsd\" version=\"" << EncodeString(strVersion) << "\">" << std::endl; // NOXLATE

Modified: trunk/MgDev/Common/MdfParser/IOSymbolInstance.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOSymbolInstance.cpp	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/MdfParser/IOSymbolInstance.cpp	2011-07-21 21:54:29 UTC (rev 5996)
@@ -154,13 +154,16 @@
 
 // Determine which SymbolDefinition schema version to use based
 // on the supplied LDF version:
+// * LDF version == 2.4.0  =>  SD version 2.4.0
 // * LDF version == 2.3.0  =>  SD version 1.1.0
 // * LDF version == 1.3.0  =>  SD version 1.1.0
 // * LDF version == 1.2.0  =>  SD version 1.1.0
 // * LDF version <= 1.1.0  =>  SD version 1.0.0
 bool IOSymbolInstance::GetSymbolDefinitionVersion(Version* ldfVersion, Version& sdVersion)
 {
-    if (!ldfVersion || *ldfVersion >= Version(1, 2, 0))
+    if(!ldfVersion || *ldfVersion >= Version(2, 4, 0))
+        sdVersion = Version(2, 4, 0);
+    else if (*ldfVersion >= Version(1, 2, 0))
         sdVersion = Version(1, 1, 0);
     else if (*ldfVersion <= Version(1, 1, 0))
         sdVersion = Version(1, 0, 0);

Modified: trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.cpp	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/MdfParser/IOVectorLayerDefinition.cpp	2011-07-21 21:54:29 UTC (rev 5996)
@@ -175,9 +175,17 @@
 // Determine which WatermarkDefinition schema version to use based
 // on the supplied LDF version:
 // * LDF version <= 2.3.0  =>  WD version 2.3.0
+// * else                  =>  WD version 2.4.0
 bool IOVectorLayerDefinition::GetWatermarkDefinitionVersion(Version* ldfVersion, Version& wdVersion)
 {
-    wdVersion = Version(2, 3, 0);
+    if(ldfVersion && *ldfVersion <= Version(2, 3, 0))
+    {
+        wdVersion = Version(2, 3, 0);
+    }
+    else
+    {
+        wdVersion = Version(2, 4, 0);
+    }
     return true;
 }
 
@@ -193,7 +201,7 @@
             // LDF in MapGuide 2006
             strVersion = L"1.0.0";
         }
-        else if ((*version >= Version(1, 0, 0)) && (*version <= Version(2, 3, 0)))
+        else if ((*version >= Version(1, 0, 0)) && (*version <= Version(2, 4, 0)))
         {
             // LDF in MapGuide 2007 - current
             strVersion = version->ToString();
@@ -209,7 +217,7 @@
     else
     {
         // use the current highest version
-        strVersion = L"2.3.0";
+        strVersion = L"2.4.0";
     }
 
     fd << tab.tab() << "<LayerDefinition xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"LayerDefinition-" << EncodeString(strVersion) << ".xsd\" version=\"" << EncodeString(strVersion) << "\">" << std::endl; // NOXLATE

Modified: trunk/MgDev/Common/MdfParser/IOWatermarkDefinition.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOWatermarkDefinition.cpp	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/MdfParser/IOWatermarkDefinition.cpp	2011-07-21 21:54:29 UTC (rev 5996)
@@ -162,10 +162,18 @@
 
 // Determine which SymbolDefinition schema version to use based
 // on the supplied WaterDefinition version:
+// * WD version == 2.4.0  =>  SD version 2.4.0
 // * WD version <= 2.3.0  =>  SD version 1.1.0
 bool IOWatermarkDefinition::GetSymbolDefinitionVersion(Version* wdVersion, Version& sdVersion)
 {
-    sdVersion = Version(1, 1, 0);
+    if(wdVersion && *wdVersion <= Version(2, 3, 0))
+    {
+        sdVersion = Version(1, 1, 0);
+    }
+    else
+    {
+        sdVersion = Version(2, 4, 0);
+    }
     return true;
 }
 
@@ -176,7 +184,7 @@
     MdfString strVersion;
     if (version)
     {
-        if ((*version >= Version(1, 0, 0)) && (*version <= Version(2, 3, 0)))
+        if ((*version >= Version(1, 0, 0)) && (*version <= Version(2, 4, 0)))
         {
             // WDF in MapGuide 2012 - current
             strVersion = version->ToString();
@@ -192,7 +200,7 @@
     else
     {
         // use the current highest version
-        strVersion = L"2.3.0";
+        strVersion = L"2.4.0";
     }
 
     fd << tab.tab() << "<WatermarkDefinition xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"WatermarkDefinition-" << EncodeString(strVersion) << ".xsd\" version=\"" << EncodeString(strVersion) << "\">" << std::endl; // NOXLATE

Modified: trunk/MgDev/Common/MdfParser/SAX2Parser.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/SAX2Parser.cpp	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/MdfParser/SAX2Parser.cpp	2011-07-21 21:54:29 UTC (rev 5996)
@@ -687,11 +687,13 @@
             m_version = MdfModel::Version(1, 0, 0);
         else if (_wcsicmp(version.c_str(), L"2.3.0") == 0)
             m_version = MdfModel::Version(2, 3, 0);
+        else if(_wcsicmp(version.c_str(), L"2.4.0") == 0)
+            m_version = MdfModel::Version(2, 4, 0);
     }
     else
     {
         // assume the latest version if the attribute is missing
-        m_version = MdfModel::Version(2, 3, 0);
+        m_version = MdfModel::Version(2, 4, 0);
     }
 }
 
@@ -718,11 +720,13 @@
             m_version = MdfModel::Version(1, 3, 0);
         else if (_wcsicmp(version.c_str(), L"2.3.0") == 0)
             m_version = MdfModel::Version(2, 3, 0);
+        else if (_wcsicmp(version.c_str(), L"2.4.0") == 0)
+            m_version = MdfModel::Version(2, 4, 0);
     }
     else
     {
         // assume the latest version if the attribute is missing
-        m_version = MdfModel::Version(2, 3, 0);
+        m_version = MdfModel::Version(2, 4, 0);
     }
 }
 
@@ -809,11 +813,13 @@
 
         if (_wcsicmp(version.c_str(), L"2.3.0") == 0)
             m_version = MdfModel::Version(2, 3, 0);
+        else if (_wcsicmp(version.c_str(), L"2.4.0") == 0)
+            m_version = MdfModel::Version(2, 4, 0);
     }
     else
     {
         // assume the latest version if the attribute is missing
-        m_version = MdfModel::Version(2, 3, 0);
+        m_version = MdfModel::Version(2, 4, 0);
     }
 }
 

Added: trunk/MgDev/Common/Schema/LayerDefinition-2.4.0.xsd
===================================================================
--- trunk/MgDev/Common/Schema/LayerDefinition-2.4.0.xsd	                        (rev 0)
+++ trunk/MgDev/Common/Schema/LayerDefinition-2.4.0.xsd	2011-07-21 21:54:29 UTC (rev 5996)
@@ -0,0 +1,1242 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.4.0">
+  <xs:include schemaLocation="SymbolDefinition-2.4.0.xsd"/>
+  <xs:include schemaLocation="PlatformCommon-1.0.0.xsd"/>
+  <xs:include schemaLocation="WatermarkDefinition-2.4.0.xsd"/>
+  <xs:element name="LayerDefinition">
+    <xs:annotation>
+      <xs:documentation>The specification of the data source and stylization for a layer.</xs:documentation>
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="LayerDefinitionType">
+          <xs:attribute name="version" type="xs:string" use="required" fixed="2.4.0"/>
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+  <xs:complexType name="LayerDefinitionType">
+    <xs:annotation>
+      <xs:documentation>Encapsulates the definition of a map layer.</xs:documentation>
+    </xs:annotation>
+    <xs:choice>
+      <xs:element name="DrawingLayerDefinition" type="DrawingLayerDefinitionType">
+        <xs:annotation>
+          <xs:documentation>A layer with a drawing (i.e., DWF) data source.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="VectorLayerDefinition" type="VectorLayerDefinitionType">
+        <xs:annotation>
+          <xs:documentation>A layer with a vector data source; and stylization specification for the datum's geometry types.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="GridLayerDefinition" type="GridLayerDefinitionType">
+        <xs:annotation>
+          <xs:documentation>A layer with a raster or grid data source.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:choice>
+  </xs:complexType>
+  <xs:annotation>
+    <xs:documentation>******************** Common types for all layer types ********************</xs:documentation>
+  </xs:annotation>
+  <xs:complexType name="BaseLayerDefinitionType">
+    <xs:annotation>
+      <xs:documentation>Specifies common properties for all layer types.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="ResourceId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Link to the drawing data source.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Opacity" default="1.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Opacity at which to display the rendered data.</xs:documentation>
+        </xs:annotation>
+        <xs:simpleType>
+          <xs:restriction base="xs:double">
+            <xs:minInclusive value="0.0"/>
+            <xs:maxInclusive value="1.0"/>
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:element>
+      <xs:element name="Watermarks" type="WatermarkInstanceCollectionType" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The collection of watermarks used in the layer.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:annotation>
+    <xs:documentation>******************** Drawing layer ********************</xs:documentation>
+  </xs:annotation>
+  <xs:complexType name="DrawingLayerDefinitionType">
+    <xs:annotation>
+      <xs:documentation>A layer with a drawing (i.e., DWF) data source.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="BaseLayerDefinitionType">
+        <xs:sequence>
+          <xs:element name="Sheet" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>The sheet of the DWF to use.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="LayerFilter" type="xs:string" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The layers to show from the specified sheet.  Show all layers if this is not specified.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="MinScale" type="xs:double" default="0.0" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The zoomed in part of the scale range.  Defaults to 0 if not specified.  Inclusive.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="MaxScale" type="xs:double" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The zoomed out part of the scale range.  Defaults to the application's maximum value if not specified.  Exclusive.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:annotation>
+    <xs:documentation>******************** Vector layer ********************</xs:documentation>
+  </xs:annotation>
+  <xs:complexType name="VectorLayerDefinitionType">
+    <xs:annotation>
+      <xs:documentation>A layer with a vector data source; and stylization specification for the datum's geometry types.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="BaseLayerDefinitionType">
+        <xs:sequence>
+          <xs:element name="FeatureName" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>Either a feature class or named extension.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="FeatureNameType" type="FeatureNameType"/>
+          <xs:element name="Filter" type="xs:string" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>A boolean FDO expression that specifies which features to return.  No filter means pass all features through.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="PropertyMapping" type="NameStringPairType" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>Specifies which properties to expose to the user and its corresponding friendly name.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Geometry" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>Specifies the geometry property that should be used to get the geometries.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Url" type="xs:string" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>An optional URL associated with each feature.  This is a string FDO expression.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ToolTip" type="xs:string" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The text to put into the tooltip for displayed features.  This is a string FDO expression.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="VectorScaleRange" type="VectorScaleRangeType" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>The stylization to be applied to the features for a given scale range.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:simpleType name="FeatureNameType">
+    <xs:annotation>
+      <xs:documentation>Enumeration describing whether the features are coming from a feature class or named extension</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="FeatureClass"/>
+      <xs:enumeration value="NamedExtension"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="VectorScaleRangeType">
+    <xs:annotation>
+      <xs:documentation>The stylization to be applied to the vector features for a given scale range.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="MinScale" type="xs:double" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The zoomed in part of the scale range.  Defaults to 0 if not specified.  Inclusive.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MaxScale" type="xs:double" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The zoomed out part of the scale range.  Defaults to the application's maximum value if not specified.  Exclusive.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>Note that where there is no style specified for a particular geometry type a default styling should be used.</xs:documentation>
+        </xs:annotation>
+        <xs:element name="AreaTypeStyle" type="AreaTypeStyleType">
+          <xs:annotation>
+            <xs:documentation>Style specification of a polygon geometry type.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="LineTypeStyle" type="LineTypeStyleType">
+          <xs:annotation>
+            <xs:documentation>Style specification of a line geometry type.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="PointTypeStyle" type="PointTypeStyleType">
+          <xs:annotation>
+            <xs:documentation>Style specification of a point geometry type.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="CompositeTypeStyle" type="CompositeTypeStyle">
+          <xs:annotation>
+            <xs:documentation>A composite style definition.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+      </xs:choice>
+      <xs:element name="ElevationSettings" type="ElevationSettingsType" minOccurs="0"/>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ElevationSettingsType">
+    <xs:sequence>
+      <xs:element name="ZOffset" type="xs:string" minOccurs="0"/>
+      <xs:element name="ZExtrusion" type="xs:string" minOccurs="0"/>
+      <xs:element name="ZOffsetType" type="ElevationTypeType" default="RelativeToGround" minOccurs="0"/>
+      <xs:element name="Unit" type="LengthUnitType" default="Centimeters" minOccurs="0"/>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:simpleType name="ElevationTypeType">
+    <xs:annotation>
+      <xs:documentation>The possible interpretations of a z offset value.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="RelativeToGround"/>
+      <xs:enumeration value="Absolute"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="PointTypeStyleType">
+    <xs:annotation>
+      <xs:documentation>Style specification of a point geometry type.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="DisplayAsText" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Create a text layer.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="AllowOverpost" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Allows labels from any map layer (including the current layer) to obscure features on the current layer.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="PointRule" type="PointRuleType" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>One or more PointRules defining the PointTypeStyle.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ShowInLegend" type="xs:boolean" default="true" minOccurs="0"/>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="PointRuleType">
+    <xs:annotation>
+      <xs:documentation>Style rule for a point geometry type.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The label for the Rule to be displayed in the legend.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Filter" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>A filter for the Rule.  This is a boolean FDO expression.  Any features that pass this filter are styled using this rule's stylization.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Label" type="TextSymbolType" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>A label for the Rule.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:choice minOccurs="0">
+        <xs:element name="PointSymbolization2D" type="PointSymbolization2DType"/>
+      </xs:choice>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="PointSymbolizationType">
+    <xs:annotation>
+      <xs:documentation>Base point symbolization type.</xs:documentation>
+    </xs:annotation>
+  </xs:complexType>
+  <xs:complexType name="PointSymbolization2DType">
+    <xs:annotation>
+      <xs:documentation>The different types of point geometries.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:choice>
+        <xs:element name="Mark" type="MarkSymbolType">
+          <xs:annotation>
+            <xs:documentation>A predefined shape such as a square or circle.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="Image" type="ImageSymbolType">
+          <xs:annotation>
+            <xs:documentation>A raster or image symbol.  Note that these do not scale well, but sometimes this is all that you have.  Supported formats are application specific.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="Font" type="FontSymbolType">
+          <xs:annotation>
+            <xs:documentation>A symbol specified using a font character.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="W2D" type="W2DSymbolType">
+          <xs:annotation>
+            <xs:documentation>A vector symbol defined using a W2D stream.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="Block" type="BlockSymbolType">
+          <xs:annotation>
+            <xs:documentation>A vector symbol specifed from a block.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+      </xs:choice>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LineTypeStyleType">
+    <xs:annotation>
+      <xs:documentation>Style specification of a line geometry type.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="LineRule" type="LineRuleType" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>Rules to define a theme.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ShowInLegend" type="xs:boolean" default="true" minOccurs="0"/>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LineRuleType">
+    <xs:annotation>
+      <xs:documentation>Style rule for a line geometry type.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The label for the Rule to be displayed in the legend.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Filter" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>A filter for the Rule.  This is a boolean FDO expression.  Any features that pass this filter are styled using this rule's stylization.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Label" type="TextSymbolType" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>A label for the Rule.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element name="LineSymbolization2D" type="StrokeType"/>
+      </xs:choice>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="AreaSymbolizationType">
+    <xs:annotation>
+      <xs:documentation>Symbolization characteristics for areas.</xs:documentation>
+    </xs:annotation>
+  </xs:complexType>
+  <xs:complexType name="AreaSymbolizationFillType">
+    <xs:annotation>
+      <xs:documentation>Describes the style of a polygon.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="AreaSymbolizationType">
+        <xs:sequence>
+          <xs:element name="Fill" type="FillType" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The style of the polygon fill.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Stroke" type="StrokeType" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The style of the polygon edge.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="AreaTypeStyleType">
+    <xs:annotation>
+      <xs:documentation>Style specification of a polygon geometry type.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="AreaRule" type="AreaRuleType" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>Rules to define a theme.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ShowInLegend" type="xs:boolean" default="true" minOccurs="0"/>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="AreaRuleType">
+    <xs:annotation>
+      <xs:documentation>Style rule for an area geometry type.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The label for the Rule to be displayed in the legend.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Filter" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>A filter for the Rule.  This is a boolean FDO expression.  Any features that pass this filter are styled using this rule's stylization.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Label" type="TextSymbolType" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>A label for the Rule.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:choice>
+        <xs:element name="AreaSymbolization2D" type="AreaSymbolizationFillType">
+          <xs:annotation>
+            <xs:documentation>The stylization of the polygon geometry.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+      </xs:choice>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="StrokeType">
+    <xs:annotation>
+      <xs:documentation>Encapsulates the stylization of a line.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="LineStyle" type="xs:string"/>
+      <xs:element name="Thickness" type="xs:string"/>
+      <xs:element name="Color" type="xs:string"/>
+      <xs:element name="Unit" type="LengthUnitType">
+        <xs:annotation>
+          <xs:documentation>Unit of measurement that the thickness is specified in</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="SizeContext" type="SizeContextType">
+        <xs:annotation>
+          <xs:documentation>Whether the sizes are with respect to the earth or the user's display device.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="FillType">
+    <xs:annotation>
+      <xs:documentation>Encapsulates the stylization of a polygon's fill.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="FillPattern" type="xs:string"/>
+      <xs:element name="ForegroundColor" type="xs:string"/>
+      <xs:element name="BackgroundColor" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The background color.  Not applicable to solid fills.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:simpleType name="BackgroundStyleType">
+    <xs:annotation>
+      <xs:documentation>The possible background styles of a TextSymbol.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Transparent"/>
+      <xs:enumeration value="Opaque"/>
+      <xs:enumeration value="Ghosted"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="SizeContextType">
+    <xs:annotation>
+      <xs:documentation>Whether the sizes are specified as sizes on the earth or on the user's display device.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="MappingUnits"/>
+      <xs:enumeration value="DeviceUnits"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="LengthUnitType">
+    <xs:annotation>
+      <xs:documentation>The measurement units that linear sizes are specified in.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Millimeters"/>
+      <xs:enumeration value="Centimeters"/>
+      <xs:enumeration value="Meters"/>
+      <xs:enumeration value="Kilometers"/>
+      <xs:enumeration value="Inches"/>
+      <xs:enumeration value="Feet"/>
+      <xs:enumeration value="Yards"/>
+      <xs:enumeration value="Miles"/>
+      <xs:enumeration value="Points"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="TextSymbolType">
+    <xs:annotation>
+      <xs:documentation>Encapsulates the text label stylization used to label features, and for FontSymbols.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="SymbolType">
+        <xs:sequence>
+          <xs:element name="Text" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>The text of the TextSymbol.  This is a string FDO expression.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="FontName" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>The font to use.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ForegroundColor" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>The color of the text.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="BackgroundColor" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>The text background color.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="BackgroundStyle" type="BackgroundStyleType">
+            <xs:annotation>
+              <xs:documentation>The background style</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="HorizontalAlignment" type="xs:string" default="'Center'" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>A string FDO expression for the horizontal alignment.  Must evaluate to one of the HorizontalAlignmentType enums.  Only applicable to text styles.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="VerticalAlignment" type="xs:string" default="'Baseline'" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>A string FDO expression for the vertical alignment.  Must evaluate to one of the VerticalAlignmentType enums.  Only applicable to text and line styles.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Bold" type="xs:string" default="false" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Specifies if the label should be in a bold font.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Italic" type="xs:string" default="false" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Specifies if the font should be italicized.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Underlined" type="xs:string" default="false" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Specifies if the text should be underlined.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="AdvancedPlacement" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Optional element which specifies that a more advanced labeling algorithm should be used with the AJAX viewer.</xs:documentation>
+            </xs:annotation>
+            <xs:complexType>
+              <xs:sequence>
+                <xs:element name="ScaleLimit" type="xs:double" minOccurs="0">
+                  <xs:annotation>
+                    <xs:documentation>The maximum amount any label is allowed to shrink in order to fit into the feature.  For example, 0.8 means that the label can shrink until it is 80% of the original size.  1.0 means that the label cannot shrink.  If not specified, the application should assume 1.0.  If set to 0.0 or less then the advanced placement option is disabled.</xs:documentation>
+                  </xs:annotation>
+                </xs:element>
+              </xs:sequence>
+            </xs:complexType>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="SymbolType">
+    <xs:annotation>
+      <xs:documentation>Defines common properties for all symbols.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Unit" type="LengthUnitType">
+        <xs:annotation>
+          <xs:documentation>The units that the sizes are specified in.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="SizeContext" type="SizeContextType">
+        <xs:annotation>
+          <xs:documentation>Whether the sizes are with respect to the earth or the user's display device.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="SizeX" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Width of the symbol.  This is a double FDO expression.  Does not apply to font symbols.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="SizeY" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Height of the symbol.  This is a double FDO expression.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Rotation" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Amount to rotate the symbol in degrees.  This is a double FDO expression.  Does not apply to line labels.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MaintainAspect" type="xs:boolean" default="true" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Hint for the UI only.  When the user enters a constant size for the width or height, the other dimension should be adjusted accordingly.  Does not apply to font symbols or labels.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="InsertionPointX" type="xs:string" default="0.5" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>X offset for the symbol specified in symbol space.  Does not apply to labels.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="InsertionPointY" type="xs:double" default="0.5" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Y offset for the symbol specified in symbol space.  Does not apply to labels.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="MarkSymbolType">
+    <xs:annotation>
+      <xs:documentation>Stylization of a predefined shape (ShapeType).</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="SymbolType">
+        <xs:sequence>
+          <xs:element name="Shape" type="ShapeType"/>
+          <xs:element name="Fill" type="FillType" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>No fill is drawn if not specified.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Edge" type="StrokeType" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>No edge is drawn if not specified.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="NameStringPairType">
+    <xs:annotation>
+      <xs:documentation>Used by vector layer definition to hold properties that can be displayed to the end user, and the friendly name to display it as.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of the property to expose.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Value" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name to show the end user.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:simpleType name="ShapeType">
+    <xs:annotation>
+      <xs:documentation>SLD supports square, circle, triangle, star, cross, and X.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Square"/>
+      <xs:enumeration value="Circle"/>
+      <xs:enumeration value="Triangle"/>
+      <xs:enumeration value="Star"/>
+      <xs:enumeration value="Cross"/>
+      <xs:enumeration value="X"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="ImageSymbolType">
+    <xs:annotation>
+      <xs:documentation>Symbols that are comprised of a raster.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="SymbolType">
+        <xs:sequence>
+          <xs:choice>
+            <xs:element name="Image">
+              <xs:annotation>
+                <xs:documentation>Reference to the image.</xs:documentation>
+              </xs:annotation>
+              <xs:complexType>
+                <xs:sequence>
+                  <xs:element name="ResourceId">
+                    <xs:annotation>
+                      <xs:documentation>The reference to the resource.</xs:documentation>
+                    </xs:annotation>
+                  </xs:element>
+                  <xs:element name="LibraryItemName" minOccurs="0">
+                    <xs:annotation>
+                      <xs:documentation>If ResourceId specifies a library, this identifies the name of a library item.</xs:documentation>
+                    </xs:annotation>
+                  </xs:element>
+                </xs:sequence>
+              </xs:complexType>
+            </xs:element>
+            <xs:element name="Content" type="xs:hexBinary">
+              <xs:annotation>
+                <xs:documentation>BinHex data for image.</xs:documentation>
+              </xs:annotation>
+            </xs:element>
+          </xs:choice>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="FontSymbolType">
+    <xs:annotation>
+      <xs:documentation>Symbols that are specified by a font and character.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="SymbolType">
+        <xs:sequence>
+          <xs:element name="FontName" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>If the font is not installed, the actual font used is application dependent.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Character" type="xs:string"/>
+          <xs:element name="Bold" type="xs:boolean" minOccurs="0"/>
+          <xs:element name="Italic" type="xs:boolean" minOccurs="0"/>
+          <xs:element name="Underlined" type="xs:boolean" minOccurs="0"/>
+          <xs:element name="ForegroundColor" type="xs:string"/>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="W2DSymbolType">
+    <xs:annotation>
+      <xs:documentation>A symbol using a W2D stream.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="SymbolType">
+        <xs:sequence>
+          <xs:element name="W2DSymbol">
+            <xs:complexType>
+              <xs:sequence>
+                <xs:element name="ResourceId">
+                  <xs:annotation>
+                    <xs:documentation>The reference to the symbol library.</xs:documentation>
+                  </xs:annotation>
+                </xs:element>
+                <xs:element name="LibraryItemName">
+                  <xs:annotation>
+                    <xs:documentation>The W2D stream in the symbol library.</xs:documentation>
+                  </xs:annotation>
+                </xs:element>
+              </xs:sequence>
+            </xs:complexType>
+          </xs:element>
+          <xs:element name="FillColor" type="xs:string" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>If specified all polygon fills in the symbol are drawn in this color.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="LineColor" type="xs:string" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>If specified all lines in the symbol are drawn in this color.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="TextColor" type="xs:string" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>If specified all text in the symbol is drawn in this color.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="BlockSymbolType">
+    <xs:annotation>
+      <xs:documentation>A block symbol.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="SymbolType">
+        <xs:sequence>
+          <xs:element name="DrawingName" type="xs:string"/>
+          <xs:element name="BlockName" type="xs:string"/>
+          <xs:element name="BlockColor" type="xs:string" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Static color.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="LayerColor" type="xs:string" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Static color.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="CompositeTypeStyle">
+    <xs:annotation>
+      <xs:documentation>A style specification consisting of composite rules.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="CompositeRule" type="CompositeRule" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>One or more CompositeRules defining the CompositeTypeStyle.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ShowInLegend" type="xs:boolean" default="true" minOccurs="0"/>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="CompositeRule">
+    <xs:annotation>
+      <xs:documentation>A style rule containing a composite symbolization.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The label for the Rule to be displayed in the legend.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Filter" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>A filter for the Rule.  This is a boolean FDO expression.  Any features that pass this filter are styled using this rule's stylization.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="CompositeSymbolization" type="CompositeSymbolization">
+        <xs:annotation>
+          <xs:documentation>The symbolization for the Rule.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="CompositeSymbolization">
+    <xs:annotation>
+      <xs:documentation>Stylization attributes of a point, line, or area feature.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="SymbolInstance" type="SymbolInstance" minOccurs="0" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>The symbol instances used for stylization.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ThemeLabel">
+    <xs:annotation>
+      <xs:documentation>Provides legend labeling information for a theme.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Description" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The legend description for the theme.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="CategoryFormat" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The default legend format to use for each category in the theme.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="Override">
+    <xs:annotation>
+      <xs:documentation>A parameter override.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="SymbolName" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of the symbol definition containing the parameter being overridden.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ParameterIdentifier" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The identifier of the parameter being overridden.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ParameterValue" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The override value for the parameter.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ThemeLabel" type="ThemeLabel" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>An optional theme label for this override.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ParameterOverrides">
+    <xs:annotation>
+      <xs:documentation>A collection of parameter overrides.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Override" type="Override" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:simpleType name="UsageContextType">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed UsageContext values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Unspecified"/>
+      <xs:enumeration value="Point"/>
+      <xs:enumeration value="Line"/>
+      <xs:enumeration value="Area"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="GeometryContextType">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed GeometryContext values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Unspecified"/>
+      <xs:enumeration value="Point"/>
+      <xs:enumeration value="LineString"/>
+      <xs:enumeration value="Polygon"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="SymbolInstance">
+    <xs:annotation>
+      <xs:documentation>An instance of a symbol.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:choice>
+        <xs:element name="ResourceId" type="xs:string">
+          <xs:annotation>
+            <xs:documentation>A library reference to an existing SymbolDefinition, either simple or compound.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="SimpleSymbolDefinition" type="SimpleSymbolDefinition">
+          <xs:annotation>
+            <xs:documentation>An inlined SimpleSymbolDefinition.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="CompoundSymbolDefinition" type="CompoundSymbolDefinition">
+          <xs:annotation>
+            <xs:documentation>An inlined CompoundSymbolDefinition.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+      </xs:choice>
+      <xs:element name="ParameterOverrides" type="ParameterOverrides">
+        <xs:annotation>
+          <xs:documentation>Specifies all parameter overrides for this symbol instance.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ScaleX" type="xs:string" default="1.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The additional amount to scale the symbol horizontally in symbol space.  Defaults to 1 if not specified.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ScaleY" type="xs:string" default="1.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The additional amount to scale the symbol vertically in symbol space.  Defaults to 1 if not specified.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="InsertionOffsetX" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies the additional amount to offset the symbol horizontally, in mm in device units, after scaling and rotation have been applied.  Applies only to point symbols.  Defaults to 0 if not specified.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="InsertionOffsetY" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies the additional amount to offset the symbol vertically, in mm in device units, after scaling and rotation have been applied.  Applies only to point symbols.  Defaults to 0 if not specified.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="SizeContext" type="SizeContextType" default="DeviceUnits" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies whether the symbol sizes are with respect to the map or the user's display device.  Defaults to device units.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="DrawLast" type="xs:string" default="false" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Boolean value which specifies whether the symbol is drawn as part of a final rendering pass (e.g. for labeling).  This must evaluate to True or False (default).</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="CheckExclusionRegion" type="xs:string" default="false" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Boolean value which specifies whether to render this symbol only if its graphical extent does not overlap the exclusion region.  If the positioning algorithm generates multiple candidate symbol positions and this setting is True, then only the first non-overlapping candidate is rendered.  This must evaluate to True or False (default).</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="AddToExclusionRegion" type="xs:string" default="false" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Boolean value which specifies whether the graphical extent for this symbol instance is added to the exclusion region (if it is rendered).  Symbols which check the exclusion region will not draw on top of this symbol.  This must evaluate to True or False (default).</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="PositioningAlgorithm" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies the algorithm used to generate candidate positions for the symbol.  If specified this must evaluate to one of: Default, EightSurrounding, or PathLabels.  Default means generate one position using the feature geometry (used for normal rendering).  EightSurrounding means generate eight candidate labels surrounding the feature geometry (used when labeling point features).  PathLabels means generate periodic labels which follow the feature geometry (used when labeling linestring features).</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="RenderingPass" type="xs:string" default="0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The optional rendering pass in which this symbol instance draws.  If specified this must be greater than or equal to zero.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="UsageContext" type="UsageContextType" default="Unspecified" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies which usage in the symbol should be the active one.  Defaults to Unspecified.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="GeometryContext" type="GeometryContextType" default="Unspecified" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies which geometry type this symbol instance applies to.  Defaults to Unspecified.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:annotation>
+    <xs:documentation>******************** Grid layer ********************</xs:documentation>
+  </xs:annotation>
+  <xs:complexType name="GridLayerDefinitionType">
+    <xs:annotation>
+      <xs:documentation>A layer for raster or grid data.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="BaseLayerDefinitionType">
+        <xs:sequence>
+          <xs:element name="FeatureName" type="xs:string"/>
+          <xs:element name="Geometry" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>Specifies the geometry property that should be used to get the geometries.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Filter" type="xs:string" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>A boolean FDO expression that specifies which features to return.  No filter means pass all features through.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="GridScaleRange" type="GridScaleRangeType" maxOccurs="unbounded"/>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="ChannelBandType">
+    <xs:annotation>
+      <xs:documentation>Defines how to scale numbers into a color channel.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Band" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Name of the band.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LowBand" type="xs:double" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Default is low value found in band.  Band values less than this are snapped to this number.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="HighBand" type="xs:double" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Default is high value found in band.  Band values greater than this are snapped to this number.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LowChannel" type="xs:unsignedByte" default="0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Default is 0.  Range is 0:255.  LowBand is mapped to this number.  LowChannel can be greater than HighChannel.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="HighChannel" type="xs:unsignedByte" default="255" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Default is 255.  Range is 0:255.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="GridColorBandsType">
+    <xs:annotation>
+      <xs:documentation>Specifies a color using distinct RGB values.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="RedBand" type="ChannelBandType"/>
+      <xs:element name="GreenBand" type="ChannelBandType"/>
+      <xs:element name="BlueBand" type="ChannelBandType"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="GridColorType">
+    <xs:annotation>
+      <xs:documentation>The color to use for a grid rule.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:choice minOccurs="0">
+        <xs:element name="ExplicitColor" type="xs:string">
+          <xs:annotation>
+            <xs:documentation>Explicit ARGB color.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="Band" type="xs:string"/>
+        <xs:element name="Bands" type="GridColorBandsType"/>
+      </xs:choice>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="GridColorRuleType">
+    <xs:annotation>
+      <xs:documentation>Encapsulate a style for a grid source.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The label for the Rule to be displayed in the legend.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Filter" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>A filter for the Rule.  This is a boolean FDO expression.  Any features that pass this filter are styled using this rule's stylization.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Label" type="TextSymbolType" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>A label for the Rule.  Does not apply to GridColorRule.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Color" type="GridColorType"/>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="HillShadeType">
+    <xs:annotation>
+      <xs:documentation>Specifies how to shade given a band and a light source.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Band" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Name of the band used for the computation.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Azimuth" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>Azimuth of the sun in degrees.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Altitude" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>Altitude of the sun in degrees.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ScaleFactor" type="xs:double" default="1.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The scale factor applied to the band prior to computing hillshade.  Defaults to 1 if not specified.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="GridColorStyleType">
+    <xs:annotation>
+      <xs:documentation>Specifies how to style each pixel.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="HillShade" type="HillShadeType" minOccurs="0"/>
+      <xs:element name="TransparencyColor" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>If a pixel color prior to factoring in HillShade is this value then the pixel is transparent.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="BrightnessFactor" type="xs:double" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Default is 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ContrastFactor" type="xs:double" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Default is 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ColorRule" type="GridColorRuleType" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="GridSurfaceStyleType">
+    <xs:annotation>
+      <xs:documentation>Specifies how to calculate pixel elevations.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Band" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Band to use for 3D data.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ZeroValue" type="xs:double" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Determines which input value is mapped to zero elevation.  Defaults to 0 if not specified.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ScaleFactor" type="xs:double" default="1.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Determines how to scale the inputs into a consistent elevation.  Defaults to 1 if not specified.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="DefaultColor" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The default color to use if no ColorStyle is defined at a pixel.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="GridScaleRangeType">
+    <xs:annotation>
+      <xs:documentation>The stylization for a specified scale range.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="MinScale" type="xs:double" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The zoomed in part of the scale range.  Defaults to 0 if not specified.  Inclusive.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MaxScale" type="xs:double" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The zoomed out part of the scale range.  Defaults to the application's maximum value if not specified.  Exclusive.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="SurfaceStyle" type="GridSurfaceStyleType" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Defines the height field of the grid.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ColorStyle" type="GridColorStyleType" minOccurs="0"/>
+      <xs:element name="RebuildFactor" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>When the user has zoomed in by this amount, a request for more detailed raster data is made.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>

Added: trunk/MgDev/Common/Schema/MapDefinition-2.4.0.xsd
===================================================================
--- trunk/MgDev/Common/Schema/MapDefinition-2.4.0.xsd	                        (rev 0)
+++ trunk/MgDev/Common/Schema/MapDefinition-2.4.0.xsd	2011-07-21 21:54:29 UTC (rev 5996)
@@ -0,0 +1,247 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.4.0">
+  <xs:include schemaLocation="WatermarkDefinition-2.4.0.xsd"/>
+  <xs:complexType name="Box2DType">
+    <xs:annotation>
+      <xs:documentation>Box2D encapsulates the the coordinates of a box in 2-D space</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="MinX" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>Minimum x-coordinate</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MaxX" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>Maximum x-coordinate</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MinY" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>Minimum y-coordinate</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MaxY" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>Maximum y-coordinate</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="MapLayerCommonType">
+    <xs:annotation>
+      <xs:documentation>MapLayerCommonType is a common superclass of MapLayerType and BaseMapLayerType.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Name of the MapLayer</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ResourceId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>ResourceId of the MapLayer</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Selectable" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the Layer can be selected</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ShowInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the Layer should be shown in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Label to be shown for the Layer in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExpandInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the Layer should be expanded in the legend.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="MapLayerType">
+    <xs:annotation>
+      <xs:documentation>MapLayerType encapsulates the properties of a map layer, including its group and options about how it should be displayed.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="MapLayerCommonType">
+        <xs:sequence>
+          <xs:element name="Visible" type="xs:boolean">
+            <xs:annotation>
+              <xs:documentation>Whether this layer's visiblity should be visible or not when it first comes into range</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Group" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>Group of which the MapLayer is a member of</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="BaseMapLayerType">
+    <xs:annotation>
+      <xs:documentation>BaseMapLayerType encapsulates the properties of a BaseMapLayer.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="MapLayerCommonType">
+        <xs:sequence>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="MapLayerGroupCommonType">
+    <xs:annotation>
+      <xs:documentation>MapLayerGroupCommonType is a common superclass of MapLayerGroupType and BaseMapLayerGroupType.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of this LayerGroup</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Visible" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether this group's visiblity should be visible or not when it first comes into range</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ShowInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the LayerGroup should be shown in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExpandInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the LayerGroup should be initially expanded in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Label to be shown for the LayerGroup in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="MapLayerGroupType">
+    <xs:annotation>
+      <xs:documentation>MapLayerGroupType encapsulates the properties of a MapLayerGroup.  Its extension to MapLayerGroupCommonType is that the MapLayerGroup itself can also be in a MapLayerGroup.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="MapLayerGroupCommonType">
+        <xs:sequence>
+          <xs:element name="Group" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>The group that contains the MapLayerGroup</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="BaseMapLayerGroupType">
+    <xs:annotation>
+      <xs:documentation>BaseMapLayerGroupType encapsulates the properties of a BaseMapLayerGroup.  It extends MapLayerGroupCommonType by holding the layers in the group.  The base map layer groups defines what layers are used to render a tile set in the HTML viewer.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="MapLayerGroupCommonType">
+        <xs:sequence>
+          <xs:element name="BaseMapLayer" type="BaseMapLayerType" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>The layers that are part of this group. The order of the layers represents the draw order, layers first is the list are drawn over top of layers later in the list.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="MapDefinitionType">
+    <xs:annotation>
+      <xs:documentation>MapDefinitionType encapsulates a MapDefinition, which houses a collection of MapLayers and their groups.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of the MapDefinition</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="CoordinateSystem" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The coordinate system as WKT used by the MapDefinition</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Extents" type="Box2DType">
+        <xs:annotation>
+          <xs:documentation>A bounding box around the area of the MapDefinition</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="BackgroundColor" type="xs:hexBinary">
+        <xs:annotation>
+          <xs:documentation>The background color to be used with the MapDefinition</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Metadata" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Metadata regarding the MapDefinition</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MapLayer" type="MapLayerType" minOccurs="0" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>Zero or more MapLayers that make up the MapDefinition. The order of the layers represents the draw order, layers first is the list are drawn over top of layers later in the list.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MapLayerGroup" type="MapLayerGroupType" minOccurs="0" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>Zero or more MapLayerGroups that make up the MapDefinition</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="BaseMapDefinition" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The base map.</xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="FiniteDisplayScale" type="xs:double" maxOccurs="unbounded">
+              <xs:annotation>
+                <xs:documentation>The display scales that the base map layers will have tiles available. Applies to the HTML viewer.</xs:documentation>
+              </xs:annotation>
+            </xs:element>
+            <xs:element name="BaseMapLayerGroup" type="BaseMapLayerGroupType" minOccurs="0" maxOccurs="unbounded">
+              <xs:annotation>
+                <xs:documentation>A group of layers that is used to compose a tiled layer in the HTML viewer</xs:documentation>
+              </xs:annotation>
+            </xs:element>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="Watermarks" type="WatermarkInstanceCollectionType" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The collection of watermarks used in the map.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="MapDefinition">
+    <xs:annotation>
+      <xs:documentation>A MapDefinition defines the collection of layers, groupings of layers, and base map</xs:documentation>
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="MapDefinitionType">
+          <xs:attribute name="version" type="xs:string" use="required" fixed="2.4.0"/>
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>

Added: trunk/MgDev/Common/Schema/SymbolDefinition-2.4.0.xsd
===================================================================
--- trunk/MgDev/Common/Schema/SymbolDefinition-2.4.0.xsd	                        (rev 0)
+++ trunk/MgDev/Common/Schema/SymbolDefinition-2.4.0.xsd	2011-07-21 21:54:29 UTC (rev 5996)
@@ -0,0 +1,818 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.4.0">
+  <xs:include schemaLocation="PlatformCommon-1.0.0.xsd"/>
+  <xs:element name="SimpleSymbolDefinition">
+    <xs:annotation>
+      <xs:documentation>A 2D simple symbol for stylization.</xs:documentation>
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="SimpleSymbolDefinition">
+          <xs:attribute name="version" type="xs:string" use="required" fixed="2.4.0"/>
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="CompoundSymbolDefinition">
+    <xs:annotation>
+      <xs:documentation>A 2D compound symbol for stylization.</xs:documentation>
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="CompoundSymbolDefinition">
+          <xs:attribute name="version" type="xs:string" use="required" fixed="2.4.0"/>
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+  <xs:complexType name="SymbolDefinitionBase">
+    <xs:annotation>
+      <xs:documentation>Base type used with all symbol definitions.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of the symbol.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Description" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>An optional description of the symbol.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ResizeBox">
+    <xs:annotation>
+      <xs:documentation>Defines a resize box used with SimpleSymbolDefinitions.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="SizeX" type="xs:string" default="1.0">
+        <xs:annotation>
+          <xs:documentation>The initial width of the resize box, in mm.  This must be greater than or equal to zero.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="SizeY" type="xs:string" default="1.0">
+        <xs:annotation>
+          <xs:documentation>The initial height of the resize box, in mm.  This must be greater than or equal to zero.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="PositionX" type="xs:string" default="0.0">
+        <xs:annotation>
+          <xs:documentation>The initial x-coordinate of the resize box center, in mm.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="PositionY" type="xs:string" default="0.0">
+        <xs:annotation>
+          <xs:documentation>The initial y-coordinate of the resize box center, in mm.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="GrowControl" type="xs:string" default="'GrowInXYMaintainAspect'">
+        <xs:annotation>
+          <xs:documentation>Specifies how the resize box grows in size.  This must evaluate to one of: GrowInX, GrowInY, GrowInXY, or GrowInXYMaintainAspect (default).</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="PointUsage">
+    <xs:annotation>
+      <xs:documentation>Specifies how a symbol is used in the context of point features.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="AngleControl" type="xs:string" default="'FromAngle'" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies how the symbol angle is defined.  This must evaluate to one of: FromAngle (default) or FromGeometry.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Angle" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies the symbol angle, in degrees.  If AngleControl evaluates to FromAngle then this specifies the absolute angle of the symbol.  If AngleControl evaluates to FromGeometry then this specifies the symbol angle relative to the geometry.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="OriginOffsetX" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies the horizontal offset to apply to the symbol origin, in mm.  This offset is applied before the symbol is scaled and rotated.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="OriginOffsetY" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies the vertical offset to apply to the symbol origin, in mm.  This offset is applied before the symbol is scaled and rotated.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="LineUsage">
+    <xs:annotation>
+      <xs:documentation>Specifies how a symbol is used in the context of linear features.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="AngleControl" type="xs:string" default="'FromGeometry'" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies how the symbol angle is defined.  This must evaluate to one of: FromAngle or FromGeometry (default).</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="UnitsControl" type="xs:string" default="'Absolute'" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies whether the distribution parameters are interpreted as absolute values (in mm) or parametric values.  This must evaluate to one of: Absolute (default) or Parametric.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="VertexControl" type="xs:string" default="'OverlapWrap'" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies the symbol behavior at vertices.  This must evaluate to one of: OverlapNone, OverlapDirect, or OverlapWrap (default).</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Angle" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies the angle of each repeating symbol, in degrees.  If AngleControl evaluates to FromAngle then this specifies the absolute angle of the symbol.  If AngleControl evaluates to FromGeometry then this specifies the symbol angle relative to the geometry.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="StartOffset" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies where the symbol distribution begins, relative to the start of the feature.  If specified this must be greater than or equal to zero.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="EndOffset" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies where the symbol distribution ends, relative to the end of the feature.  If specified this must be greater than or equal to zero.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Repeat" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies the separation between repeating symbols.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="VertexAngleLimit" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies the limiting angle, in degrees, by a which the feature geometry can change before some of the VertexControl options take effect.  If specified this must be greater than or equal to zero.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="VertexJoin" type="xs:string" default="'Round'" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies the wrapping behavior at vertices for all graphic elements.  Only applies if VertexControl evaluates to OverlapWrap.  This must evaluate to one of: None, Bevel, Round (default), or Miter.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="VertexMiterLimit" type="xs:string" default="5.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The limit to use when drawing miter vertex joins.  A miter vertex join is trimmed if the ratio of the miter length to symbol height is greater than the miter limit.  If specified this must be greater than zero.  Defaults to 5.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="DefaultPath" type="Path" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies the default path attributes to use when drawing the symbol.  These apply to any centerline that gets drawn where the symbol can't draw, and to path elements that don't specify attributes.  The geometry contained in this path is ignored and should be empty.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="AreaUsage">
+    <xs:annotation>
+      <xs:documentation>Specifies how a symbol is used in the context of area features.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="AngleControl" type="xs:string" default="'FromAngle'" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies how the symbol angle is defined.  This must evaluate to one of: FromAngle (default) or FromGeometry.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="OriginControl" type="xs:string" default="'Global'" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies how the symbol grid origin is defined.  This must evaluate to one of: Global (default), Local, or Centroid.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ClippingControl" type="xs:string" default="'Clip'" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies the clipping behavior of the symbol at polygon boundaries.  This must evaluate to one of: Clip (default), Inside, or Overlap.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Angle" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies the angle of each repeating symbol, in degrees.  If AngleControl evaluates to FromAngle then this specifies the absolute angle of the symbol.  If AngleControl evaluates to FromGeometry then this specifies the symbol angle relative to the geometry.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="OriginX" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The x-coordinate of the symbol grid origin, in mm.  Only applies if OriginControl evaluates to Global or Local.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="OriginY" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The y-coordinate of the symbol grid origin, in mm.  Only applies if OriginControl evaluates to Global or Local.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="RepeatX" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The horizontal separation between symbols, in mm.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="RepeatY" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The vertical separation between symbols, in mm.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="BufferWidth" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The width, in mm, of the buffer zone relative to the polygon boundary in which the symbol is rendered.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="Parameter">
+    <xs:annotation>
+      <xs:documentation>The metadata for a symbol parameter.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Identifier" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The parameter identifier as used in the symbol.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="DefaultValue" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The default value of the parameter if no override is defined in the symbol instance.  This can be an expression.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="DisplayName" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>An optional short description of the parameter.  This can be used, for example, to ask the user to specify a parameter value.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Description" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>An optional long description of the parameter.  This might include a description of useful values for this parameter.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="DataType" type="DataType" default="String" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>An optional explicit declaration of data type or data usage context.  This is a hint used by the UI when assigning a value to this parameter.  Defaults to String.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ParameterDefinition">
+    <xs:annotation>
+      <xs:documentation>A collection of symbol parameters.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Parameter" type="Parameter" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SimpleSymbol">
+    <xs:annotation>
+      <xs:documentation>Defines a reference to a SimpleSymbolDefinition, either inlined or a library reference.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:choice>
+        <xs:element name="SimpleSymbolDefinition" type="SimpleSymbolDefinition">
+          <xs:annotation>
+            <xs:documentation>An inlined SimpleSymbolDefinition.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="ResourceId" type="xs:string">
+          <xs:annotation>
+            <xs:documentation>A library reference to an existing SimpleSymbolDefinition.</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+      </xs:choice>
+      <xs:element name="RenderingPass" type="xs:string" default="0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The optional rendering pass in which this symbol definition draws.  If specified this must be greater than or equal to zero.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="SimpleSymbolDefinition">
+    <xs:annotation>
+      <xs:documentation>A symbol definition containing a collection of graphic elements and information on how to use these in the context of different feature geometry types.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="SymbolDefinitionBase">
+        <xs:sequence>
+          <xs:element name="Graphics" type="Graphics">
+            <xs:annotation>
+              <xs:documentation>The collection of graphic elements defining this symbol.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ResizeBox" type="ResizeBox" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The optional box used to resize and reposition select graphic elements.  The graphical extent of all elements with ResizeControl set to AddToResizeBox will be added to this box, potentially causing it to grow in size.  Any change in size causes all elements with ResizeControl set to AdjustToResizeBox to be proportionally resized and repositioned.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="PointUsage" type="PointUsage" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Specifies how the symbol is used in the context of point features.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="LineUsage" type="LineUsage" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Specifies how the symbol is used in the context of linear features.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="AreaUsage" type="AreaUsage" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Specifies how the symbol is used in the context of area features.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ParameterDefinition" type="ParameterDefinition">
+            <xs:annotation>
+              <xs:documentation>The list of parameters used in this symbol.  If a parameter is not listed here this is considered a bug in the symbol definition.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="CompoundSymbolDefinition">
+    <xs:annotation>
+      <xs:documentation>A symbol definition specified using a collection of SimpleSymbolDefinition elements or references.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="SymbolDefinitionBase">
+        <xs:sequence>
+          <xs:element name="SimpleSymbol" type="SimpleSymbol" minOccurs="0" maxOccurs="unbounded"/>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="Graphics">
+    <xs:annotation>
+      <xs:documentation>A collection of graphic elements.</xs:documentation>
+    </xs:annotation>
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
+      <xs:element name="Path" type="Path"/>
+      <xs:element name="Image" type="Image"/>
+      <xs:element name="Text" type="Text"/>
+    </xs:choice>
+  </xs:complexType>
+  <xs:complexType name="GraphicBase">
+    <xs:annotation>
+      <xs:documentation>Base type used with all graphic elements.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="ResizeControl" type="xs:string" default="'ResizeNone'" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Specifies how this graphic element interacts with the resize box.  This must evaluate to one of: ResizeNone (default), AddToResizeBox, or AdjustToResizeBox.  AddToResizeBox means the element's graphical extent is added to the resize box, but the element is not resized or repositioned if the resize box grows.  AdjustToResizeBox means the element is resized and repositioned relative to the resize box, but its extent is not added to the box.  ResizeNone means the element does not interact with the resize box.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="Path">
+    <xs:annotation>
+      <xs:documentation>A 2D path defining vector geometry to include in the symbol definition.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="GraphicBase">
+        <xs:sequence>
+          <xs:element name="Geometry" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>The path geometry.  The format is a sequence of segments, each represented by a letter indicating the segment type followed by one or more parameters.  Uppercase letters denote absolute values and lowercase letters denote relative values.  Segment types can be one of "M" (moveto), "L" (lineto), "H" (horizontal lineto), "V" (vertical lineto), "A" (arcto), or "Z" (close segment).</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ScaleX" type="xs:string" default="1.0" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The amount to scale the path geometry in the horizontal direction. This is only applied to the Geometry element. Defaults to 1 if not specified.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ScaleY" type="xs:string" default="1.0" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The amount to scale the path geometry in the vertical direction. This is only applied to the Geometry element. Defaults to 1 if not specified.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="FillColor" type="xs:string" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The ARGB color used to fill the path.  If this element is missing or empty then no fill is applied to the path.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="LineColor" type="xs:string" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The ARGB color used to draw the path outline.  If this element is missing or empty then no path outline is drawn.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="LineWeight" type="xs:string" default="0.0" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The weight to use when drawing the path outline, in mm.  If specified this must be greater than or equal to zero.  Defaults to 0.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="LineWeightScalable" type="xs:string" default="true" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Boolean value which specifies whether the line weight scales with the symbol.  This behavior is independent of the symbol's size context.  This must evaluate to True (default) or False.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="LineCap" type="xs:string" default="'Round'" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The cap type to use at the ends of each segment in the path outline.  This must evaluate to one of: None, Round (default), Triangle, or Square.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="LineJoin" type="xs:string" default="'Round'" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The join type to use at each vertex in the path outline.  This must evaluate to one of: None, Bevel, Round (default), or Miter.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="LineMiterLimit" type="xs:string" default="5.0" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The limit to use when drawing miter joins.  A miter join is trimmed if the ratio of the miter length to line weight is greater than the miter limit.  If specified this must be greater than zero.  Defaults to 5.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="ImageReference">
+    <xs:annotation>
+      <xs:documentation>Defines a library reference used with image elements.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="ResourceId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The resource where the image data is stored.  For non-inlined symbol definitions this can be an empty string, in which case the resource is assumed to be the parent symbol definition resource.  For inlined symbol definitions this must point to a separate resource.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LibraryItemName" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of the resource data storing the image.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="Image">
+    <xs:annotation>
+      <xs:documentation>An image to include in the symbol definition.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="GraphicBase">
+        <xs:sequence>
+          <xs:choice>
+            <xs:element name="Content" type="xs:base64Binary">
+              <xs:annotation>
+                <xs:documentation>An embedded PNG image stored using base64 binary.</xs:documentation>
+              </xs:annotation>
+            </xs:element>
+            <xs:element name="Reference" type="ImageReference">
+              <xs:annotation>
+                <xs:documentation>A library reference to a PNG image.</xs:documentation>
+              </xs:annotation>
+            </xs:element>
+          </xs:choice>
+          <xs:element name="SizeX" type="xs:string" default="1.0">
+            <xs:annotation>
+              <xs:documentation>The width of the image, in mm.  This must be greater than zero.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="SizeY" type="xs:string" default="1.0">
+            <xs:annotation>
+              <xs:documentation>The height of the image, in mm.  This must be greater than zero.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="SizeScalable" type="xs:string" default="true" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Boolean value which specifies whether the image sizes scale with the symbol.  This behavior is independent of the symbol's size context.  This must evaluate to True (default) or False.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Angle" type="xs:string" default="0.0" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The angle of the image in symbol space, in degrees.  Defaults to 0.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="PositionX" type="xs:string" default="0.0" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The x-coordinate of the image center in symbol space, in mm.  Defaults to 0.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="PositionY" type="xs:string" default="0.0" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The y-coordinate of the image center in symbol space, in mm.  Defaults to 0.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="TextFrame">
+    <xs:annotation>
+      <xs:documentation>Defines a frame used with text elements.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="LineColor" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The ARGB color used to draw the text frame border.  If this element is missing or empty then no frame border is drawn.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="FillColor" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The ARGB color used to fill the text frame.  If this element is missing or empty then no fill is drawn.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="OffsetX" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The additional horizontal offset of the frame relative to the text box, in mm.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="OffsetY" type="xs:string" default="0.0" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The additional vertical offset of the frame relative to the text box, in mm.  Defaults to 0.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="Text">
+    <xs:annotation>
+      <xs:documentation>A text string to include in the symbol definition.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="GraphicBase">
+        <xs:sequence>
+          <xs:element name="Content" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>The string content for the text.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="FontName" type="xs:string" default="'Arial'">
+            <xs:annotation>
+              <xs:documentation>The name of the font to use for the text.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Bold" type="xs:string" default="false" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Specifies if the text should be drawn using a bold font.  This must evaluate to True or False (default).</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Italic" type="xs:string" default="false" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Specifies if the text should be drawn using an italic font.  This must evaluate to True or False (default).</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Underlined" type="xs:string" default="false" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Specifies if the text should be underlined.  This must evaluate to True or False (default).</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Overlined" type="xs:string" default="false" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Specifies if the text should be overlined.  This must evaluate to True or False (default).</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ObliqueAngle" type="xs:string" default="0.0" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>A numeric value between -85.0 and 85.0 representing the angle in degrees forward (for positive) or backwards (for negative) that the text should be obliqued (a la shear or skew transform).  Defaults to 0.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="TrackSpacing" type="xs:string" default="1.0" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>A numeric value between 0.75 and 10.0, representing the text "tracking" factor to apply to inter-character spacing, effectively a multiplier of each character's advance width.  Values less than 1.0 condense the text, spacing individual characters closer together than normally dictated by the font, whereas values greater than 1.0 expand the text, spacing characters farther apart.  The outline of individual characters is not altered by this element, only the spacing between them and adjacent characters.  Defaults to 1.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Height" type="xs:string" default="4.0" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The height of the text, in mm.  If specified this must be greater than zero.  Defaults to 4.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="HeightScalable" type="xs:string" default="true" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Boolean value which specifies whether the font height scales with the symbol.  This behavior is independent of the symbol's size context.  This must evaluate to True (default) or False.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Angle" type="xs:string" default="0.0" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The angle of the text in symbol space, in degrees.  Defaults to 0.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="PositionX" type="xs:string" default="0.0" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The x-coordinate of the text in symbol space, in mm.  Horizontal alignment of the text box is relative to this coordinate.  Defaults to 0.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="PositionY" type="xs:string" default="0.0" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The y-coordinate of the text in symbol space, in mm.  Vertical alignment of the text box is relative to this coordinate.  Defaults to 0.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="HorizontalAlignment" type="xs:string" default="'Center'" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The horizontal alignment of the text box relative to its position.  This must evaluate to one of: Left, Center (default), or Right.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="VerticalAlignment" type="xs:string" default="'Halfline'" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The vertical alignment of the text box relative to its position.  This must evaluate to one of: Bottom, Baseline, Halfline (default), Capline, or Top.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Justification" type="xs:string" default="'FromAlignment'" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The horizontal justification of individual lines of text in a multi-line text string.  This must evaluate to one of: Left, Center, Right, Justified, or FromAlignment (default).</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="LineSpacing" type="xs:string" default="1.05" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The spacing between individual lines of text in a multi-line text string, as a multiple of the font height.  If specified this must be greater than zero.  Defaults to 1.05.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="TextColor" type="xs:string" default="ff000000" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The ARGB color used to draw the text.  Defaults to black (ff000000).</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="GhostColor" type="xs:string" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The ARGB color used to draw the ghosted text.  If this element is missing or empty then no ghosting is drawn.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Frame" type="TextFrame" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>If specified, defines the kind of frame drawn around the text.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Markup" type="xs:string" default="'Plain'" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>The markup format of the string content.  Defaults to 'Plain'.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:simpleType name="GrowControl">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed GrowControl values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="GrowInX"/>
+      <xs:enumeration value="GrowInY"/>
+      <xs:enumeration value="GrowInXY"/>
+      <xs:enumeration value="GrowInXYMaintainAspect"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="AngleControl">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed AngleControl values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="FromAngle"/>
+      <xs:enumeration value="FromGeometry"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="UnitsControl">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed UnitsControl values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Absolute"/>
+      <xs:enumeration value="Parametric"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="VertexControl">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed VertexControl values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="OverlapNone"/>
+      <xs:enumeration value="OverlapDirect"/>
+      <xs:enumeration value="OverlapWrap"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="VertexJoin">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed VertexJoin values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="None"/>
+      <xs:enumeration value="Bevel"/>
+      <xs:enumeration value="Round"/>
+      <xs:enumeration value="Miter"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="OriginControl">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed OriginControl values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Global"/>
+      <xs:enumeration value="Local"/>
+      <xs:enumeration value="Centroid"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="ClippingControl">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed ClippingControl values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Clip"/>
+      <xs:enumeration value="Inside"/>
+      <xs:enumeration value="Overlap"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="ResizeControl">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed ResizeControl values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="ResizeNone"/>
+      <xs:enumeration value="AddToResizeBox"/>
+      <xs:enumeration value="AdjustToResizeBox"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="LineCap">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed LineCap values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="None"/>
+      <xs:enumeration value="Round"/>
+      <xs:enumeration value="Triangle"/>
+      <xs:enumeration value="Square"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="LineJoin">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed LineJoin values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="None"/>
+      <xs:enumeration value="Bevel"/>
+      <xs:enumeration value="Round"/>
+      <xs:enumeration value="Miter"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="HorizontalAlignment">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed HorizontalAlignment values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Left"/>
+      <xs:enumeration value="Center"/>
+      <xs:enumeration value="Right"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="VerticalAlignment">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed VerticalAlignment values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Bottom"/>
+      <xs:enumeration value="Baseline"/>
+      <xs:enumeration value="Halfline"/>
+      <xs:enumeration value="Capline"/>
+      <xs:enumeration value="Top"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="Justification">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed Justification values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Left"/>
+      <xs:enumeration value="Center"/>
+      <xs:enumeration value="Right"/>
+      <xs:enumeration value="Justified"/>
+      <xs:enumeration value="FromAlignment"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="DataType">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed DataType values.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="String"/>
+      <xs:enumeration value="Boolean"/>
+      <xs:enumeration value="Integer"/>
+      <xs:enumeration value="Real"/>
+      <xs:enumeration value="Color"/>
+      <xs:enumeration value="Angle"/>
+      <xs:enumeration value="FillColor"/>
+      <xs:enumeration value="LineColor"/>
+      <xs:enumeration value="LineWeight"/>
+      <xs:enumeration value="Content"/>
+      <xs:enumeration value="Markup"/>
+      <xs:enumeration value="FontName"/>
+      <xs:enumeration value="Bold"/>
+      <xs:enumeration value="Italic"/>
+      <xs:enumeration value="Underlined"/>
+      <xs:enumeration value="Overlined"/>
+      <xs:enumeration value="ObliqueAngle"/>
+      <xs:enumeration value="TrackSpacing"/>
+      <xs:enumeration value="FontHeight"/>
+      <xs:enumeration value="HorizontalAlignment"/>
+      <xs:enumeration value="VerticalAlignment"/>
+      <xs:enumeration value="Justification"/>
+      <xs:enumeration value="LineSpacing"/>
+      <xs:enumeration value="TextColor"/>
+      <xs:enumeration value="GhostColor"/>
+      <xs:enumeration value="FrameLineColor"/>
+      <xs:enumeration value="FrameFillColor"/>
+      <xs:enumeration value="StartOffset"/>
+      <xs:enumeration value="EndOffset"/>
+      <xs:enumeration value="RepeatX"/>
+      <xs:enumeration value="RepeatY"/>
+    </xs:restriction>
+  </xs:simpleType>
+</xs:schema>

Added: trunk/MgDev/Common/Schema/WatermarkDefinition-2.4.0.xsd
===================================================================
--- trunk/MgDev/Common/Schema/WatermarkDefinition-2.4.0.xsd	                        (rev 0)
+++ trunk/MgDev/Common/Schema/WatermarkDefinition-2.4.0.xsd	2011-07-21 21:54:29 UTC (rev 5996)
@@ -0,0 +1,284 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.4.0">
+  <xs:include schemaLocation="SymbolDefinition-2.4.0.xsd"/>
+  <xs:element name="WatermarkDefinition">
+    <xs:annotation>
+      <xs:documentation>The specification of a watermark.</xs:documentation>
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="WatermarkDefinitionType">
+          <xs:attribute name="version" type="xs:string" use="required" fixed="2.4.0"/>
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+  <xs:simpleType name="UnitType">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed length units for a watermark position.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Inches"/>
+      <xs:enumeration value="Centimeters"/>
+      <xs:enumeration value="Millimeters"/>
+      <xs:enumeration value="Pixels"/>
+      <xs:enumeration value="Points"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="HorizontalAlignmentType">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed horizontal alignment values for a watermark position.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Left"/>
+      <xs:enumeration value="Center"/>
+      <xs:enumeration value="Right"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="HorizontalPositionType">
+    <xs:annotation>
+      <xs:documentation>Defines the horizontal position of a watermark.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Offset" type="xs:double" default="0.0">
+        <xs:annotation>
+          <xs:documentation>The horizontal offset for the position.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Unit" type="UnitType" default="Points">
+        <xs:annotation>
+          <xs:documentation>The unit for the offset.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Alignment" type="HorizontalAlignmentType" default="Center">
+        <xs:annotation>
+          <xs:documentation>The horizontal alignment for the position.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:simpleType name="VerticalAlignmentType">
+    <xs:annotation>
+      <xs:documentation>Enumerates the allowed vertical alignments for a watermark position.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Top"/>
+      <xs:enumeration value="Center"/>
+      <xs:enumeration value="Bottom"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="VerticalPositionType">
+    <xs:annotation>
+      <xs:documentation>Defines the vertical position of a watermark.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Offset" type="xs:double" default="0.0">
+        <xs:annotation>
+          <xs:documentation>The vertical offset for the position.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Unit" type="UnitType" default="Points">
+        <xs:annotation>
+          <xs:documentation>The unit for the offset.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Alignment" type="VerticalAlignmentType"  default="Center">
+        <xs:annotation>
+          <xs:documentation>The vertical alignment for the position.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="PositionType" abstract="true">
+    <xs:annotation>
+      <xs:documentation>Abstract base type used with all watermark positions.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="XYPositionType">
+    <xs:annotation>
+      <xs:documentation>Positions a watermark at a single X/Y location.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="PositionType">
+        <xs:sequence>
+          <xs:element name="XPosition" type="HorizontalPositionType">
+            <xs:annotation>
+              <xs:documentation>The position along the X-axis.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="YPosition" type="VerticalPositionType">
+            <xs:annotation>
+              <xs:documentation>The position along the Y-axis.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="TilePositionType">
+    <xs:annotation>
+      <xs:documentation>Positions a watermark according to a regular grid.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="PositionType">
+        <xs:sequence>
+          <xs:element name="TileWidth" type="xs:double" default="150.0">
+            <xs:annotation>
+              <xs:documentation>The width of each tile in the grid.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="TileHeight" type="xs:double" default="150.0">
+            <xs:annotation>
+              <xs:documentation>The height of each tile in the grid.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="HorizontalPosition" type="HorizontalPositionType">
+            <xs:annotation>
+              <xs:documentation>The horizontal position of the watermark within a tile.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="VerticalPosition" type="VerticalPositionType">
+            <xs:annotation>
+              <xs:documentation>The vertical position of the watermark within a tile.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="WatermarkAppearanceType">
+    <xs:annotation>
+      <xs:documentation>Defines the appearance of a watermark.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Transparency" minOccurs="0" default="0.0">
+        <xs:annotation>
+          <xs:documentation>The transparency of the watermark in the range 0-100.  The default value is 0 (opaque).</xs:documentation>
+        </xs:annotation>
+        <xs:simpleType>
+          <xs:restriction base="xs:double">
+            <xs:minInclusive value="0.0"/>
+            <xs:maxInclusive value="100.0"/>
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:element>
+      <xs:element name="Rotation" minOccurs="0" default="0.0">
+        <xs:annotation>
+          <xs:documentation>The rotation of the watermark, in degrees, in the range 0-360.  The default value is 0.</xs:documentation>
+        </xs:annotation>
+        <xs:simpleType>
+          <xs:restriction base="xs:double">
+            <xs:minInclusive value="0.0"/>
+            <xs:maxInclusive value="360.0"/>
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="WatermarkDefinitionType">
+    <xs:annotation>
+      <xs:documentation>A watermark definition containing content, appearance, and position information.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Content">
+        <xs:annotation>
+          <xs:documentation>A symbol definition defining the content of the watermark.</xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+          <xs:choice>
+            <xs:element name="SimpleSymbolDefinition" type="SimpleSymbolDefinition" />
+            <xs:element name="CompoundSymbolDefinition" type="CompoundSymbolDefinition" />
+          </xs:choice>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="Appearance" type="WatermarkAppearanceType">
+        <xs:annotation>
+          <xs:documentation>The appearance of the watermark.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Position">
+        <xs:annotation>
+          <xs:documentation>The position of the watermark.</xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+          <xs:choice>
+            <xs:element name="XYPosition" type="XYPositionType" />
+            <xs:element name="TilePosition" type="TilePositionType" />
+          </xs:choice>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:simpleType name="UsageType">
+    <xs:annotation>
+      <xs:documentation>Specifies the context in which the watermark is displayed.</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="WMS">
+        <xs:annotation>
+          <xs:documentation>Watermark is displayed in WMS.</xs:documentation>
+        </xs:annotation>
+      </xs:enumeration>
+      <xs:enumeration value="Viewer">
+        <xs:annotation>
+          <xs:documentation>Watermark is displayed in AJAX or Fusion viewers.</xs:documentation>
+        </xs:annotation>
+      </xs:enumeration>
+      <xs:enumeration value="All">
+        <xs:annotation>
+          <xs:documentation>Watermark is displayed in all contexts.</xs:documentation>
+        </xs:annotation>
+      </xs:enumeration>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="WatermarkType">
+    <xs:annotation>
+      <xs:documentation>A watermark instance used in a map definition or layer definition.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of the watermark.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ResourceId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>A library reference to an existing WatermarkDefinition.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Usage" type="UsageType" minOccurs="0" default="All">
+        <xs:annotation>
+          <xs:documentation>The context in which the watermark is displayed.  Defaults to All.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="AppearanceOverride" type="WatermarkAppearanceType" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>If specified, overrides the appearance of the watermark definition.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="PositionOverride" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>If specified, overrides the position of the watermark definition.</xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+          <xs:choice>
+            <xs:element name="XYPosition" type="XYPositionType" />
+            <xs:element name="TilePosition" type="TilePositionType" />
+          </xs:choice>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="WatermarkInstanceCollectionType">
+    <xs:annotation>
+      <xs:documentation>A collection of watermarks used by a map definition or layer definition.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Watermark" type="WatermarkType" minOccurs="0" maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>

Modified: trunk/MgDev/Common/Stylization/SE_StyleVisitor.cpp
===================================================================
--- trunk/MgDev/Common/Stylization/SE_StyleVisitor.cpp	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/Stylization/SE_StyleVisitor.cpp	2011-07-21 21:54:29 UTC (rev 5996)
@@ -485,6 +485,8 @@
         ParseStringExpression(path.GetLineCap(), primitive->cap, Path::sLineCapDefault, Path::sLineCapValues);
         ParseStringExpression(path.GetLineJoin(), primitive->join, Path::sLineJoinDefault, Path::sLineJoinValues);
         ParseDoubleExpression(path.GetLineMiterLimit(), primitive->miterLimit, 5.0);
+        ParseDoubleExpression(path.GetScaleX(), primitive->scaleX, 1.0);
+        ParseDoubleExpression(path.GetScaleY(), primitive->scaleY, 1.0);
         ParseStringExpression(path.GetResizeControl(), primitive->resizeControl, GraphicElement::sResizeControlDefault, GraphicElement::sResizeControlValues);
 
         // if the color is transparent there's no point in drawing this
@@ -498,7 +500,9 @@
                               || primitive->cap.expression
                               || primitive->join.expression
                               || primitive->miterLimit.expression
-                              || primitive->resizeControl.expression);
+                              || primitive->resizeControl.expression
+                              || primitive->scaleX.expression
+                              || primitive->scaleY.expression);
     }
     else
     {
@@ -513,6 +517,8 @@
         ParseStringExpression(path.GetLineCap(), primitive->cap, Path::sLineCapDefault, Path::sLineCapValues);
         ParseStringExpression(path.GetLineJoin(), primitive->join, Path::sLineJoinDefault, Path::sLineJoinValues);
         ParseDoubleExpression(path.GetLineMiterLimit(), primitive->miterLimit, 5.0);
+        ParseDoubleExpression(path.GetScaleX(), primitive->scaleX, 1.0);
+        ParseDoubleExpression(path.GetScaleY(), primitive->scaleY, 1.0);
         ParseStringExpression(path.GetResizeControl(), primitive->resizeControl, GraphicElement::sResizeControlDefault, GraphicElement::sResizeControlValues);
 
         primitive->cacheable = !(primitive->weight.expression
@@ -522,7 +528,9 @@
                               || primitive->cap.expression
                               || primitive->join.expression
                               || primitive->miterLimit.expression
-                              || primitive->resizeControl.expression);
+                              || primitive->resizeControl.expression
+                              || primitive->scaleX.expression
+                              || primitive->scaleY.expression);
     }
 }
 

Modified: trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.cpp
===================================================================
--- trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.cpp	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.cpp	2011-07-21 21:54:29 UTC (rev 5996)
@@ -149,9 +149,22 @@
     else // default is Round
         ret->lineStroke.join = SE_LineJoin_Round;
 
+    double dScaleX = scaleX.evaluate(ctx->exec);
+    double dScaleY = scaleY.evaluate(ctx->exec);
+
     // populate the line buffer
-    ret->geometry->Transform(*ctx->xform, CalcTolerance(ctx));
-
+    if(dScaleX != 1.0 || dScaleY != 1.0)
+    {
+        // combine the path scaling with the style transform
+        SE_Matrix xform(dScaleX, 0.0, 0.0, 0.0, dScaleY, 0.0);
+        xform.premultiply(*ctx->xform);
+        ret->geometry->Transform(xform, CalcTolerance(ctx));
+    }
+    else
+    {
+        ret->geometry->Transform(*ctx->xform, CalcTolerance(ctx));
+    }
+    
     // If the line buffer contains dots (zero-length segments) then replace them
     // with very short horizontal lines.  When the symbol gets applied to the
     // geometry these segments will then have the correct orientation, and this
@@ -266,8 +279,21 @@
         ret->lineStroke.join = SE_LineJoin_Round;
 
     // populate the line buffer
-    ret->geometry->Transform(*ctx->xform, CalcTolerance(ctx));
+    double dScaleX = scaleX.evaluate(ctx->exec);
+    double dScaleY = scaleY.evaluate(ctx->exec);
 
+    if(dScaleX != 1.0 || dScaleY != 1.0)
+    {
+        // combine the path scaling with the style transform
+        SE_Matrix xform(dScaleX, 0.0, 0.0, 0.0, dScaleY, 0.0);
+        xform.premultiply(*ctx->xform);
+        ret->geometry->Transform(xform, CalcTolerance(ctx));
+    }
+    else
+    {
+        ret->geometry->Transform(*ctx->xform, CalcTolerance(ctx));
+    }
+
     // TODO: here we would implement a rotating calipers algorithm to get a tighter
     //       oriented box, but for now just get the axis-aligned bounds of the path
     SE_Bounds* seb = ret->geometry->xf_bounds();

Modified: trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.h
===================================================================
--- trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.h	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.h	2011-07-21 21:54:29 UTC (rev 5996)
@@ -86,6 +86,8 @@
     SE_String join;
     SE_String cap;
     SE_Double miterLimit;
+    SE_Double scaleX;
+    SE_Double scaleY;
 
     SE_INLINE SE_Polyline()
     {}

Modified: trunk/MgDev/Server/src/UnitTesting/TestMdfModel.cpp
===================================================================
--- trunk/MgDev/Server/src/UnitTesting/TestMdfModel.cpp	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Server/src/UnitTesting/TestMdfModel.cpp	2011-07-21 21:54:29 UTC (rev 5996)
@@ -147,15 +147,29 @@
         Ptr<MgResourceIdentifier> ldfresV = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestDummy.LayerDefinition");
         Ptr<MgResourceIdentifier> mdfresV = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestDummy.MapDefinition");
 
+        //symbol definition schema versions
+        const int SYMBOL_SCHEMA_COUNT = 2 + 1;      //2 for 1.x.x and 1 for 2.x.x
+        std::vector<Version> symbolVersions(SYMBOL_SCHEMA_COUNT);
+        //symbol 1.0.0 - MapGuide 2007
+        symbolVersions[0].SetMajor(1);
+        symbolVersions[0].SetMinor(0);
+        symbolVersions[0].SetRevision(0);
+        //symbol 1.1.0 - MapGuide 2008
+        symbolVersions[1].SetMajor(1);
+        symbolVersions[1].SetMinor(1);
+        symbolVersions[1].SetRevision(0);
+        //symbol 2.4.0 - MapGuide 2012
+        symbolVersions[2].SetMajor(2);
+        symbolVersions[2].SetMinor(4);
+        symbolVersions[2].SetRevision(0);
+
         // ------------------------------------------------------
         // process symbol #1 - a simple symbol definition
         // ------------------------------------------------------
 
         // iterate over the symbol definition schema versions
-        for (int minorVersion=1; minorVersion>=0; --minorVersion)
+        for (auto iter = symbolVersions.begin(); iter != symbolVersions.end(); iter ++)
         {
-            Version symbolDefVersion(1, minorVersion, 0);
-
             Ptr<MgResourceIdentifier> sdres = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestSimpleSymbol.SymbolDefinition");
 
             // parse the symbol - this exercises MdfParser deserialization
@@ -171,7 +185,7 @@
             auto_ptr<SymbolDefinition> symbolDef1(parser.DetachSymbolDefinition());
             CPPUNIT_ASSERT(symbolDef1.get() != NULL);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestSimpleSymbol_Copy1.sd", symbolDef1.get(), &symbolDefVersion);
+            parser.WriteToFile("../UnitTestFiles/MdfTestSimpleSymbol_Copy1.sd", symbolDef1.get(), &*iter);
             CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestSimpleSymbol_Copy1.sd"));
 
             // parse and resave the newly written file
@@ -183,7 +197,7 @@
             auto_ptr<SymbolDefinition> symbolDef2(parser.DetachSymbolDefinition());
             CPPUNIT_ASSERT(symbolDef2.get() != NULL);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestSimpleSymbol_Copy2.sd", symbolDef2.get(), &symbolDefVersion);
+            parser.WriteToFile("../UnitTestFiles/MdfTestSimpleSymbol_Copy2.sd", symbolDef2.get(), &*iter);
             CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestSimpleSymbol_Copy2.sd"));
 
             // compare the two files
@@ -207,11 +221,8 @@
         // process symbol #2 - a compound symbol definition
         // ------------------------------------------------------
 
-        // iterate over the symbol definition schema versions
-        for (int minorVersion=1; minorVersion>=0; --minorVersion)
+        for (auto iter = symbolVersions.begin(); iter != symbolVersions.end(); iter ++)
         {
-            Version symbolDefVersion(1, minorVersion, 0);
-
             Ptr<MgResourceIdentifier> sdres = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestCompoundSymbol.SymbolDefinition");
 
             // parse the symbol - this exercises MdfParser deserialization
@@ -227,7 +238,7 @@
             auto_ptr<SymbolDefinition> symbolDef1(parser.DetachSymbolDefinition());
             CPPUNIT_ASSERT(symbolDef1.get() != NULL);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_Copy1.sd", symbolDef1.get(), &symbolDefVersion);
+            parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_Copy1.sd", symbolDef1.get(), &*iter);
             CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_Copy1.sd"));
 
             // parse and resave the newly written file
@@ -239,7 +250,7 @@
             auto_ptr<SymbolDefinition> symbolDef2(parser.DetachSymbolDefinition());
             CPPUNIT_ASSERT(symbolDef2.get() != NULL);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_Copy2.sd", symbolDef2.get(), &symbolDefVersion);
+            parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_Copy2.sd", symbolDef2.get(), &*iter);
             CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_Copy2.sd"));
 
             // compare the two files
@@ -264,7 +275,7 @@
         // ------------------------------------------------------
 
         // iterate over the layer definition schema versions
-        const int LAYER_SCHEMA_COUNT = 4 + 1;      //4 for 1.x.x and 1 for 2.x.x
+        const int LAYER_SCHEMA_COUNT = 4 + 2;      //4 for 1.x.x and 2 for 2.x.x
         std::vector<Version> layerVersions(LAYER_SCHEMA_COUNT);
         //layer 1.0.0 - MapGuide 2007
         layerVersions[0].SetMajor(1);
@@ -286,6 +297,10 @@
         layerVersions[4].SetMajor(2);
         layerVersions[4].SetMinor(3);
         layerVersions[4].SetRevision(0);
+        //layer 2.4.0 - MapGuide 2013
+        layerVersions[5].SetMajor(2);
+        layerVersions[5].SetMinor(4);
+        layerVersions[5].SetRevision(0);
 
         for (vector<Version>::size_type layerVersionIndex = 0; layerVersionIndex != layerVersions.size(); ++layerVersionIndex)
         {
@@ -345,7 +360,7 @@
         // ------------------------------------------------------
 
         // iterate over the map definition schema versions
-        const int MAP_SCHEMA_COUNT = 1 + 1;      //1 for 1.x.x and 1 for 2.x.x
+        const int MAP_SCHEMA_COUNT = 1 + 2;      //1 for 1.x.x and 2 for 2.x.x
         std::vector<Version> mapVersions(MAP_SCHEMA_COUNT);
         //map 1.0.0 - MapGuide before 2012
         mapVersions[0].SetMajor(1);
@@ -355,6 +370,10 @@
         mapVersions[1].SetMajor(2);
         mapVersions[1].SetMinor(3);
         mapVersions[1].SetRevision(0);
+        //map 2.4.0 - MapGuide 2013
+        mapVersions[2].SetMajor(2);
+        mapVersions[2].SetMinor(4);
+        mapVersions[2].SetRevision(0);
 
         for (vector<Version>::size_type mapVersionIndex = 0; mapVersionIndex != mapVersions.size(); ++mapVersionIndex)
         {
@@ -427,8 +446,10 @@
         Version layerDefVersion12(1, 2, 0); // MapGuide 2009
         Version layerDefVersion13(1, 3, 0); // MapGuide 2010
         Version layerDefVersion23(2, 3, 0); // MapGuide 2012
+        Version layerDefVersion24(2, 4, 0); // MapGuide 2013
         Version symbolDefVersion10(1, 0, 0); // MapGuide 2008
         Version symbolDefVersion11(1, 1, 0); // MapGuide 2009
+        Version symbolDefVersion24(2, 4, 0); // MapGuide 2013
         MdfParser::SAX2Parser parser;
 
         Ptr<MgResourceIdentifier> sdresV = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestDummy.SymbolDefinition");
@@ -461,6 +482,9 @@
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy1.sd", symbolDef1.get(), &symbolDefVersion11);
             CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy1.sd"));
 
+            parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy1.sd", symbolDef1.get(), &symbolDefVersion24);
+            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy1.sd"));
+
             // parse and resave the newly written files
             Ptr<MgByteSource> src1_10 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy1.sd");
             Ptr<MgByteReader> rdr1_10 = src1_10->GetReader();
@@ -484,6 +508,17 @@
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy2.sd", symbolDef2_11.get(), &symbolDefVersion11);
             CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy2.sd"));
 
+            Ptr<MgByteSource> src1_24 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy1.sd");
+            Ptr<MgByteReader> rdr1_24 = src1_24->GetReader();
+            Ptr<MgByteSink> sink1_24 = new MgByteSink(rdr1_24);
+            Ptr<MgByte> bytes1_24 = sink1_24->ToBuffer();
+            parser.ParseString((const char*)bytes1_24->Bytes(), bytes1_24->GetLength());
+            auto_ptr<SymbolDefinition> symbolDef2_24(parser.DetachSymbolDefinition());
+            CPPUNIT_ASSERT(symbolDef2_24.get() != NULL);
+
+            parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy2.sd", symbolDef2_24.get(), &symbolDefVersion24);
+            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy2.sd"));
+
             // compare the files
             Ptr<MgByteSource> src2_10 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy2.sd");
             Ptr<MgByteReader> rdr2_10 = src2_10->GetReader();
@@ -499,37 +534,58 @@
             CPPUNIT_ASSERT(bytes1_11->GetLength() == bytes2_11->GetLength());
             CPPUNIT_ASSERT(memcmp(bytes1_11->Bytes(), bytes2_11->Bytes(), bytes1_11->GetLength()) == 0);
 
+            Ptr<MgByteSource> src2_24 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy2.sd");
+            Ptr<MgByteReader> rdr2_24 = src2_24->GetReader();
+            Ptr<MgByteSink> sink2_24 = new MgByteSink(rdr2_24);
+            Ptr<MgByte> bytes2_24 = sink2_24->ToBuffer();
+            CPPUNIT_ASSERT(bytes1_24->GetLength() == bytes2_24->GetLength());
+            CPPUNIT_ASSERT(memcmp(bytes1_24->Bytes(), bytes2_24->Bytes(), bytes2_24->GetLength()) == 0);
+
             // verify extended data support is working...
             //   - symbolDef2_10 was loaded from XML containing extended data
-            //   - symbolDef2_11 was loaded from XML containing no extended data
+            //   - symbolDef2_11 was loaded from XML containing extended data
+            //   - symbolDef2_24 was loaded from XML containing no extended data
             // the data in these object models should be the same
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy3a.sd", symbolDef2_10.get(), &symbolDefVersion11);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy3a.sd"));
+            parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3a.sd", symbolDef2_10.get(), &symbolDefVersion24);
+            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3a.sd"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy3b.sd", symbolDef2_11.get(), &symbolDefVersion11);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy3b.sd"));
+            parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3b.sd", symbolDef2_11.get(), &symbolDefVersion24);
+            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3b.sd"));
 
-            Ptr<MgByteSource> src3a_11 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy3a.sd");
-            Ptr<MgByteReader> rdr3a_11 = src3a_11->GetReader();
-            Ptr<MgByteSink> sink3a_11 = new MgByteSink(rdr3a_11);
-            Ptr<MgByte> bytes3a_11 = sink3a_11->ToBuffer();
+            parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3c.sd", symbolDef2_24.get(), &symbolDefVersion24);
+            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3c.sd"));
 
-            Ptr<MgByteSource> src3b_11 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy3b.sd");
-            Ptr<MgByteReader> rdr3b_11 = src3b_11->GetReader();
-            Ptr<MgByteSink> sink3b_11 = new MgByteSink(rdr3b_11);
-            Ptr<MgByte> bytes3b_11 = sink3b_11->ToBuffer();
+            Ptr<MgByteSource> src3a_24 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3a.sd");
+            Ptr<MgByteReader> rdr3a_24 = src3a_24->GetReader();
+            Ptr<MgByteSink> sink3a_24 = new MgByteSink(rdr3a_24);
+            Ptr<MgByte> bytes3a_24 = sink3a_24->ToBuffer();
 
-            CPPUNIT_ASSERT(bytes3a_11->GetLength() == bytes3b_11->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes3a_11->Bytes(), bytes3b_11->Bytes(), bytes3a_11->GetLength()) == 0);
+            Ptr<MgByteSource> src3b_24 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3b.sd");
+            Ptr<MgByteReader> rdr3b_24 = src3b_24->GetReader();
+            Ptr<MgByteSink> sink3b_24 = new MgByteSink(rdr3b_24);
+            Ptr<MgByte> bytes3b_24 = sink3b_24->ToBuffer();
 
+            Ptr<MgByteSource> src3c_24 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3c.sd");
+            Ptr<MgByteReader> rdr3c_24 = src3c_24->GetReader();
+            Ptr<MgByteSink> sink3c_24 = new MgByteSink(rdr3c_24);
+            Ptr<MgByte> bytes3c_24 = sink3c_24->ToBuffer();
+
+            CPPUNIT_ASSERT(bytes3a_24->GetLength() == bytes3b_24->GetLength());
+            CPPUNIT_ASSERT(memcmp(bytes3a_24->Bytes(), bytes3b_24->Bytes(), bytes3a_24->GetLength()) == 0);
+
+            CPPUNIT_ASSERT(bytes3a_24->GetLength() == bytes3c_24->GetLength());
+            CPPUNIT_ASSERT(memcmp(bytes3a_24->Bytes(), bytes3c_24->Bytes(), bytes3a_24->GetLength()) == 0);
+
             // save the new resources to the repository to validate the XML
             m_svcResource->SetResource(sdresV, rdr1_10, NULL);
             m_svcResource->DeleteResource(sdresV);
             m_svcResource->SetResource(sdresV, rdr1_11, NULL);
             m_svcResource->DeleteResource(sdresV);
-            m_svcResource->SetResource(sdresV, rdr3a_11, NULL);
+            m_svcResource->SetResource(sdresV, rdr1_24, NULL);
             m_svcResource->DeleteResource(sdresV);
+            m_svcResource->SetResource(sdresV, rdr3a_24, NULL);
+            m_svcResource->DeleteResource(sdresV);
         }
 
         // delete the files
@@ -537,8 +593,11 @@
         MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy2.sd", true);
         MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy1.sd", true);
         MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy2.sd", true);
-        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy3a.sd", true);
-        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy3b.sd", true);
+        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy1.sd", true);
+        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy2.sd", true);
+        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3a.sd", true);
+        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3b.sd", true);
+        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3c.sd", true);
 
         // ------------------------------------------------------
         // process layer definition with type styles
@@ -579,6 +638,9 @@
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v23_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion23);
             CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy1.ldf"));
 
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy1.ldf"));
+
             // parse and resave the newly written files
             Ptr<MgByteSource> src1_09 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v09_Copy1.ldf");
             Ptr<MgByteReader> rdr1_09 = src1_09->GetReader();
@@ -646,6 +708,17 @@
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v23_Copy2.ldf", NULL, layerDef2_23.get(), NULL, NULL, NULL, NULL, &layerDefVersion23);
             CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy2.ldf"));
 
+            Ptr<MgByteSource> src1_24 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy1.ldf");
+            Ptr<MgByteReader> rdr1_24 = src1_24->GetReader();
+            Ptr<MgByteSink> sink1_24 = new MgByteSink(rdr1_24);
+            Ptr<MgByte> bytes1_24 = sink1_24->ToBuffer();
+            parser.ParseString((const char*)bytes1_24->Bytes(), bytes1_24->GetLength());
+            auto_ptr<VectorLayerDefinition> layerDef2_24(parser.DetachVectorLayerDefinition());
+            CPPUNIT_ASSERT(layerDef2_24.get() != NULL);
+
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy2.ldf", NULL, layerDef2_24.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy2.ldf"));
+
             // compare the files
             Ptr<MgByteSource> src2_09 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v09_Copy2.ldf");
             Ptr<MgByteReader> rdr2_09 = src2_09->GetReader();
@@ -689,63 +762,80 @@
             CPPUNIT_ASSERT(bytes1_23->GetLength() == bytes2_23->GetLength());
             CPPUNIT_ASSERT(memcmp(bytes1_23->Bytes(), bytes2_23->Bytes(), bytes1_23->GetLength()) == 0);
 
+            Ptr<MgByteSource> src2_24 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy2.ldf");
+            Ptr<MgByteReader> rdr2_24 = src2_24->GetReader();
+            Ptr<MgByteSink> sink2_24 = new MgByteSink(rdr2_24);
+            Ptr<MgByte> bytes2_24 = sink2_24->ToBuffer();
+            CPPUNIT_ASSERT(bytes1_24->GetLength() == bytes2_24->GetLength());
+            CPPUNIT_ASSERT(memcmp(bytes1_24->Bytes(), bytes2_24->Bytes(), bytes1_24->GetLength()) == 0);
+
             // verify extended data support is working...
             //   - layerDef2_10 was loaded from XML containing extended data
             //   - layerDef2_11 was loaded from XML containing extended data
-            //   - layerDef2_12 was loaded from XML containing no extended data
-            //   - layerDef2_13 was loaded from XML containing no extended data
-            //   - layerDef2_23 was loaded from XML containing no extended data
+            //   - layerDef2_12 was loaded from XML containing extended data
+            //   - layerDef2_13 was loaded from XML containing extended data
+            //   - layerDef2_23 was loaded from XML containing extended data
+            //     layerDef2_24 was loaded from XML containing no extended data
             // the data in these object models should be the same
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v23_Copy3a.ldf", NULL, layerDef2_10.get(), NULL, NULL, NULL, NULL, &layerDefVersion23);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3a.ldf"));
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3a.ldf", NULL, layerDef2_10.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3a.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v23_Copy3b.ldf", NULL, layerDef2_11.get(), NULL, NULL, NULL, NULL, &layerDefVersion23);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3b.ldf"));
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3b.ldf", NULL, layerDef2_11.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3b.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v23_Copy3c.ldf", NULL, layerDef2_12.get(), NULL, NULL, NULL, NULL, &layerDefVersion23);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3c.ldf"));
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3c.ldf", NULL, layerDef2_12.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3c.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v23_Copy3d.ldf", NULL, layerDef2_13.get(), NULL, NULL, NULL, NULL, &layerDefVersion23);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3d.ldf"));
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3d.ldf", NULL, layerDef2_13.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3d.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v23_Copy3e.ldf", NULL, layerDef2_23.get(), NULL, NULL, NULL, NULL, &layerDefVersion23);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3e.ldf"));
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3e.ldf", NULL, layerDef2_23.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3e.ldf"));
 
-            Ptr<MgByteSource> src3a_23 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3a.ldf");
-            Ptr<MgByteReader> rdr3a_23 = src3a_23->GetReader();
-            Ptr<MgByteSink> sink3a_23 = new MgByteSink(rdr3a_23);
-            Ptr<MgByte> bytes3a_23 = sink3a_23->ToBuffer();
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3f.ldf", NULL, layerDef2_24.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3f.ldf"));
 
-            Ptr<MgByteSource> src3b_23 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3b.ldf");
-            Ptr<MgByteReader> rdr3b_23 = src3b_23->GetReader();
-            Ptr<MgByteSink> sink3b_23 = new MgByteSink(rdr3b_23);
-            Ptr<MgByte> bytes3b_23 = sink3b_23->ToBuffer();
+            Ptr<MgByteSource> src3a_24 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3a.ldf");
+            Ptr<MgByteReader> rdr3a_24 = src3a_24->GetReader();
+            Ptr<MgByteSink> sink3a_24 = new MgByteSink(rdr3a_24);
+            Ptr<MgByte> bytes3a_24 = sink3a_24->ToBuffer();
 
-            Ptr<MgByteSource> src3c_23 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3c.ldf");
-            Ptr<MgByteReader> rdr3c_23 = src3c_23->GetReader();
-            Ptr<MgByteSink> sink3c_23 = new MgByteSink(rdr3c_23);
-            Ptr<MgByte> bytes3c_23 = sink3c_23->ToBuffer();
+            Ptr<MgByteSource> src3b_24 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3b.ldf");
+            Ptr<MgByteReader> rdr3b_24 = src3b_24->GetReader();
+            Ptr<MgByteSink> sink3b_24 = new MgByteSink(rdr3b_24);
+            Ptr<MgByte> bytes3b_24 = sink3b_24->ToBuffer();
 
-            Ptr<MgByteSource> src3d_23 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3d.ldf");
-            Ptr<MgByteReader> rdr3d_23 = src3d_23->GetReader();
-            Ptr<MgByteSink> sink3d_23 = new MgByteSink(rdr3d_23);
-            Ptr<MgByte> bytes3d_23 = sink3d_23->ToBuffer();
+            Ptr<MgByteSource> src3c_24 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3c.ldf");
+            Ptr<MgByteReader> rdr3c_24 = src3c_24->GetReader();
+            Ptr<MgByteSink> sink3c_24 = new MgByteSink(rdr3c_24);
+            Ptr<MgByte> bytes3c_24 = sink3c_24->ToBuffer();
 
-            Ptr<MgByteSource> src3e_23 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3e.ldf");
-            Ptr<MgByteReader> rdr3e_23 = src3e_23->GetReader();
-            Ptr<MgByteSink> sink3e_23 = new MgByteSink(rdr3e_23);
-            Ptr<MgByte> bytes3e_23 = sink3e_23->ToBuffer();
+            Ptr<MgByteSource> src3d_24 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3d.ldf");
+            Ptr<MgByteReader> rdr3d_24 = src3d_24->GetReader();
+            Ptr<MgByteSink> sink3d_24 = new MgByteSink(rdr3d_24);
+            Ptr<MgByte> bytes3d_24 = sink3d_24->ToBuffer();
 
-            CPPUNIT_ASSERT(bytes3a_23->GetLength() == bytes3b_23->GetLength());
-            CPPUNIT_ASSERT(bytes3b_23->GetLength() == bytes3c_23->GetLength());
-            CPPUNIT_ASSERT(bytes3c_23->GetLength() == bytes3d_23->GetLength());
-            CPPUNIT_ASSERT(bytes3d_23->GetLength() == bytes3e_23->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes3a_23->Bytes(), bytes3b_23->Bytes(), bytes3a_23->GetLength()) == 0);
-            CPPUNIT_ASSERT(memcmp(bytes3b_23->Bytes(), bytes3c_23->Bytes(), bytes3b_23->GetLength()) == 0);
-            CPPUNIT_ASSERT(memcmp(bytes3c_23->Bytes(), bytes3d_23->Bytes(), bytes3c_23->GetLength()) == 0);
-            CPPUNIT_ASSERT(memcmp(bytes3d_23->Bytes(), bytes3e_23->Bytes(), bytes3d_23->GetLength()) == 0);
+            Ptr<MgByteSource> src3e_24 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3e.ldf");
+            Ptr<MgByteReader> rdr3e_24 = src3e_24->GetReader();
+            Ptr<MgByteSink> sink3e_24 = new MgByteSink(rdr3e_24);
+            Ptr<MgByte> bytes3e_24 = sink3e_24->ToBuffer();
 
+            Ptr<MgByteSource> src3f_24 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3f.ldf");
+            Ptr<MgByteReader> rdr3f_24 = src3f_24->GetReader();
+            Ptr<MgByteSink> sink3f_24 = new MgByteSink(rdr3f_24);
+            Ptr<MgByte> bytes3f_24 = sink3f_24->ToBuffer();
+
+            CPPUNIT_ASSERT(bytes3a_24->GetLength() == bytes3b_24->GetLength());
+            CPPUNIT_ASSERT(bytes3b_24->GetLength() == bytes3c_24->GetLength());
+            CPPUNIT_ASSERT(bytes3c_24->GetLength() == bytes3d_24->GetLength());
+            CPPUNIT_ASSERT(bytes3d_24->GetLength() == bytes3e_24->GetLength());
+            CPPUNIT_ASSERT(bytes3e_24->GetLength() == bytes3f_24->GetLength());
+            CPPUNIT_ASSERT(memcmp(bytes3a_24->Bytes(), bytes3b_24->Bytes(), bytes3a_24->GetLength()) == 0);
+            CPPUNIT_ASSERT(memcmp(bytes3b_24->Bytes(), bytes3c_24->Bytes(), bytes3b_24->GetLength()) == 0);
+            CPPUNIT_ASSERT(memcmp(bytes3c_24->Bytes(), bytes3d_24->Bytes(), bytes3c_24->GetLength()) == 0);
+            CPPUNIT_ASSERT(memcmp(bytes3d_24->Bytes(), bytes3e_24->Bytes(), bytes3d_24->GetLength()) == 0);
+            CPPUNIT_ASSERT(memcmp(bytes3e_24->Bytes(), bytes3f_24->Bytes(), bytes3e_24->GetLength()) == 0);
             // save the new resources to the repository to validate the XML
             m_svcResource->SetResource(ldfresV, rdr1_09, NULL);
             m_svcResource->DeleteResource(ldfresV);
@@ -759,8 +849,10 @@
             m_svcResource->DeleteResource(ldfresV);
             m_svcResource->SetResource(ldfresV, rdr1_23, NULL);
             m_svcResource->DeleteResource(ldfresV);
-            m_svcResource->SetResource(ldfresV, rdr3a_23, NULL);
+            m_svcResource->SetResource(ldfresV, rdr1_24, NULL);
             m_svcResource->DeleteResource(ldfresV);
+            m_svcResource->SetResource(ldfresV, rdr3a_24, NULL);
+            m_svcResource->DeleteResource(ldfresV);
         }
 
         // delete the files
@@ -770,6 +862,7 @@
         MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v12_Copy1.ldf", true);
         MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v13_Copy1.ldf", true);
         MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy1.ldf", true);
+        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy1.ldf", true);
 
         MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v09_Copy2.ldf", true);
         MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v10_Copy2.ldf", true);
@@ -777,12 +870,14 @@
         MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v12_Copy2.ldf", true);
         MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v13_Copy2.ldf", true);
         MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy2.ldf", true);
+        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy2.ldf", true);
 
-        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3a.ldf", true);
-        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3b.ldf", true);
-        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3c.ldf", true);
-        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3d.ldf", true);
-        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy3e.ldf", true);
+        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3a.ldf", true);
+        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3b.ldf", true);
+        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3c.ldf", true);
+        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3d.ldf", true);
+        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3e.ldf", true);
+        MgFileUtil::DeleteFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3f.ldf", true);
 
         // As MapDefinition 1.0.0 doesn't take extension into consideration, if a MDF 2.3 is
         // stored into 1.0.0, there will be some information missing. So no test code about

Modified: trunk/MgDev/UnitTest/TestData/MdfModel/MdfTestCompoundSymbol.sd
===================================================================
--- trunk/MgDev/UnitTest/TestData/MdfModel/MdfTestCompoundSymbol.sd	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/UnitTest/TestData/MdfModel/MdfTestCompoundSymbol.sd	2011-07-21 21:54:29 UTC (rev 5996)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<CompoundSymbolDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SymbolDefinition-1.1.0.xsd" version="1.1.0">
+<CompoundSymbolDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SymbolDefinition-2.4.0.xsd" version="2.4.0">
   <Name>MdfTestCompoundSymbol</Name>
   <Description>A dummy symbol used to test the MdfModel/MdfParser code.</Description>
   <SimpleSymbol>
@@ -10,6 +10,8 @@
         <Path>
           <ResizeControl>'AddToResizeBox'</ResizeControl>
           <Geometry>M 0,0 L 5,0 L 5,5 L 0,5 L 0,0</Geometry>
+          <ScaleX>1.0</ScaleX>
+          <ScaleY>2.0</ScaleY>
           <FillColor>ffff0000</FillColor>
           <LineColor>%OUTLINE%</LineColor>
           <LineWeight>2.0*(%THICKNESS% + 1.0)</LineWeight>

Modified: trunk/MgDev/UnitTest/TestData/MdfModel/MdfTestSimpleSymbol.sd
===================================================================
--- trunk/MgDev/UnitTest/TestData/MdfModel/MdfTestSimpleSymbol.sd	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/UnitTest/TestData/MdfModel/MdfTestSimpleSymbol.sd	2011-07-21 21:54:29 UTC (rev 5996)
@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<SimpleSymbolDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SymbolDefinition-1.1.0.xsd" version="1.1.0">
+<SimpleSymbolDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SymbolDefinition-2.4.0.xsd" version="2.4.0">
   <Name>MdfTestSimpleSymbol</Name>
   <Description>A dummy symbol used to test the MdfModel/MdfParser code.</Description>
   <Graphics>
     <Path>
       <ResizeControl>'AddToResizeBox'</ResizeControl>
       <Geometry>M 0,0 L 5,0 L 5,5 L 0,5 L 0,0</Geometry>
+      <ScaleX>1.0</ScaleX>
+      <ScaleY>2.0</ScaleY>
       <FillColor>ffff0000</FillColor>
       <LineColor>%OUTLINE%</LineColor>
       <LineWeight>2.0*(%THICKNESS% + 1.0)</LineWeight>

Modified: trunk/MgDev/Web/src/schemareport/templatefiles/layerdefinition.templ
===================================================================
--- trunk/MgDev/Web/src/schemareport/templatefiles/layerdefinition.templ	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Web/src/schemareport/templatefiles/layerdefinition.templ	2011-07-21 21:54:29 UTC (rev 5996)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="LayerDefinition-2.3.0.xsd" version="2.3.0">
+<LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="LayerDefinition-2.4.0.xsd" version="2.4.0">
   <VectorLayerDefinition>
     <ResourceId>%s</ResourceId>
     <FeatureName>%s</FeatureName>

Modified: trunk/MgDev/Web/src/schemareport/templatefiles/mapdefinition.templ
===================================================================
--- trunk/MgDev/Web/src/schemareport/templatefiles/mapdefinition.templ	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Web/src/schemareport/templatefiles/mapdefinition.templ	2011-07-21 21:54:29 UTC (rev 5996)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<MapDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MapDefinition-2.3.0.xsd" version="2.3.0">
+<MapDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MapDefinition-2.4.0.xsd" version="2.4.0">
   <Name>%s</Name>
   <CoordinateSystem>%s</CoordinateSystem>
   %s

Modified: trunk/MgDev/Web/src/viewerfiles/arealayerdef.templ
===================================================================
--- trunk/MgDev/Web/src/viewerfiles/arealayerdef.templ	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Web/src/viewerfiles/arealayerdef.templ	2011-07-21 21:54:29 UTC (rev 5996)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="LayerDefinition-2.3.0.xsd" version="2.3.0">
+<LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="LayerDefinition-2.4.0.xsd" version="2.4.0">
   <VectorLayerDefinition>
     <ResourceId>%s</ResourceId>
     <FeatureName>%s</FeatureName>

Modified: trunk/MgDev/Web/src/viewerfiles/layerdefinition.templ
===================================================================
--- trunk/MgDev/Web/src/viewerfiles/layerdefinition.templ	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Web/src/viewerfiles/layerdefinition.templ	2011-07-21 21:54:29 UTC (rev 5996)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="LayerDefinition-2.3.0.xsd" version="2.3.0">
+<LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="LayerDefinition-2.4.0.xsd" version="2.4.0">
   <VectorLayerDefinition>
     <ResourceId>%s</ResourceId>
     <FeatureName>%s</FeatureName>

Modified: trunk/MgDev/Web/src/viewerfiles/linelayerdef.templ
===================================================================
--- trunk/MgDev/Web/src/viewerfiles/linelayerdef.templ	2011-07-21 14:13:02 UTC (rev 5995)
+++ trunk/MgDev/Web/src/viewerfiles/linelayerdef.templ	2011-07-21 21:54:29 UTC (rev 5996)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="LayerDefinition-2.3.0.xsd" version="2.3.0">
+<LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="LayerDefinition-2.4.0.xsd" version="2.4.0">
   <VectorLayerDefinition>
     <ResourceId>%s</ResourceId>
     <FeatureName>%s</FeatureName>



More information about the mapguide-commits mailing list