Change to new XML Schema
authorwuyizhong <wuyizhong@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 30 Jun 2006 17:55:30 +0000 (17:55 +0000)
committerwuyizhong <wuyizhong@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 30 Jun 2006 17:55:30 +0000 (17:55 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@680 6f19259b-4bc3-4df7-8a09-765794883524

Tools/XMLSchema/FrameworkDataAttributes.xsd
Tools/XMLSchema/FrameworkDataElements.xsd
Tools/XMLSchema/FrameworkDataTypes.xsd
Tools/XMLSchema/FrameworkHeaders.xsd
Tools/XMLSchema/FrameworkPlatformDataElements.xsd
Tools/XMLSchema/FrameworkPlatformDataTypes.xsd
Tools/XMLSchema/NamingConvention.xsd
Tools/XMLSchema/SurfaceArea.xsd

index 2210d9faf474ab1d7527e763fbe100320e5b50bd..aedfc868859255c50cc7d20946dbbd2036f03742 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns="http://www.TianoCore.org/2006/Edk2.0" targetNamespace="http://www.TianoCore.org/2006/Edk2.0">\r
-    <!--\r
+  <!--\r
     Filename: FrameworkDataAttributes.xsd\r
     \r
     Copyright (c) 2006, Intel Corp.\r
     WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
     \r
   -->\r
+  <xs:annotation>\r
+    <xs:documentation xml:lang="en">This schema defines EFI and Framework Attribute. Only attributeGroups are specified in this file. </xs:documentation>\r
+  </xs:annotation>\r
+  <xs:include schemaLocation="NamingConvention.xsd"/>\r
+  <xs:include schemaLocation="FrameworkDataTypes.xsd"/>\r
+  <xs:include schemaLocation="FrameworkPlatformDataTypes.xsd"/>\r
+  <!-- Fix Name data type from xs:string -->\r
+  <xs:attributeGroup name="BlockAttributes">\r
+    <xs:attribute name="Name" type="BlockNameType" use="required"/>\r
+    <xs:attribute name="Size" type="HexAddressType" use="required"/>\r
+    <xs:attribute name="Flags" type="HexAddressType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="BootModeAttributes">\r
+    <xs:attribute name="BootModeName" type="BootModeNames" use="required"/>\r
+    <xs:attribute name="Usage" type="BootModeUsage" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="DataHubAttributes">\r
+    <xs:attribute name="Usage" type="DataHubUsage" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="EventAttributes">\r
+    <xs:attribute name="Usage" type="EventUsage" use="required"/>\r
+    <xs:attribute name="EventGuidCName" type="C_NameType" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="ExternAttributes">\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="FfsAttributes">\r
+    <xs:attribute name="FfsFormatKeyword" type="KeywordType" use="required"/>\r
+    <xs:attribute name="FfsFileType" type="EfiFfsFileTypes" use="optional"/>\r
+    <xs:attribute name="FfsAttribTailPresent" type="xs:boolean" use="optional"/>\r
+    <xs:attribute name="FfsAttribRecovery" type="xs:boolean" use="optional" default="false"/>\r
+    <xs:attribute name="FfsAttribDataAlignment" type="FfsDataAlignmentType" use="optional"/>\r
+    <xs:attribute name="FfsAttribChecksumRequired" type="xs:boolean" use="optional" default="true"/>\r
+    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="FilenameAttributes">\r
+    <xs:attribute name="TagName" type="ToolsNameConvention" use="optional"/>\r
+    <xs:attribute name="ToolCode" type="ToolsNameConvention" use="optional"/>\r
+    <xs:attribute name="ToolChainFamily" type="ToolsNameConvention" use="optional"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="FlashDeviceImageAttributes">\r
+    <xs:attribute name="Name" type="xs:string" use="required"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="FlashDeviceImageFileAttributes">\r
+    <xs:attribute name="Name" type="xs:string" use="required"/>\r
+    <xs:attribute name="Region" type="xs:string" use="required"/>\r
+    <xs:attribute name="SubRegion" type="xs:string" use="optional"/>\r
+    <xs:attribute name="Optional" type="xs:boolean" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="FlashDeviceInfoAttributes">\r
+    <xs:attribute name="Name" type="xs:string" use="required"/>\r
+    <xs:attribute name="Size" type="HexAddressType" use="required"/>\r
+    <xs:attribute name="BaseAddress" type="HexAddressType" use="required"/>\r
+    <xs:attribute name="ErasePolarity" type="Polarity" use="required"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="FvRegionNameAttributes">\r
+    <xs:attribute name="FvBaseAddressPcdCName" type="C_NameType" use="required"/>\r
+    <xs:attribute name="FvRegionSizePcdCName" type="C_NameType" use="required"/>\r
+    <xs:attribute name="FvRegionAlignmentPcdCName" type="C_NameType" use="optional"/>\r
+    <xs:attribute name="FvPcdTokenSpaceGuid" type="GuidType" use="optional"/>\r
+    <xs:attribute name="Alignment" type="xs:positiveInteger" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="GuidAttributes">\r
+    <xs:attribute name="Usage" type="GuidUsage" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="GuidDeclarationAttributes">\r
+    <xs:attribute name="Name" type="UiNameType" use="required"/>\r
+    <xs:attribute name="GuidTypeList" type="GuidListType" use="optional"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="HiiPackageAttributes">\r
+    <xs:attribute name="Usage" type="HiiPackageUsage" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="HobAttributes">\r
+    <xs:attribute name="Usage" type="HobUsage" use="required"/>\r
+    <xs:attribute name="HobGuidCName" type="C_NameType" use="optional"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="IncludeHeaderAttributes">\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="IndustryStdHeaderAttributes">\r
+    <xs:attribute name="Name" type="KeywordType" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="LibraryAttributes">\r
+    <!-- LibraryAttributes is used for Libraries / Library elements in FPD files -->\r
+    <xs:attribute name="ModuleGuid" type="GuidType" use="required"/>\r
+    <xs:attribute name="ModuleVersion" type="VersionDataType" use="optional"/>\r
+    <xs:attribute name="PackageGuid" type="GuidType" use="required"/>\r
+    <xs:attribute name="PackageVersion" type="VersionDataType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="LibraryClassAttributes">\r
+    <xs:attribute name="Usage" type="LibraryUsage" use="required"/>\r
+    <xs:attribute name="RecommendedInstanceVersion" type="VersionDataType" use="optional"/>\r
+    <xs:attribute name="RecommendedInstanceGuid" type="GuidType" use="optional"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="LibraryClassDeclarationAttributes">\r
+    <xs:attribute name="Name" type="KeywordType" use="required"/>\r
+    <xs:attribute name="RecommendedInstanceVersion" type="VersionDataType" use="optional"/>\r
+    <xs:attribute name="RecommendedInstanceGuid" type="GuidType" use="optional"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="MsaGuidAttributes">\r
+    <xs:attribute name="Usage" type="GuidUsage" use="optional"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="ModuleNameAttributes">\r
+    <xs:attribute name="ModuleGuid" type="GuidType" use="required"/>\r
+    <xs:attribute name="ModuleName" type="UiNameType" use="optional"/>\r
+    <xs:attribute name="ModuleVersion" type="VersionDataType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="MsaAttributes">\r
+    <xs:attribute name="PackageGuid" type="GuidType" use="required"/>\r
+    <xs:attribute name="ModuleGuid" type="GuidType" use="required"/>\r
+    <xs:attribute name="ModuleVersion" type="VersionDataType" use="optional"/>\r
+    <xs:attribute name="PackageVersion" type="VersionDataType" use="optional"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="OptionAttributes">\r
+    <xs:attribute name="BuildTargets" type="BuildTargetList" use="optional"/>\r
+    <xs:attribute name="ToolChainFamily" type="ToolsNameConvention" use="optional"/>\r
+    <xs:attribute name="TagName" type="ToolsNameConvention" use="optional"/>\r
+    <xs:attribute name="ToolCode" type="ToolsNameConvention" use="optional"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="PackageHeaderAttributes">\r
+    <xs:attribute name="ModuleType" type="ModuleTypeDef" use="required"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="PackageAttributes">\r
+    <!-- Used with the MSA File, PackageDependencies.Package -->\r
+    <xs:attribute name="PackageGuid" type="GuidType" use="required"/>\r
+    <xs:attribute name="PackageVersion" type="VersionDataType" use="optional"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="PackageNameAttributes">\r
+    <!--Used with the FrameworkDatabase PackageList.Packagename  -->\r
+    <xs:attribute name="PackageGuid" type="GuidType" use="required"/>\r
+    <xs:attribute name="PackageVersion" type="VersionDataType" use="optional"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="DynamicBuildPcdAttributes">\r
     <xs:annotation>\r
-        <xs:documentation xml:lang="en">This schema defines EFI and Framework Attribute. Only attributeGroups are specified in this file. </xs:documentation>\r
+      <xs:documentation xml:lang="en">These attributes are for the Pcds listed in PcdData, PcdEntry and/or PcdBuildData entries.</xs:documentation>\r
     </xs:annotation>\r
-    <xs:include schemaLocation="NamingConvention.xsd"/>\r
-    <xs:include schemaLocation="FrameworkDataTypes.xsd"/>\r
-    <xs:include schemaLocation="FrameworkPlatformDataTypes.xsd"/>\r
-    <xs:attributeGroup name="BlockAttributes">\r
-        <xs:attribute name="Name" type="BlockNameType" use="required"/>\r
-        <xs:attribute name="Size" type="HexAddressType" use="required"/>\r
-        <xs:attribute name="Flags" type="HexAddressType" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="FlashDeviceImageAttributes">\r
-        <xs:attribute name="Name" type="xs:string" use="required"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="FlashDeviceImageFileAttributes">\r
-        <xs:attribute name="Name" type="xs:string" use="required"/>\r
-        <xs:attribute name="Region" type="xs:string" use="required"/>\r
-        <xs:attribute name="SubRegion" type="xs:string" use="optional"/>\r
-        <xs:attribute name="Optional" type="xs:boolean" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="FlashDeviceInfoAttributes">\r
-        <xs:attribute name="Name" type="xs:string" use="required"/>\r
-        <xs:attribute name="Size" type="HexAddressType" use="required"/>\r
-        <xs:attribute name="BaseAddress" type="HexAddressType" use="required"/>\r
-        <xs:attribute name="ErasePolarity" type="Polarity" use="required"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="RawDataAttributes">\r
-        <xs:attribute name="Name" type="xs:string" use="required"/>\r
-        <xs:attribute name="Region" type="xs:string" use="required"/>\r
-        <xs:attribute name="SubRegion" type="xs:string" use="required"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="RegionAttributes">\r
-        <xs:attribute name="Name" type="xs:string" use="required"/>\r
-        <xs:attribute name="Size" type="HexAddressType" use="required"/>\r
-        <xs:attribute name="Flags" type="HexAddressType" use="optional"/>\r
-        <xs:attribute name="Alignment" type="HexAddressType" use="optional"/>\r
-        <xs:attribute name="Attributes" type="xs:string" use="required"/>\r
-        <xs:attribute name="AreaType" type="EfiFvAreaType" use="required"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="SubRegionAttributes">\r
-        <xs:attribute name="CreateHob" type="xs:boolean" use="required"/>\r
-        <xs:attribute name="Name" type="xs:string" use="required"/>\r
-        <xs:attribute name="Size" type="HexAddressType" use="required"/>\r
-        <xs:attribute name="Attributes" type="xs:string" use="required"/>\r
-        <xs:attribute name="AreaType" type="EfiFvAreaType" use="required"/>\r
-        <xs:attribute name="NameGuid" type="xs:string" use="required"/>\r
-        <xs:attribute name="AreaTypeGuid" type="xs:string" use="optional"/>\r
-        <xs:attribute name="FileSystemGuid" type="xs:string" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="BaseNameAttributes">\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <xs:attribute name="Version" type="VersionDataType" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="BootModeAttributes">\r
-        <!-- Make Usage REQUIRED in final -->\r
-        <xs:attribute name="BootModeName" type="BootModeNames" use="required"/>\r
-        <xs:attribute name="Usage" type="BootModeUsage" use="required"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <!-- DO NOT USE, remove Guid from use -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="ConvertAttributeString">\r
-        <xs:attribute name="OutputFilename" type="FileNameConvention" use="optional"/>\r
-        <xs:attribute name="SourceString" type="xs:string" use="optional"/>\r
-        <xs:attribute default="Unicode" name="OutputFiletype" type="xs:string" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="DataHubAttributes">\r
-        <!-- Make Usage REQUIRED in final -->\r
-        <xs:attribute name="Usage" type="DataHubUsage" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <!-- DO NOT USE, remove Guid from use -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="DirectoryAttributes">\r
-        <xs:attribute name="Separator" type="ToothPick"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="EventAttributes">\r
-        <!-- Make Usage REQUIRED in final -->\r
-        <xs:attribute name="Usage" type="EventUsage" use="optional"/>\r
-        <!-- Make EventGroup Required in final -->\r
-        <xs:attribute name="EventGuidCName" type="C_NameType" use="optional"/>        \r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <!-- DO NOT USE, remove Guid from use -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-        <xs:attribute name="EventGroup" type="EventTypes" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="ExternAttributes">\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <xs:attribute name="Usage" type="ExternUsage" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="FilenameAttributes">\r
-        <xs:attribute name="TagName" type="ToolsNameConvention" use="optional"/>\r
-        <xs:attribute name="ToolCode" type="ToolsNameConvention" use="optional"/>\r
-        <xs:attribute name="ToolChainFamily" type="ToolsNameConvention" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <xs:attribute name="ModuleName" type="xs:NCName" use="optional"/>\r
-        <xs:attribute name="ModuleVersion" type="VersionDataType" use="optional"/>\r
-        <xs:attribute name="ModuleGuid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <xs:attribute name="FileType" type="xs:string" use="optional"/>\r
-        <!-- DO NOT USE, remove Guid from use -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE, remove Path from use -->\r
-        <xs:attribute name="Path" type="DirectoryNamingConvention" use="optional"/>\r
-        <!-- DO NOT USE, remove ToolChain from use, use ToolChainFamily -->\r
-        <xs:attribute name="ToolChain" type="ToolChains" use="optional"/>\r
-        <!-- DO NOT USE, remove Usage from use -->\r
-        <xs:attribute name="Usage" type="FileNameUsage" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="FormsetAttributes">\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <xs:attribute name="Usage" type="FormSetUsage" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="GuidAttributes">\r
-        <!-- Make Usage REQUIRED in final -->\r
-        <xs:attribute name="Usage" type="GuidUsage" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="GuidDeclarationAttributes">\r
-        <xs:attribute name="Name" type="UiNameType" use="required"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>\r
-        <xs:attribute name="GuidTypeList" type="GuidListType" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="HiiPackageAttributes">\r
-        <xs:attribute name="Usage" type="HiiPackageUsage" use="required"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="HobAttributes">\r
-        <!-- USAGE is required in final -->\r
-        <xs:attribute name="Usage" type="HobUsage" use="optional"/>\r
-        <xs:attribute name="HobGuidCName" type="C_NameType" use="optional"/>        \r
-        <xs:attribute name="HobType" type="HobTypes" use="required"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <!-- DO NOT USE remove Guid from use -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE remove HobEnabled from use -->\r
-        <xs:attribute default="true" name="HobEnabled" type="xs:boolean" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <!-- DO NOT USE remove IncludeAttributes from use -->\r
-    <xs:attributeGroup name="IncludeAttributes">\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <!-- DO NOT USE remove Class from use -->\r
-        <xs:attribute name="Class" type="BaseNameConvention" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Guid from use -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <xs:attribute name="ModuleType" type="ModuleTypeDef" use="optional"/>\r
-        <!-- DO NOT USE remove Path from use -->\r
-        <xs:attribute name="Path" type="DirectoryNamingConvention" use="optional"/>\r
-        <!-- DO NOT USE remove Version from use -->\r
-        <xs:attribute name="Version" type="VersionDataType" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-        <xs:attribute name="ModuleTypeList" type="ModuleTypeList" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="IncludeHeaderAttributes">\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <xs:attribute name="ModuleTypeList" type="ModuleTypeList" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="IndustryStdHeaderAttributes">\r
-        <xs:attribute name="Name" type="KeywordType" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="LibraryAttributes">\r
-        <!-- LibraryAttributes is used for Libraries / Library elements in FPD files -->\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <!-- LAH Does a LibraryInstance need to have FeatureFlag Attribute? -->\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Guid from use, Start using ModuleGuid instead -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE remove ClassGuid from use, Start using LibraryClassGuid instead -->\r
-        <xs:attribute name="ClassGuid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE remove LibraryGuid from use, Start using ModuleGuid instead -->\r
-        <xs:attribute name="LibraryGuid" type="GuidType" use="optional"/>\r
-        <xs:attribute name="LibraryClass" type="BaseNameConvention" use="optional"/>\r
-        <xs:attribute name="LibraryClassGuid" type="GuidType" use="optional"/>\r
-        <xs:attribute name="ModuleGuid" type="GuidType" use="optional"/>\r
-        <xs:attribute name="ModuleVersion" type="VersionDataType" use="optional"/>\r
-        <!-- DO NOT USE remove Package from use, Start using PackageName instead -->\r
-        <xs:attribute name="Package" type="xs:string" use="optional"/>\r
-        <xs:attribute name="PackageGuid" type="GuidType" use="optional"/>\r
-        <xs:attribute name="PackageName" type="BaseNameConvention" use="optional"/>\r
-        <xs:attribute name="PackageVersion" type="VersionDataType" use="optional"/>\r
-        <xs:attribute name="Usage" type="LibraryUsage" use="optional"/>\r
-        <!-- DO NOT USE remove Version from use, Start using ModuleVersion instead -->\r
-        <xs:attribute name="Version" type="VersionDataType" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="LibraryClassAttributes">\r
-        <xs:attribute name="Usage" type="LibraryUsage" use="required"/>\r
-        <xs:attribute name="RecommendedInstanceVersion" type="VersionDataType" use="optional"/>\r
-        <xs:attribute name="RecommendedInstanceGuid" type="GuidType" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <xs:attribute name="Name" type="KeywordType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="MsaGuidAttributes">\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <xs:attribute name="Usage" type="GuidUsage" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="ModuleNameAttributes">\r
-        <xs:attribute name="Guid" type="GuidType" use="required"/>\r
-        <!-- DO NOT USE remove Guid from use, Start using ModuleGuid instead -->\r
-        <xs:attribute name="ModuleGuid" type="GuidType" use="required"/>\r
-        <xs:attribute name="ModuleVersion" type="VersionDataType" use="optional"/>\r
-        <!-- DO NOT USE remove Version from use, Start using ModuleVersion instead -->\r
-        <xs:attribute name="Version" type="VersionDataType" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="ModuleNameSaAttributes">\r
-        <!-- DO NOT USE remove Guid from use, Start using ModuleGuid instead -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <xs:attribute name="ModuleGuid" type="GuidType" use="required"/>\r
-        <xs:attribute name="ModuleName" type="xs:NCName" use="required"/>\r
-        <xs:attribute name="ModuleVersion" type="VersionDataType" use="optional"/>\r
-        <!-- DO NOT USE remove Version from use, Start using ModuleVersion instead -->\r
-        <xs:attribute name="Version" type="VersionDataType" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="FfsAttributes">\r
-        <xs:attribute name="FfsFormatKeyword" type="FfsNameType" use="required"/>\r
-        <xs:attribute name="FfsFileType" type="EfiFfsFileTypes" use="optional"/>\r
-        <xs:attribute name="FfsAttribTailPresent" type="xs:boolean" use="optional"/>\r
-        <xs:attribute name="FfsAttribRecovery" type="xs:boolean" use="optional" default="false"/>\r
-        <xs:attribute name="FfsAttribDataAlignment" type="FfsDataAlignmentType" use="optional"/>\r
-        <xs:attribute name="FfsAttribChecksumRequired" type="xs:boolean" use="optional" default="true"/>\r
-        <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="MsaAttributes">\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="BuildSequence" type="xs:int" use="optional"/>\r
-        <xs:attribute name="FvBinding" type="xs:string" use="optional"/>\r
-        <xs:attribute name="ModuleName" type="xs:NCName" use="optional"/>\r
-        <xs:attribute name="ModuleGuid" type="GuidType" use="optional"/>\r
-        <xs:attribute name="ModuleVersion" type="VersionDataType" use="optional"/>\r
-        <xs:attribute name="PackageVersion" type="VersionDataType" use="optional"/>\r
-        <xs:attribute name="PackageName" type="BaseNameConvention" use="optional"/>\r
-        <xs:attribute name="PackageGuid" type="GuidType" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="OptionAttributes">\r
-        <xs:attribute name="BuildTargets" type="BuildTargetList" use="optional"/>\r
-        <xs:attribute name="ToolChainFamily" type="ToolsNameConvention" use="optional"/>\r
-        <xs:attribute name="TagName" type="ToolsNameConvention" use="optional"/>\r
-        <xs:attribute name="ToolCommand" type="ToolsNameConvention" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <!-- LAH Does an Option need to have FeatureFlag Attribute? -->\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <xs:attribute name="Platform" type="PlatformNamingConvention" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="PackageHeaderAttributes">\r
-        <xs:attribute name="ModuleType" type="ModuleTypeDef" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="PackageAttributes">\r
-        <xs:attribute name="PackageGuid" type="GuidType" use="optional"/>\r
-        <xs:attribute name="PackageVersion" type="VersionDataType" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <xs:attribute name="PackageType" type="PackageType" use="optional"/>\r
-        <xs:attribute name="UpdatedDate" type="DateType" use="optional"/>\r
-        <xs:attribute name="Usage" type="PackageUsage" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <!-- PackageNameAttributres are only used in the Package Dependencies section of an SPD file. -->\r
-    <xs:attributeGroup name="PackageNameAttributes">\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <!-- DO NOT USE remove Guid and start using PackageGuid instead -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <!-- CHANGE PackageGuid to REQUIRED in final -->\r
-        <xs:attribute name="PackageGuid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE remove PackageTypeDependency from Use -->\r
-        <!-- PackageTypeDepencency is used to identify if a SOURCE or BINARY PackageType is required, in case PackageGuid and/or PackageVersion are not tracked. -->\r
-        <xs:attribute name="PackageTypeDependency" type="PackageType" use="optional"/>\r
-        <xs:attribute name="PackageVersion" type="xs:string" use="optional"/>\r
-        <!-- DO NOT USE remove Version and start using PackageVersion instead -->\r
-        <xs:attribute name="Version" type="VersionDataType" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="PcdAttributes">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">These attributes are for the Pcds listed in PcdData, PcdEntry and/or PcdBuildData entries.</xs:documentation>\r
-            <xs:documentation xml:lang="en">PcdUsage is only valid for PcdItemTypes = FEATURE_FLAG</xs:documentation>\r
-            <xs:documentation xml:lang="en">Only NON FEATURE_FLAG PCDS should have the FeatureFlag attribute set.</xs:documentation>\r
-        </xs:annotation>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <xs:attribute name="ItemType" type="PcdItemTypes" use="required"/>\r
-        <xs:attribute name="PcdUsage" type="PcdUsage" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="DynamicBuildPcdAttributes">\r
-      <xs:annotation>\r
-        <xs:documentation xml:lang="en">These attributes are for the Pcds listed in PcdData, PcdEntry and/or PcdBuildData entries.</xs:documentation>\r
-      </xs:annotation>\r
-      <xs:attribute name="ItemType" type="PcdItemTypes" use="required"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="PcdBuildDefinitionAttributes">\r
-        <xs:attribute name="ItemType" type="PcdItemTypes" use="required"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="PcdCodedAttributes">\r
-      <xs:attribute name="PcdItemType" type="PcdItemTypes" use="required"/>\r
-      <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-      <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-    </xs:attributeGroup>    \r
-    <xs:attributeGroup name="PcdDeclarationAttributes">\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <xs:attribute name="SupModuleTypes" type="ModuleTypeList" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="PlatformAttributes">\r
-        <!-- DO NOT USE remove AlternateName from use -->\r
-        <xs:attribute name="AlternateName" type="FileNameConvention" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <!-- DO NOT USE remove Guid from use -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <xs:attribute name="PlatformName" type="PlatformNamingConvention" use="optional"/>\r
-        <xs:attribute name="PlatformGuid" type="GuidType" use="optional"/>\r
-        <xs:attribute name="PlatformVersion" type="xs:string" use="optional"/>\r
-        <!-- DO NOT USE remove Version and start using PlatformVersion instead -->\r
-        <xs:attribute name="Version" type="VersionDataType" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="PpiDeclarationAttributes">\r
-        <xs:attribute name="Name" type="UiNameType" use="required"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="PpiAttributes">\r
-        <!-- Make Usage REQUIRED in final -->\r
-        <xs:attribute name="Usage" type="PpiUsage" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <!-- DO NOT USE remove Guid from use -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="PpiNotifyAttributes">\r
-        <!-- Make Usage REQUIRED in final -->\r
-        <xs:attribute name="Usage" type="PpiNotifyUsage" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <!-- DO NOT USE remove Guid from use -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="ProtocolAttributes">\r
-        <!-- Make Usage REQUIRED in final -->\r
-        <xs:attribute name="Usage" type="ProtocolUsage" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead-->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <!-- DO NOT USE remove Guid from use -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="ProtocolDeclarationAttributes">\r
-        <xs:attribute name="Name" type="UiNameType" use="required"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="ProtocolNotifyAttributes">\r
-        <!-- Make Usage REQUIRED in final -->\r
-        <xs:attribute name="Usage" type="ProtocolNotifyUsage" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <!-- DO NOT USE remove Guid from use -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="SectionAttributes">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Attributes are either compressable and/or sequence order binding</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:attribute name="BindingOrder" type="xs:int" use="optional"/>\r
-        <xs:attribute default="true" name="Compressible" type="xs:boolean" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <!-- LAH Does a Section need to have FeatureFlag Attribute? -->\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <xs:attribute name="SectionType" type="EfiSectionType" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="SectionsAttributes">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Attributes for Sections, EncapsulationTag, EncapsulationType and FeatureFlag</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:attribute name="EncapsulationType" type="xs:normalizedString" use="optional"/>\r
-        <xs:attribute name="EncapsulationTag" type="xs:string" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <!-- LAH Does a Filename need to have FeatureFlag Attribute? -->\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="SystemTableAttributes">\r
-        <!-- Make Usage REQUIRED in final -->\r
-        <xs:attribute name="Usage" type="SystemTableUsage" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <!-- DO NOT USE remove Guid from use -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="UrlAttribute">\r
-        <xs:attribute name="Url" type="xs:anyURI"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="VariableAttributes">\r
-        <!-- Make Usage REQUIRED in final -->\r
-        <xs:attribute name="Usage" type="VariableUsage" use="optional"/>\r
-        <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
-        <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
-        <!-- DO NOT USE remove Arch from use, use SupArchList instead -->\r
-        <xs:attribute name="Arch" type="SupportedArchitectures" use="optional"/>\r
-        <!-- DO NOT USE remove EnableFeature from use -->\r
-        <xs:attribute default="true" name="EnableFeature" type="xs:boolean" use="optional"/>\r
-        <!-- DO NOT USE remove Guid from use -->\r
-        <xs:attribute name="Guid" type="GuidType" use="optional"/>\r
-        <!-- DO NOT USE remove OverrideID from use -->\r
-        <xs:attribute name="OverrideID" type="xs:int" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="ProcessStepAttributes">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Attributes are either compressable and/or sequence order binding</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:attribute name="BindingOrder" type="xs:int" use="optional"/>\r
-        <xs:attribute name="SectionType" type="EfiSectionType" use="optional"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="FvRegionNameAttributes">\r
-        <xs:attribute name="BaseAddressPcdCName" type="C_NameType" use="required"/>\r
-        <xs:attribute name="BaseAddressPcdTokenSpaceGuid" type="GuidType" use="optional"/>\r
-    </xs:attributeGroup>    \r
+    <xs:attribute name="ItemType" type="PcdItemTypes" use="required"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="PcdBuildDefinitionAttributes">\r
+    <xs:attribute name="ItemType" type="PcdItemTypes" use="required"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="PcdCodedAttributes">\r
+    <xs:attribute name="PcdItemType" type="PcdItemTypes" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="PcdDeclarationAttributes">\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="PlatformAttributes">\r
+    <xs:attribute name="PlatformGuid" type="GuidType" use="required"/>\r
+    <xs:attribute name="PlatformVersion" type="VersionDataType" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="PpiDeclarationAttributes">\r
+    <xs:attribute name="Name" type="UiNameType" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="PpiAttributes">\r
+    <xs:attribute name="Usage" type="PpiUsage" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="PpiNotifyAttributes">\r
+    <xs:attribute name="Usage" type="PpiNotifyUsage" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="ProcessStepAttributes">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Attributes are either compressable and/or sequence order binding</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:attribute name="BindingOrder" type="xs:int" use="optional"/>\r
+    <xs:attribute name="SectionType" type="EfiSectionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="ProtocolAttributes">\r
+    <xs:attribute name="Usage" type="ProtocolUsage" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="ProtocolDeclarationAttributes">\r
+    <xs:attribute name="Name" type="UiNameType" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="ProtocolNotifyAttributes">\r
+    <xs:attribute name="Usage" type="ProtocolNotifyUsage" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="RawDataAttributes">\r
+    <xs:attribute name="Name" type="xs:string" use="required"/>\r
+    <xs:attribute name="Region" type="xs:string" use="required"/>\r
+    <xs:attribute name="SubRegion" type="xs:string" use="required"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="RegionAttributes">\r
+    <xs:attribute name="Name" type="xs:string" use="required"/>\r
+    <xs:attribute name="Size" type="HexAddressType" use="required"/>\r
+    <xs:attribute name="Flags" type="HexAddressType" use="optional"/>\r
+    <xs:attribute name="Attributes" type="xs:string" use="required"/>\r
+    <xs:attribute name="AreaType" type="EfiFvAreaType" use="required"/>\r
+    <xs:attribute name="Alignment" type="HexAddressType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="SectionsAttributes">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Attributes for Sections, EncapsulationTag and EncapsulationType</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:attribute name="BindingOrder" type="xs:nonNegativeInteger" use="optional"/>\r
+    <xs:attribute name="Compressible" type="xs:boolean" default="true" use="optional"/>\r
+    <xs:attribute name="SectionType" type="EfiSectionType" use="optional"/>\r
+    <xs:attribute name="EncapsulationType" type="xs:normalizedString" use="optional"/>\r
+    <xs:attribute name="EncapsulationTag" type="xs:string" use="optional"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="SubRegionAttributes">\r
+    <xs:attribute name="CreateHob" type="xs:boolean" use="required"/>\r
+    <xs:attribute name="Name" type="xs:string" use="required"/>\r
+    <xs:attribute name="Size" type="HexAddressType" use="required"/>\r
+    <xs:attribute name="Attributes" type="xs:string" use="required"/>\r
+    <xs:attribute name="AreaType" type="EfiFvAreaType" use="required"/>\r
+    <xs:attribute name="NameGuid" type="xs:string" use="required"/>\r
+    <xs:attribute name="AreaTypeGuid" type="xs:string" use="optional"/>\r
+    <xs:attribute name="FileSystemGuid" type="xs:string" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="SystemTableAttributes">\r
+    <xs:attribute name="Usage" type="SystemTableUsage" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="UrlAttribute">\r
+    <xs:attribute name="Url" type="xs:anyURI"/>\r
+  </xs:attributeGroup>\r
+  <xs:attributeGroup name="VariableAttributes">\r
+    <xs:attribute name="Usage" type="VariableUsage" use="required"/>\r
+    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>\r
+    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>\r
+  </xs:attributeGroup>\r
 </xs:schema>\r
index 4bf1ee177bcebc18927788cb008294842aa65e91..59bdcbdebe7b5f11f46dce5c33af2ebcbb1cc3ad 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns="http://www.TianoCore.org/2006/Edk2.0" targetNamespace="http://www.TianoCore.org/2006/Edk2.0">\r
-    <!--\r
+  <!--\r
     Filename: FrameworkDataElements.xsd\r
     \r
     Copyright (c) 2006, Intel Corp.\r
     WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
     \r
   -->\r
+  <xs:annotation>\r
+    <xs:documentation xml:lang="en"> This schema defines EFI and Framework Data Elements </xs:documentation>\r
+  </xs:annotation>\r
+  <xs:include schemaLocation="NamingConvention.xsd"/>\r
+  <xs:include schemaLocation="FrameworkDataTypes.xsd"/>\r
+  <xs:include schemaLocation="FrameworkPlatformDataTypes.xsd"/>\r
+  <xs:include schemaLocation="FrameworkDataAttributes.xsd"/>\r
+  <xs:element name="Abstract" type="Sentence">\r
     <xs:annotation>\r
-        <xs:documentation xml:lang="en"> This schema defines EFI and Framework Data Elements </xs:documentation>\r
+      <xs:documentation xml:lang="en">Abstract is valid for all Description Files</xs:documentation>\r
+      <xs:documentation xml:lang="en">This section is required. This is a single sentence to describe the module and will be used in sample files as the abstract data in the header comment section.</xs:documentation>\r
     </xs:annotation>\r
-    <xs:include schemaLocation="NamingConvention.xsd"/>\r
-    <xs:include schemaLocation="FrameworkDataTypes.xsd"/>\r
-    <xs:include schemaLocation="FrameworkPlatformDataTypes.xsd"/>\r
-    <xs:include schemaLocation="FrameworkDataAttributes.xsd"/>\r
-    <xs:element name="Abstract" type="Sentence">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Abstract is valid for all Description Files</xs:documentation>\r
-            <xs:documentation xml:lang="en">This section is required. This is a single sentence to describe the module and will be used in sample files as the abstract data in the header comment section.</xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="AntCmd">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a sub-element of AntTask</xs:documentation>\r
-            <xs:documentation xml:lang="en">This is an ant command that will be inserted into a biuld sequence. Since ant commands are valid XML statements, special care must be taken to use the correct tokens for reserved words and escape quote characters.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="0" name="Id" type="xs:int"/>\r
-                <xs:element name="ExecutionOrder">\r
-                    <xs:simpleType>\r
-                        <xs:list itemType="xs:normalizedString"/>\r
-                    </xs:simpleType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="AntTask">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a sub-element of UserDefinedAntTasks</xs:documentation>\r
-            <xs:documentation xml:lang="en">Define a file that contains one or more ant tasks that are to be added into or replacing of sequences of build steps. These files will be called using the ant-call task on a file name. These files must be valid apache-ant formatted task files.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:choice>\r
-                <xs:element ref="AntCmd"/>\r
-                <xs:element ref="Filename"/>\r
-            </xs:choice>\r
-            <xs:attribute name="Id" type="xs:int" use="required"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="BaseName">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">BaseName is valid for all Description Files</xs:documentation>\r
-            <xs:documentation xml:lang="en"> We need to be able to permit different attributes for every basename </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="AntTask">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is a sub-element of UserDefinedAntTasks</xs:documentation>\r
+      <xs:documentation xml:lang="en">Define a file that contains one or more ant tasks that are to be added into or replacing of sequences of build steps. These files will be called using the ant-call task on a file name. These files must be valid apache-ant formatted task files.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="AntCmdOptions" type="xs:normalizedString"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="Filename" type="PathAndFilename"/>\r
+      </xs:sequence>\r
+      <xs:attribute name="Id" type="xs:int" use="required"/>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="BootModes">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">BootModes is valid for all Description Files</xs:documentation>\r
+      <xs:documentation xml:lang="en">This is a list of BootModes Supported by the Module</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="BootMode">\r
+          <xs:complexType>\r
+            <xs:sequence minOccurs="0">\r
+              <xs:element name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="BootModeAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="BuildOptions">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">BuildOptions is valid for FPD files.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="0" maxOccurs="1" ref="UserDefinedAntTasks"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" ref="Options"/>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="UserExtensions"/>\r
+        <!-- The following sections are legacy and will be removed -->\r
+        <xs:element minOccurs="0" maxOccurs="1" name="OutputDirectory">\r
+          <xs:complexType>\r
             <xs:simpleContent>\r
-                <xs:extension base="BaseNameConvention">\r
-                    <xs:attributeGroup ref="BaseNameAttributes"/>\r
-                </xs:extension>\r
+              <xs:extension base="xs:anyURI">\r
+                <xs:attribute default="UNIFIED" name="IntermediateDirectories" use="optional">\r
+                  <xs:simpleType>\r
+                    <xs:restriction base="UCNameType">\r
+                      <xs:enumeration value="MODULE"/>\r
+                      <xs:enumeration value="UNIFIED"/>\r
+                    </xs:restriction>\r
+                  </xs:simpleType>\r
+                </xs:attribute>\r
+              </xs:extension>\r
             </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="BootModes">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">BootModes is valid for all Description Files</xs:documentation>\r
-            <xs:documentation xml:lang="en">This is a list of BootModes Supported by the Module</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element name="BootMode">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="0">\r
-                            <xs:element name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="BootModeAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="BuildOptions">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">BuildOptions is valid for MBD and FPD files.</xs:documentation>\r
-            <xs:documentation xml:lang="en">Specific Build Options, by Tool Chain, than should be applied, overriding any global options</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+          </xs:complexType>\r
+        </xs:element>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="Ffs">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="UserDefinedAntTasks"/>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="ImageEntryPoint"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="OutputDirectory"/>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Ffs"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Sections"/>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Filenames"/>\r
-                <xs:element ref="Options" minOccurs="0" maxOccurs="1"/>\r
-                <xs:sequence minOccurs="0">\r
-                    <xs:element minOccurs="0" maxOccurs="unbounded" name="Option">\r
-                        <xs:complexType>\r
-                            <xs:simpleContent>\r
-                                <xs:extension base="xs:normalizedString">\r
-                                    <xs:attributeGroup ref="OptionAttributes"/>\r
-                                </xs:extension>\r
-                            </xs:simpleContent>\r
-                        </xs:complexType>\r
-                    </xs:element>\r
-                    <!-- Arch element should be removed - use Arch attributes to the above instead. -->\r
-                    <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                        <xs:complexType>\r
-                            <xs:sequence minOccurs="1">\r
-                                <xs:element maxOccurs="unbounded" name="Option">\r
-                                    <xs:complexType>\r
-                                        <xs:simpleContent>\r
-                                            <xs:extension base="xs:normalizedString">\r
-                                                <xs:attributeGroup ref="OptionAttributes"/>\r
-                                            </xs:extension>\r
-                                        </xs:simpleContent>\r
-                                    </xs:complexType>\r
-                                </xs:element>\r
-                            </xs:sequence>\r
-                            <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                        </xs:complexType>\r
+              <xs:element minOccurs="0" maxOccurs="unbounded" name="Attribute">\r
+                <xs:complexType>\r
+                  <xs:attribute name="Name" type="C_NameType"/>\r
+                  <xs:attribute name="Value" type="C_NameType"/>\r
+                </xs:complexType>\r
+              </xs:element>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="Sections">\r
+                <xs:complexType>\r
+                  <xs:sequence minOccurs="1">\r
+                    <xs:element name="Section" minOccurs="0" maxOccurs="unbounded">\r
+                      <xs:complexType>\r
+                        <xs:sequence>\r
+                          <xs:element ref=" Filenames " minOccurs="0"/>\r
+                          <xs:element name="Args" type=" ArgsType " minOccurs="0"/>\r
+                          <xs:element name="OutFile" type=" FileNameConvention " minOccurs="0"/>\r
+                          <xs:element name="OutputFileExtension" type=" xs:string " minOccurs="0"/>\r
+                          <xs:element name="ToolName" type=" ToolType " minOccurs="0"/>\r
+                        </xs:sequence>\r
+                        <xs:attributeGroup ref=" SectionsAttributes "/>\r
+                      </xs:complexType>\r
                     </xs:element>\r
-                </xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="UserExtensions"/>                \r
-            </xs:sequence>\r
-            <xs:attribute name="ToolChain" type="ToolChains"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Options">\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" ref="Option"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Option">\r
-        <!-- This element is used to store flags from the Tools -->\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="xs:normalizedString">\r
-                    <xs:attributeGroup ref="OptionAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>    \r
-    <xs:element name="ModuleBuildOptions">\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##local"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ModuleSaBuildOptions">\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="FvBinding" type="FfsNameType"/>\r
-                <!-- The FfsFileNameGuid allows the Platform Integrator to specify a GUID for the FFS File Name GUID -->\r
-                <xs:element minOccurs="0" maxOccurs="1" name="FfsFileNameGuid" type="GuidType"/>\r
-                <!-- If binding is specified, you MUST specify the FfsFormatKey -->\r
-                <xs:element minOccurs="0" maxOccurs="1" name="FfsFormatKey" type="FfsNameType"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Options"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ModuleDefinitions">\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="SupportedArchitectures" type="ArchListType"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="BinaryModule" type="xs:boolean" default="false"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="OutputFileBasename" type="FileNameConvention"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>    \r
-    <xs:element name="C_Name" type="C_Name">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">C_Name is valid for all Description Files</xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="ComponentName" type="C_Name">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">ComponentName is valid for all Description Files</xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="ComponentType" type="FrameworkComponentTypes">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the valid Framework Component Type</xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="ConditionalExpression">\r
-        <!-- DO NOT USE remove and use FeatureFlag instead -->\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">A conditional expression that must be evaluated to determine whether a feature is implemented or not. The expression must be either numeric, string or boolean.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="Condition" type="xs:normalizedString"/>\r
-            </xs:sequence>\r
-            <xs:attribute name="ConditionalTarget" type="ConditionalTarget" use="optional"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Constructor" type="C_Name"/>\r
-    <xs:element name="Copyright" type="Sentence"/>\r
-    <xs:element name="Created" type="DateType"/>\r
-    <xs:element name="CreatedDate" type="DateType"/>\r
-    <xs:element name="CreatedBy" type="UserName"/>\r
-    <xs:element name="DataHubs">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a list of DataHubRecord elements.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element name="DataHubRecord">\r
-                    <xs:complexType mixed="true">\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DataHubCName" type="C_NameType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="DataHubAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- Remove Arch and use Arch Attribute for DataHubRecord instead. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element name="DataHubRecord">\r
-                                <xs:complexType>\r
-                                    <xs:simpleContent>\r
-                                        <xs:extension base="xs:normalizedString">\r
-                                            <xs:attributeGroup ref="DataHubAttributes"/>\r
-                                        </xs:extension>\r
-                                    </xs:simpleContent>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="DatabaseName">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">The Name of the Database, "FrameworkDatabase"</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="BaseNameConvention">\r
-                    <xs:attributeGroup ref="BaseNameAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="DefaultValue">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">The default setting of a PCD entry.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="xs:normalizedString"/>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Description" type="Paragraph">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This section is required for new modules and libraries and must contain more information than the Abstract.</xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="Destructor" type="C_Name"/>\r
-    <xs:element name="DriverBinding" type="C_Name"/>\r
-    <xs:element name="DriverConfig" type="C_Name"/>\r
-    <xs:element name="DriverDiag" type="C_Name"/>\r
-    <xs:element name="E-Mail" type="E-Mail"/>\r
-    <xs:element name="Events">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a list of MSA Events</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="CreateEvents">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="EventTypes">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:element minOccurs="1" maxOccurs="1" name="EventType" type="EventTypes"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="EventAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>                            \r
-                            <xs:element minOccurs="0" name="Event">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:choice>\r
-                                            <xs:element minOccurs="0" maxOccurs="1" name="GuidC_Name" type="C_NameType"/>\r
-                                            <!-- DO NOT USE, removing C_Name in final -->\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="C_Name"/>\r
-                                        </xs:choice>\r
-                                        <!-- DO NOT USE, removing Guid and GuidValue from Final -->\r
-                                        <xs:choice minOccurs="0">\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                                        </xs:choice>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="EventAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                            <!-- Remove Arch Section and use Arch Attribute instead in Event. -->\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:element name="Event">\r
-                                            <xs:complexType>\r
-                                                <xs:sequence>\r
-                                                    <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                                                    <xs:choice minOccurs="0">\r
-                                                        <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                                        <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                                                    </xs:choice>\r
-                                                </xs:sequence>\r
-                                                <xs:attributeGroup ref="EventAttributes"/>\r
-                                            </xs:complexType>\r
-                                        </xs:element>\r
-                                    </xs:sequence>\r
-                                    <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="SignalEvents">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">Module has an event that is waiting to be signaled. Event is named by GUID.</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
+                    <xs:element name="Sections" minOccurs="0" maxOccurs="unbounded">\r
+                      <xs:complexType>\r
                         <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="EventTypes">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:element minOccurs="1" maxOccurs="1" name="EventType" type="EventTypes"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="EventAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>                            \r
-                            <xs:element minOccurs="0" name="Event">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:choice>\r
-                                            <xs:element minOccurs="0" maxOccurs="1" name="GuidC_Name" type="C_NameType"/>\r
-                                            <!-- DO NOT USE, removing C_Name in final -->\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="C_Name"/>\r
-                                        </xs:choice>\r
-                                        <!-- DO NOT USE, removing Guid and GuidValue from Final -->\r
-                                        <xs:choice minOccurs="0">\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                                        </xs:choice>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="EventAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                            <!-- Remove Arch and use Arch attribute in Event above -->\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:element name="Event">\r
-                                            <xs:complexType>\r
-                                                <xs:sequence>\r
-                                                    <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                                                </xs:sequence>\r
-                                                <xs:attributeGroup ref="EventAttributes"/>\r
-                                            </xs:complexType>\r
-                                        </xs:element>\r
-                                    </xs:sequence>\r
-                                    <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ExitBootServicesCallBack" type="C_Name"/>\r
-    <xs:element name="Externs">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a child of MSA files.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+                          <xs:element name="Section">\r
+                            <xs:complexType>\r
+                              <xs:sequence>\r
+                                <xs:element ref=" Filenames " minOccurs="0"/>\r
+                                <xs:element name="Args" type=" ArgsType " minOccurs="0"/>\r
+                                <xs:element name="OutFile" type=" FileNameConvention " minOccurs="0"/>\r
+                                <xs:element name="OutputFileExtension" type=" xs:string " minOccurs="0"/>\r
+                                <xs:element name="ToolName" type=" ToolType " minOccurs="0"/>\r
+                              </xs:sequence>\r
+                              <xs:attributeGroup ref="SectionsAttributes"/>\r
+                            </xs:complexType>\r
+                          </xs:element>\r
+                        </xs:sequence>\r
+                        <xs:attributeGroup ref=" SectionsAttributes "/>\r
+                      </xs:complexType>\r
+                    </xs:element>\r
+                  </xs:sequence>\r
+                  <xs:attributeGroup ref=" SectionsAttributes "/>\r
+                </xs:complexType>\r
+              </xs:element>\r
+            </xs:sequence>\r
+            <xs:attribute name="FfsKey" type="KeywordType" use="optional"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="Sections">\r
+          <xs:complexType>\r
             <xs:sequence minOccurs="1">\r
-                <xs:element minOccurs="0" maxOccurs="1" name="PcdIsDriver" type="PcdDriverTypes"/>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Specification" type="Sentence"/>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Extern">\r
-                    <xs:complexType>\r
-                        <xs:choice minOccurs="1">\r
-                            <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">Driver Module</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="ModuleEntryPoint"/>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="ModuleUnloadImage"/>\r
-                            </xs:sequence>\r
-                            <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">Library Module</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Constructor"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Destructor"/>\r
-                            </xs:sequence>\r
-                            <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">Allow multiple entries for DriverBinding, ComponentName, DriverConfig and DriverDiag elements. For ComponentName, DriverConfig and/or DriverDiag - you must have a 1:1 mapping to DriverBinding if the element is defined.</xs:documentation>\r
-                                    <xs:documentation xml:lang="en">Permit User Defined Extern Tags</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="DriverBinding"/>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="ComponentName"/>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="DriverConfig"/>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="DriverDiag"/>\r
-                            </xs:sequence>\r
-                            <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en"> Module Call Backs</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="SetVirtualAddressMapCallBack"/>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="ExitBootServicesCallBack"/>\r
-                            </xs:sequence>\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="UserDefined" type="C_Name"/>\r
-                        </xs:choice>\r
-                        <xs:attributeGroup ref="ExternAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- Remove Arch and use Arch Attribute in above. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element name="Extern">\r
-                                <xs:complexType>\r
-                                    <xs:choice minOccurs="1">\r
-                                        <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                            <xs:annotation>\r
-                                                <xs:documentation xml:lang="en">Driver Module</xs:documentation>\r
-                                            </xs:annotation>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="ModuleEntryPoint"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="ModuleUnloadImage"/>\r
-                                        </xs:sequence>\r
-                                        <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                            <xs:annotation>\r
-                                                <xs:documentation xml:lang="en">Library Module</xs:documentation>\r
-                                            </xs:annotation>\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="Constructor"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="Destructor"/>\r
-                                        </xs:sequence>\r
-                                        <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                            <xs:annotation>\r
-                                                <xs:documentation xml:lang="en">Allow multiple entries for DriverBinding, ComponentName, DriverConfig and DriverDiag elements. For ComponentName, DriverConfig and/or DriverDiag - you must have a 1:1 mapping to DriverBinding if the element is defined.</xs:documentation>\r
-                                                <xs:documentation xml:lang="en">Permit User Defined Extern Tags</xs:documentation>\r
-                                            </xs:annotation>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="DriverBinding"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="ComponentName"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="DriverConfig"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="DriverDiag"/>\r
-                                        </xs:sequence>\r
-                                        <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                            <xs:annotation>\r
-                                                <xs:documentation xml:lang="en"> Module Call Backs</xs:documentation>\r
-                                            </xs:annotation>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="SetVirtualAddressMapCallBack"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="ExitBootServicesCallBack"/>\r
-                                        </xs:sequence>\r
-                                        <xs:element minOccurs="0" maxOccurs="unbounded" name="UserDefined" type="C_Name"/>\r
-                                    </xs:choice>\r
-                                    <xs:attributeGroup ref="ExternAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Ffs">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Define the FFS File attributes within a sections and containing sections information</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element name="Section" minOccurs="0" maxOccurs="unbounded">\r
+                <xs:complexType>\r
+                  <xs:sequence>\r
+                    <xs:element ref=" Filenames " minOccurs="0"/>\r
+                    <xs:element name="Args" type=" ArgsType " minOccurs="0"/>\r
+                    <xs:element name="OutFile" type=" FileNameConvention " minOccurs="0"/>\r
+                    <xs:element name="OutputFileExtension" type=" xs:string " minOccurs="0"/>\r
+                    <xs:element name="ToolName" type=" ToolType " minOccurs="0"/>\r
+                  </xs:sequence>\r
+                  <xs:attributeGroup ref=" SectionsAttributes "/>\r
+                </xs:complexType>\r
+              </xs:element>\r
+              <xs:element name="Sections" minOccurs="0" maxOccurs="unbounded">\r
+                <xs:complexType>\r
+                  <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
+                    <xs:element name="Section">\r
+                      <xs:complexType>\r
+                        <xs:sequence>\r
+                          <xs:element ref=" Filenames " minOccurs="0"/>\r
+                          <xs:element name="Args" type=" ArgsType " minOccurs="0"/>\r
+                          <xs:element name="OutFile" type=" FileNameConvention " minOccurs="0"/>\r
+                          <xs:element name="OutputFileExtension" type=" xs:string " minOccurs="0"/>\r
+                          <xs:element name="ToolName" type=" ToolType " minOccurs="0"/>\r
+                        </xs:sequence>\r
+                        <xs:attributeGroup ref=" SectionsAttributes "/>\r
+                      </xs:complexType>\r
+                    </xs:element>\r
+                  </xs:sequence>\r
+                  <xs:attributeGroup ref=" SectionsAttributes "/>\r
+                </xs:complexType>\r
+              </xs:element>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref=" SectionsAttributes "/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+        <!-- Remove to Here -->\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Copyright" type="Paragraph"/>\r
+  <xs:element name="DataHubs">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is a list of DataHubRecord elements.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="DataHubRecord">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Attribute">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Name" type="C_Name"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Value" type="C_Name"/>\r
-                        </xs:sequence>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Sections"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Filename">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the valid content of a filename This should extend PathAndFilename - Variable names not allowed here!</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="PathAndFilename">\r
-                    <xs:attributeGroup ref="FilenameAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Filenames">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a list of Filenames</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Filename"/>\r
-                <!-- DO NOT USE Arch remove it element and use Arch Attribute to Filename instead -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1">\r
-                            <xs:element maxOccurs="unbounded" ref="Filename"/>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Formsets">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the list of a Formset elements</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element name="Formset">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="C_Name">\r
-                                <xs:attributeGroup ref="FormsetAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- DO NOT USE! removing Arch element, use Arch attribute in Formset instead. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element name="Formset">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">Describe the valid content of a Formset</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:complexType>\r
-                                    <xs:simpleContent>\r
-                                        <xs:extension base="C_Name">\r
-                                            <xs:attributeGroup ref="FormsetAttributes"/>\r
-                                        </xs:extension>\r
-                                    </xs:simpleContent>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Guid">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the valid content of a GUID</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="GuidType">\r
-                    <xs:attributeGroup ref="GuidAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="GuidDeclarations">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="DataHubCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="DataHubAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="DefaultValue">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">The default setting of a PCD entry.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:simpleContent>\r
+        <xs:extension base="xs:normalizedString"/>\r
+      </xs:simpleContent>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Description" type="Paragraph">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This section is required for new modules and libraries and must contain more information than the Abstract.</xs:documentation>\r
+    </xs:annotation>\r
+  </xs:element>\r
+  <xs:element name="DynamicPcdBuildDefinitions">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Child of Framework Platform Description (FPD)</xs:documentation>\r
+      <xs:documentation xml:lang="en">FPD uses this PCD information for Dynamic PCDs Only</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdBuildData">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
-                            <xs:choice minOccurs="1">\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                            </xs:choice>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="GuidDeclarationAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Guids">\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="GuidCNames">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">Describe the valid content of a GUID element in and MSA file.</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="GuidCName" type="C_NameType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="GuidAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" name="GuidEntry">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">Describe the valid content of a GUID element in and MSA file.</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="0" maxOccurs="1">\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                            <!-- DO NOT USE removing GuidValue from use -->\r
-                            <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                            <!-- DO NOT USE removing FeatureFlag from use, use FeatureFlag Attribute instead -->\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="FeatureFlag" type="C_Name"/>\r
-                            <!-- DO NOT USE remove ConditionalExpression and use FeatureFlag instead -->\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="ConditionalExpression"/>\r
-                            <!-- DO NOT USE, remove DefaultValue from use -->\r
-                            <xs:element minOccurs="0" maxOccurs="1" ref="DefaultValue"/>\r
-                            <!-- DO NOT USE, remove HelpText from use -->\r
-                            <xs:element minOccurs="0" maxOccurs="1" ref="HelpText"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="GuidAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- DO NOT USE Arch, Arch should be removed and the attribute Arch should be used in the above. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element name="GuidEntry">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">Describe the valid content of a PCD GUID element</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:complexType>\r
-                                    <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                        <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="unbounded" name="FeatureFlag" type="C_Name"/>\r
-                                        <!-- DO NOT USE remove ConditionalExpression and use FeatureFlag instead -->\r
-                                        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ConditionalExpression"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" ref="DefaultValue"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" ref="HelpText"/>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="GuidAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="GuidValue" type="GuidType"/>\r
-    <xs:element name="HelpText" type="Paragraph"/>\r
-    <xs:element name="HiiPackages">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the list of a HiiPackage elements</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element name="HiiPackage">\r
-                    <xs:complexType mixed="true">\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HiiCName" type="C_NameType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="HiiPackageAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Hobs">\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="HobTypes">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="HobType" type="HobTypes"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="HobAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>                \r
-                <xs:element minOccurs="0" name="Hob">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:choice>\r
-                                <!-- Remove Name from use -->\r
-                                <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:normalizedString"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" name="GuidC_Name" type="C_NameType"/>\r
-                            </xs:choice>\r
-                            <!-- Remove C_Name from use -->\r
-                            <xs:element minOccurs="0" maxOccurs="1" ref="C_Name"/>\r
-                            <!-- Remove Guid and GuidValue from use -->\r
-                            <xs:choice minOccurs="0">\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                            </xs:choice>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="HobAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- DO NOT USE Arch, use attribute Arch for Hob in above -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element name="Hob">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:normalizedString"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" ref="C_Name"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="HobAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ImageEntryPoint" type="C_Name"/>\r
-    <xs:element name="IncludeHeader">\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="PathAndFilename">\r
-                    <!-- Need to use IncludeHeaderAttributes in final -->\r
-                    <xs:attributeGroup ref="IncludeAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Includes">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">One or More Package Names or Arch sections is required. Includes are not files, but paths to where header files are located.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="PackageName"/>\r
-                <!-- remove Arch element, start using the Arch attribute for the PackageName element above. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1">\r
-                            <xs:element maxOccurs="unbounded" ref="PackageName"/>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="IndustryStdIncludes">\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuidCName" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize" type="DatumSizeLimitation"/>\r
+              <xs:element minOccurs="1" maxOccurs="unbounded" name="SkuInfo">\r
+                <xs:complexType>\r
+                  <xs:sequence>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="SkuId" type="xs:nonNegativeInteger"/>\r
+                    <xs:choice>\r
+                      <xs:group minOccurs="0" maxOccurs="1" ref="HiiEnable"/>\r
+                      <xs:group minOccurs="0" maxOccurs="1" ref="VpdEnable"/>\r
+                      <xs:group minOccurs="0" maxOccurs="1" ref="DefaultGroup"/>\r
+                    </xs:choice>\r
+                  </xs:sequence>\r
+                </xs:complexType>\r
+              </xs:element>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="DynamicBuildPcdAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Events">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is a list of MSA Events</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="CreateEvents">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" ref="IndustryStdHeader"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="IndustryStdHeader">\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="unbounded" name="EventTypes">\r
+                <xs:complexType>\r
+                  <xs:sequence>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="EventType" type="EventTypes"/>\r
+                    <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+                  </xs:sequence>\r
+                  <xs:attributeGroup ref="EventAttributes"/>\r
+                </xs:complexType>\r
+              </xs:element>\r
+            </xs:sequence>\r
+          </xs:complexType>\r
+        </xs:element>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="SignalEvents">\r
+          <xs:annotation>\r
+            <xs:documentation xml:lang="en">Module has an event that is waiting to be signaled. Event is named by GUID.</xs:documentation>\r
+          </xs:annotation>\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="Header" type="UiNameType"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="IncludeHeader" type="PathAndFilename"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-            </xs:sequence>\r
-            <xs:attributeGroup ref="IndustryStdHeaderAttributes"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="InstalledDate" type="DateType"/>\r
-    <xs:element name="Libraries">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Different (Module) Instances of Libraries used ONLY in FPD Files.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Library">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="xs:NCName">\r
-                                <xs:attributeGroup ref="LibraryAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- remove Arch Element HERE, start using the Arch attribute in Library element above. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:choice minOccurs="1" maxOccurs="unbounded">\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="Library">\r
-                                <xs:complexType>\r
-                                    <xs:simpleContent>\r
-                                        <xs:extension base="BaseNameConvention">\r
-                                            <xs:attributeGroup ref="LibraryAttributes"/>\r
-                                        </xs:extension>\r
-                                    </xs:simpleContent>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:choice>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- /remove Arch Element -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Instance">\r
-                    <xs:complexType>\r
-                        <xs:attributeGroup ref="LibraryAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>                \r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="LibraryClass">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Used in MSA files. This defines what class of library is being supported = produced (library module) or consumed by a module.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType mixed="true">\r
+              <xs:element minOccurs="1" maxOccurs="unbounded" name="EventTypes">\r
+                <xs:complexType>\r
+                  <xs:sequence>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="EventType" type="EventTypes"/>\r
+                    <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+                  </xs:sequence>\r
+                  <xs:attributeGroup ref="EventAttributes"/>\r
+                </xs:complexType>\r
+              </xs:element>\r
+            </xs:sequence>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Externs">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is a child of MSA files.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence minOccurs="1">\r
+        <xs:element minOccurs="0" maxOccurs="1" name="PcdIsDriver" type="PcdDriverTypes"/>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="Specification" type="Sentence"/>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="Extern">\r
+          <xs:complexType>\r
+            <xs:choice minOccurs="1">\r
+              <xs:sequence>\r
+                <xs:annotation>\r
+                  <xs:documentation xml:lang="en">Driver Module</xs:documentation>\r
+                </xs:annotation>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="ModuleEntryPoint" type="C_NameType"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="ModuleUnloadImage" type="C_NameType"/>\r
+              </xs:sequence>\r
+              <xs:sequence>\r
+                <xs:annotation>\r
+                  <xs:documentation xml:lang="en">Library Module</xs:documentation>\r
+                </xs:annotation>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="Constructor" type="C_NameType"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="Destructor" type="C_NameType"/>\r
+              </xs:sequence>\r
+              <xs:sequence>\r
+                <xs:annotation>\r
+                  <xs:documentation xml:lang="en">Allow multiple entries for DriverBinding, ComponentName, DriverConfig and DriverDiag elements. For ComponentName, DriverConfig and/or DriverDiag - you must have a 1:1 mapping to DriverBinding if the element is defined.</xs:documentation>\r
+                  <xs:documentation xml:lang="en">Permit User Defined Extern Tags</xs:documentation>\r
+                </xs:annotation>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="DriverBinding" type="C_NameType"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="ComponentName" type="C_NameType"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="DriverConfig" type="C_NameType"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="DriverDiag" type="C_NameType"/>\r
+              </xs:sequence>\r
+              <xs:sequence>\r
+                <xs:annotation>\r
+                  <xs:documentation xml:lang="en"> Module Call Backs</xs:documentation>\r
+                </xs:annotation>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="SetVirtualAddressMapCallBack" type="C_NameType"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="ExitBootServicesCallBack" type="C_NameType"/>\r
+              </xs:sequence>\r
+            </xs:choice>\r
+            <xs:attributeGroup ref="ExternAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Filename">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Describe the valid content of a filename This should extend PathAndFilename - Variable names not allowed here!</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:simpleContent>\r
+        <xs:extension base="PathAndFilename">\r
+          <xs:attributeGroup ref="FilenameAttributes"/>\r
+        </xs:extension>\r
+      </xs:simpleContent>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Filenames">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is a list of Filenames</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence minOccurs="1">\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="Filename"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="GuidDeclarations">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="Keyword" type="KeywordType"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-            </xs:sequence>            \r
-            <xs:attributeGroup ref="LibraryClassAttributes"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <!-- LAH This is LibraryClassDeclaration FINAL version -->\r
-    <xs:element name="LibraryClassDeclaration">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This element defines a class of library, along with the path to the Include Header for this library</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="GuidValue" type="GuidType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="GuidDeclarationAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Guids">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="GuidCNames">\r
+          <xs:annotation>\r
+            <xs:documentation xml:lang="en">Describe the valid content of a GUID element in and MSA file.</xs:documentation>\r
+          </xs:annotation>\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="LibraryClass">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="xs:NCName">\r
-                                <xs:attribute name="RecommendedInstanceGuid" type="GuidType" use="optional"/>\r
-                                <xs:attribute name="RecommendedInstanceVersion" type="xs:decimal" use="optional"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="IncludeHeader"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="RecommendedInstanceGuid" type="GuidType"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="RecommendedInstanceVersion" type="xs:decimal"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="HelpText"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <!-- LAH This is LibraryClassDeclarations FINAL version -->\r
-    <xs:element name="LibraryClassDeclarations">\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="GuidCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="GuidAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="HiiPackages">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Describe the list of a HiiPackage elements</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="HiiPackage">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" ref="LibraryClassDeclaration"/>\r
-                <xs:element name="LibraryClass" minOccurs="0" maxOccurs="unbounded">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="IncludeHeader" type="PathAndFilename"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="LibraryClassAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>            \r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="LibraryClassDefinitions">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This section defines what Classes of Library that this library supports. A Library may belong to multiple different library classes.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HiiCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="HiiPackageAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Hobs">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="HobTypes">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element ref="LibraryClass" minOccurs="1" maxOccurs="unbounded"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="License">\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="Paragraph">\r
-                    <xs:attribute name="URL" type="xs:anyURI" use="optional"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Modified" type="DateType"/>\r
-    <xs:element name="ModifiedDate" type="DateType"/>\r
-    <xs:element name="Module">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is record format for a Module entry in the Framework Database file.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:annotation>\r
-                <xs:documentation xml:lang="en">This describes the fields in an Module record in the Framework Database. The Path field is relative to the workspace to Module Surface Area (MSA) files.</xs:documentation>\r
-            </xs:annotation>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HobType" type="HobTypes"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="HobAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="IncludeHeader">\r
+    <xs:complexType>\r
+      <xs:simpleContent>\r
+        <xs:extension base="PathAndFilename">\r
+          <xs:attributeGroup ref="IncludeHeaderAttributes"/>\r
+        </xs:extension>\r
+      </xs:simpleContent>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="IndustryStdIncludes">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" ref="IndustryStdHeader"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="IndustryStdHeader">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="IncludeHeader" type="PathAndFilename"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+      </xs:sequence>\r
+      <xs:attributeGroup ref="IndustryStdHeaderAttributes"/>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Libraries">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Different (Module) Instances of Libraries used ONLY in FPD Files.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Instance">\r
+          <xs:complexType>\r
+            <xs:attributeGroup ref="LibraryAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="LibraryClass">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Used in MSA files. This defines what class of library is being supported = produced (library module) or consumed by a module.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="Keyword" type="KeywordType"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+      </xs:sequence>\r
+      <xs:attributeGroup ref="LibraryClassAttributes"/>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <!-- LAH This is SPD LibraryClassDeclarations FINAL version -->\r
+  <xs:element name="LibraryClassDeclarations">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="LibraryClass">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="ModuleName"/>\r
-                <xs:choice minOccurs="1">\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                </xs:choice>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Path"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ModuleEntryPoint" type="xs:normalizedString"/>\r
-    <xs:element name="ModuleList">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This tag is used in the Framework Package Database File to track package installation</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence maxOccurs="unbounded">\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" ref="Module"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ModuleName">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is the valid content of a Module Name</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="xs:NCName">\r
-                    <xs:attributeGroup ref="ModuleNameAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ModuleType" type="ModuleTypeDef">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the valid EFI Phase that the Module is designed to execute under.</xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="ModuleUnloadImage" type="xs:normalizedString"/>\r
-    <xs:element name="MsaFiles">\r
-        <xs:complexType>\r
-          <xs:choice minOccurs="1" maxOccurs="unbounded">\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="MsaFile">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">Surface Area Package Description (SPD) list of Module Surface Area files</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="0" maxOccurs="1">\r
-                            <xs:element minOccurs="0" ref="Filename"/>\r
-                            <xs:element minOccurs="0" ref="BuildOptions"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="MsaAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- DO NOT USE Arch element, use attribute Arch in above. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1">\r
-                            <xs:element maxOccurs="unbounded" name="MsaFile">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">Describe the valid content of a Surface Area Package Description (SPD) file</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:complexType>\r
-                                    <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                        <xs:element minOccurs="0" ref="Filename"/>\r
-                                        <xs:element minOccurs="0" ref="BuildOptions"/>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="MsaAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-              <xs:element minOccurs="0" maxOccurs="unbounded" name="Filename" type="PathAndFilename"/>\r
-          </xs:choice>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <!-- Use in Final -->\r
-    <xs:element name="MsaFileList">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Surface Area Package Description (SPD) list of Module Surface Area files</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="IncludeHeader" type="PathAndFilename"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="LibraryClassDeclarationAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="LibraryClassDefinitions">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This section defines what Classes of Library that this library supports. A Library may belong to multiple different library classes.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" ref="LibraryClass"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="License">\r
+    <xs:complexType>\r
+      <xs:simpleContent>\r
+        <xs:extension base="Paragraph">\r
+          <xs:attribute name="URL" type="xs:anyURI" use="optional"/>\r
+        </xs:extension>\r
+      </xs:simpleContent>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="ModuleBuildOptions">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##local"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="ModuleSaBuildOptions">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="FvBinding" type="KeywordType"/>\r
+        <!-- The FfsFileNameGuid allows the Platform Integrator to specify a GUID for the FFS File Name GUID -->\r
+        <xs:element minOccurs="0" maxOccurs="1" name="FfsFileNameGuid" type="GuidType"/>\r
+        <!-- If binding is specified, you MUST specify the FfsFormatKey -->\r
+        <xs:element minOccurs="0" maxOccurs="1" name="FfsFormatKey" type="KeywordType"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" ref="Options"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="ModuleDefinitions">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="SupportedArchitectures" type="ArchListType"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="BinaryModule" type="xs:boolean" default="false"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="OutputFileBasename" type="FileNameConvention"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="ClonedFrom">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Filename" type="PathAndFilename"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="OutputDirectory">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Define where we want our output to go. The Attribute, IntermediateDirectories, default MODULE, says that intermediate files will be local to the module, versus a unified directory structure.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="unbounded" name="Cloned">\r
+                <xs:complexType>\r
+                  <xs:sequence>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="PackageGuid" type="GuidType"/>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="PackageVersion" type="VersionDataType"/>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="ModuleGuid" type="GuidType"/>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="ModuleVersion" type="VersionDataType"/>\r
+                  </xs:sequence>\r
+                </xs:complexType>\r
+              </xs:element>\r
+            </xs:sequence>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="ModuleType" type="ModuleTypeDef">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Describe the valid EFI Phase that the Module is designed to execute under.</xs:documentation>\r
+    </xs:annotation>\r
+  </xs:element>\r
+  <!-- Use in Final -->\r
+  <xs:element name="MsaFiles">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">MsaFiles is a child of Surface Area Package Description (SPD) files</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename" type="PathAndFilename"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Options">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" ref="Option"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Option">\r
+    <!-- This element is used to store flags from the Tools -->\r
+    <xs:complexType>\r
+      <xs:simpleContent>\r
+        <xs:extension base="xs:normalizedString">\r
+          <xs:attributeGroup ref="OptionAttributes"/>\r
+        </xs:extension>\r
+      </xs:simpleContent>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="PackageDefinitions">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="ReadOnly" type="xs:boolean" default="false"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="RePackage" type="xs:boolean" default="false"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="ClonedFrom">\r
+          <xs:complexType>\r
+            <xs:sequence>\r
+              <xs:element minOccurs="1" maxOccurs="unbounded" name="Cloned">\r
+                <xs:complexType>\r
+                  <xs:sequence>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="PackageGuid" type="GuidType"/>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="PackageVersion" type="VersionDataType"/>\r
+                  </xs:sequence>\r
+                </xs:complexType>\r
+              </xs:element>\r
+            </xs:sequence>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="PackageDependencies">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This tag is used in the Module Surface Area Description File (MSA) to track package dependencies for a module.</xs:documentation>\r
+      <xs:documentation xml:lang="en">Attributes to PackageName include Required: Usage PackageGuid PackageVesion, Optional: FeatureFlag</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Package">\r
+          <xs:complexType>\r
+            <xs:attributeGroup ref="PackageAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="PackageHeaders">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">PackageHeaders is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="IncludePkgHeader">\r
+          <xs:complexType>\r
             <xs:simpleContent>\r
-                <xs:extension base="DirectoryNamingConvention">\r
-                    <xs:attribute default="MODULE" name="IntermediateDirectories">\r
-                        <xs:simpleType>\r
-                            <xs:restriction base="UCNameType">\r
-                                <xs:enumeration value="MODULE"/>\r
-                                <xs:enumeration value="UNIFIED"/>\r
-                            </xs:restriction>\r
-                        </xs:simpleType>\r
-                    </xs:attribute>\r
-                </xs:extension>\r
+              <xs:extension base="PathAndFilename">\r
+                <xs:attributeGroup ref="PackageHeaderAttributes"/>\r
+              </xs:extension>\r
             </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ProcessStep">\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="ToolName" type="xs:string"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="ToolArgs" type="xs:string"/>\r
-                <!-- Input patterns  to be processed by the tool above -->\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="InputPattern" type="xs:string"/>\r
-                <!-- A pattern to match for the output -->\r
-                <xs:element minOccurs="1" maxOccurs="1" name="OutputPattern" type="xs:string"/>\r
-            </xs:sequence>\r
-            <xs:attributeGroup ref="ProcessStepAttributes"/>\r
-        </xs:complexType>\r
-    </xs:element>    \r
-    <xs:element name="FfsFormatDeclarations">\r
-        <xs:complexType>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="PackageList">\r
+    <!-- Valid for DB usage only! -->\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This tag is used in the Framework Package Database File to track all packages (SPD files) installed in a workspace. (Database)</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename" type="DbPathAndFilename"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <!-- PcdBuildDefinition is a child of FPD ModuleSA element for FIXED_AT_BUILD, PATCHABLE_IN_MODULE, and FEATURE_FLAG PCDS Only! -->\r
+  <xs:element name="PcdBuildDefinition">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Child of FPD ModuleSA element for FIXED_AT_BUILD, PATCHABLE_IN_MODULE, and FEATURE_FLAG PCDS Only!</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdData">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="FfsFormatDeclaration">\r
-                    <!-- Required Attributes are the FfsFormatKeyword and SupModuleList -->\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="unbounded" ref="ProcessStep"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="FfsAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PackageDefinitions">\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuidCName" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
+              <!-- MaxDatumSize is only required if the DatumType is VOID* -->\r
+              <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize" type="DatumSizeLimitation"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="Value" type="DefaultValueType"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="PcdBuildDefinitionAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:group name="DefaultGroup">\r
+    <xs:sequence>\r
+      <xs:element minOccurs="1" maxOccurs="1" name="Value" type="DefaultValueType"/>\r
+    </xs:sequence>\r
+  </xs:group>\r
+  <xs:group name="HiiEnable">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">If HiiEnable group is specified, then HiiEnable is default true</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:sequence>\r
+      <xs:element minOccurs="1" maxOccurs="1" name="VariableName" type="HexWordArrayType"/>\r
+      <xs:element minOccurs="1" maxOccurs="1" name="VariableGuid" type="C_NameType"/>\r
+      <xs:element minOccurs="1" maxOccurs="1" name="VariableOffset" type="Hex64BitDataType"/>\r
+      <xs:element minOccurs="1" maxOccurs="1" name="HiiDefaultValue" type="DefaultValueType"/>\r
+    </xs:sequence>\r
+  </xs:group>\r
+  <xs:group name="VpdEnable">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">If VpdEnable group is specified, then VpdEnable is default true</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:sequence>\r
+      <xs:element minOccurs="1" maxOccurs="1" name="VpdOffset" type="Hex64BitDataType"/>\r
+    </xs:sequence>\r
+  </xs:group>\r
+  <xs:element name="PcdCoded">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Child of Module Surface Area Description (MSA)</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdEntry">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="ReadOnly" type="xs:boolean" default="false"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="RePackage" type="xs:boolean" default="false"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>    \r
-    <xs:element name="PCDs">\r
-        <!-- PCDs section is going away to be replaced by something else TB Named later -->\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Child of Module Surface Area documents, MSA and MBD files, Library Modules and Other Modules</xs:documentation>\r
-            <xs:documentation xml:lang="en">One or more PcdData or PcdBuildData Elements Only one type is permitted</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element maxOccurs="unbounded" name="PcdData">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">This is a child of PCDs and can occur in the MSA and MBD files.</xs:documentation>\r
-                        <xs:documentation xml:lang="en">This is date element is used in the Module Surface Area (MSA) file and contains references to be used by a Platform Build</xs:documentation>\r
-                        <xs:documentation xml:lang="en">There is ONE required Attribute, ItemType</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="HexDoubleWordDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="TokenSpaceGuid" type="GuidType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="HiiEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="VpdEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="AlternateNameSpaceEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="SkuEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="SkuDataArrayEnable" type="xs:boolean"/>\r
-                            <xs:element default="0x00" minOccurs="0" maxOccurs="1" name="MaxSku" type="HexByteDataType"/>\r
-                            <xs:element default="0x00" minOccurs="0" maxOccurs="1" name="SkuId" type="HexByteDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DatumSize" type="DatumSizeLimitation"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="VariableName" type="xs:normalizedString"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="VariableGuid" type="VariableGuidType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DataOffset" type="Hex64BitDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="GuidOffset" type="Hex64BitDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="xs:normalizedString"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" ref="HelpText"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PcdAttributes"/>\r
-                        <xs:attribute name="PcdIsDriver" use="optional"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PackageDependencies">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This tag is used in the Package Surface Area Description File (SPD) to track package dependencies for a module</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence maxOccurs="unbounded">\r
-                <xs:choice>\r
-                    <xs:element minOccurs="1" maxOccurs="unbounded" ref="Package"/>\r
-                    <xs:element minOccurs="1" maxOccurs="unbounded" ref="PackageName"/>                    \r
-                </xs:choice>\r
-            </xs:sequence>\r
-            <xs:attributeGroup ref="PackageNameAttributes"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PackageHeaders">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuidCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="DefaultValueType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <!-- MSA file declares a single usage, and must match one of the entries in what the SPD file declares as the set of possible Item Types. -->\r
+            <xs:attributeGroup ref="PcdCodedAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <!-- LAH This is PcdDeclarations FINAL version -->\r
+  <xs:element name="PcdDeclarations">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">PcdDeclaratins is a child of Package Surface Area Description (SPD)</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence minOccurs="1">\r
+        <xs:element maxOccurs="unbounded" name="PcdEntry">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:choice>\r
-                    <!-- DO NOT USE! removing IncludeHeader, use IncludePkgHeader instead. -->\r
-                    <xs:element minOccurs="0" maxOccurs="unbounded" ref="IncludeHeader"/>\r
-                    <xs:element minOccurs="0" maxOccurs="unbounded" name="IncludePkgHeader">\r
-                        <xs:complexType>\r
-                            <xs:simpleContent>\r
-                                <xs:extension base="PathAndFilename">\r
-                                    <xs:attributeGroup ref="PackageHeaderAttributes"/>\r
-                                </xs:extension>\r
-                            </xs:simpleContent>\r
-                        </xs:complexType>\r
-                    </xs:element>\r
-                </xs:choice>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PackageList">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This tag is used in the Framework Package Database File to track all packages installed in a workspace. (Database)</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence maxOccurs="unbounded">\r
-                <xs:element minOccurs="0" name="Package">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">This tag is used in the Framework Package Database File to track individual package information. The Path is a relative path to the SPD File.</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence maxOccurs="unbounded">\r
-                            <xs:element minOccurs="0" maxOccurs="1" ref="PackageName"/>\r
-                            <xs:choice minOccurs="0">\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                <!-- DO NOT USE Guid should be removed, use PackageGuid instead -->\r
-                                <xs:element minOccurs="0" maxOccurs="1" name="PackageGuid" type="GuidType"/>\r
-                            </xs:choice>\r
-                            <xs:choice minOccurs="0">\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Version"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" name="PackageVersion" type="VersionDataType"/>\r
-                            </xs:choice>\r
-                            <xs:choice minOccurs="1">\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Path"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Filename"/>\r
-                            </xs:choice>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="InstalledDate"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PackageAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element name="Filename" type="PathAndFilename" minOccurs="0" maxOccurs="unbounded"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Package">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This tag is used in the Package Surface Area Description File to track package dependencies for a module (SPD) </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:attributeGroup ref="PackageAttributes"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PackageName">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This tag is used in the Package Surface Area Description File to track package dependencies for a module (SPD) </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="UiNameType">\r
-                    <xs:attributeGroup ref="PackageAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PackageType" type="PackageType"/>\r
-    <xs:element name="Path">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the valid content of a filename</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="DirectoryNamingConvention">\r
-                    <xs:attributeGroup ref="DirectoryAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="DynamicPcdBuildDefinitions">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Child of Framework Platform Description (FPD)</xs:documentation>\r
-            <xs:documentation xml:lang="en">FPD uses this PCD information for Dynamic PCDs Only</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuidCName" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="ValidUsage" type="PcdListType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="DefaultValueType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="PcdDeclarationAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="FarList">\r
+    <!-- Valid for DB usage only! -->\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This tag is used in the Framework Package Database File to track all DISTRIBUTION packages (FAR files) installed in a workspace. (Database)</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename" type="DbPathAndFilename"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="FfsFormatDeclarations">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="FfsFormatDeclaration">\r
+          <!-- Required Attributes are the FfsFormatKeyword and SupModuleList -->\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdBuildData">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="TokenSpaceGuid" type="GuidType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize" type="DatumSizeLimitation"/>\r
-                            <xs:element minOccurs="1" maxOccurs="unbounded" name="SkuInfo">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:element minOccurs="1" maxOccurs="1" name="SkuId" type="xs:nonNegativeInteger"/>\r
-                                        <xs:choice>\r
-                                            <xs:group minOccurs="0" maxOccurs="1" ref="HiiEnable"/>\r
-                                            <xs:group minOccurs="0" maxOccurs="1" ref="VpdEnable"/>\r
-                                            <xs:group minOccurs="0" maxOccurs="1" ref="DefaultGroup"/>\r
-                                        </xs:choice>\r
-                                    </xs:sequence>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="DynamicBuildPcdAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PcdBuildDefinition">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Child of FPD ModuleSA element for FIXED_AT_BUILD, PATCHABLE_IN_MODULE, and FEATURE_FLAG PCDS Only!</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="unbounded" ref="ProcessStep"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="FfsAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="PpiDeclarations">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">PpiDeclarations is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdData">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuid" type="GuidType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
-                            <!-- MaxDatumSize is only required if the DatumType is VOID* -->\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize" type="DatumSizeLimitation"/>                            \r
-                            <xs:element minOccurs="0" maxOccurs="1" name="Value" type="DefaultValueType"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PcdBuildDefinitionAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:group name="DefaultGroup">\r
-        <xs:sequence>\r
-            <xs:element minOccurs="1" maxOccurs="1" name="Value" type="DefaultValueType"/>\r
-        </xs:sequence>\r
-    </xs:group>\r
-    <xs:group name="HiiEnable">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">If HiiEnable group is specified, then HiiEnable is default true</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:sequence>\r
-            <xs:element minOccurs="1" maxOccurs="1" name="VariableName" type="VariableNameDataType"/>\r
-            <xs:element minOccurs="0" maxOccurs="1" name="VariableGuid" type="C_NameType"/>\r
-            <xs:element minOccurs="1" maxOccurs="1" name="VariableOffset" type="Hex64BitDataType"/>\r
-            <xs:element minOccurs="1" maxOccurs="1" name="HiiDefaultValue" type="DefaultValueType"/>\r
-        </xs:sequence>\r
-    </xs:group>\r
-    <xs:group name="VpdEnable">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">If VpdEnable group is specified, then VpdEnable is default true</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:sequence>\r
-            <xs:element minOccurs="1" maxOccurs="1" name="VpdOffset" type="Hex64BitDataType"/>\r
-        </xs:sequence>\r
-    </xs:group>\r
-    <xs:element name="PcdCoded">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Child of Module Surface Area Description (MSA)</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="GuidValue" type="GuidType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="PpiDeclarationAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="PPIs">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Provide for one or more Ppi or PpiNotify sections. </xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence minOccurs="1">\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="Ppi">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdEntry">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">This is the valid content of the PCD table of a Module. The contents may not be wired at build time, and these only refer to Platform Build values, not modules.</xs:documentation>\r
-                        <xs:documentation xml:lang="en">This element is valid for PcdInfo.xml and FPD files.</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="TokenSpaceGuidCName" type="C_NameType"/>                            \r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="DefaultValueType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <!-- MSA file declares a single usage, and must match one of the entries in what the SPD file declares as the set of possible Item Types. -->\r
-                        <xs:attributeGroup ref="PcdCodedAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <!-- LAH This is PcdDeclarations FINAL version -->\r
-    <xs:element name="PcdDeclarations">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Child of Package Surface Area Description (SPD)</xs:documentation>\r
-            <xs:documentation xml:lang="en">This section is for entering information about a package's PCDs</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element maxOccurs="unbounded" name="PcdEntry">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="TokenSpaceGuidCName" type="C_NameType"/>                            \r
-                            <xs:element minOccurs="0" maxOccurs="1" name="TokenSpaceGuid" type="GuidType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="ValidUsage" type="PcdListType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="DefaultValueType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PcdDeclarationAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <!-- DO NOT USE removing PcdDefinitions, use PcdDeclarations for SPD entries  Use PcdBuildDeclarations for MSA Entires and PcdDynamicBuildDeclarations for FPD Entries -->\r
-    <xs:element name="PcdDefinitions">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Child of Package Surface Area Description (SPD)</xs:documentation>\r
-            <xs:documentation xml:lang="en">This permits entering information about a package's PCD information</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element maxOccurs="unbounded" name="PcdEntry">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">This is the valid content of the PCD table of a Module. The contents may not be wired at build time, and these only refer to Platform Build values, not modules.</xs:documentation>\r
-                        <xs:documentation xml:lang="en">This element is valid for PcdInfo.xml and FPD files.</xs:documentation>\r
-                        <xs:documentation xml:lang="en">There is ONE required Attribute, ItemType</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="Token"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="TokenSpaceGuid" type="GuidType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="HiiEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="VpdEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="AlternateNameSpaceEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="SkuEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="SkuDataArrayEnable" type="xs:boolean"/>\r
-                            <xs:element default="0x00" minOccurs="0" maxOccurs="1" name="MaxSku" type="HexByteDataType"/>\r
-                            <xs:element default="0x00" minOccurs="0" maxOccurs="1" name="SkuId" type="HexByteDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DatumSize">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">Max Number of Bytes of the data.</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:simpleType>\r
-                                    <xs:restriction base="xs:int">\r
-                                        <xs:minInclusive value="1"/>\r
-                                        <xs:maxInclusive value="16777215"/>\r
-                                    </xs:restriction>\r
-                                </xs:simpleType>\r
-                            </xs:element>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="VariableName" type="xs:normalizedString"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="VariableGuid" type="VariableGuidType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DataOffset" type="Hex64BitDataType"/>\r
-                            <xs:element default="0" minOccurs="0" maxOccurs="1" name="GuidOffset" type="Hex64BitDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="DefaultValueType"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PcdAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Platform">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Database Entry to locate the Platform Build Tips - path to FPD file.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="PpiCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="PpiAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="PpiNotify">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="PlatformName">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">Define the Name of a Platform</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="PlatformNamingConvention">\r
-                                <xs:attributeGroup ref="PlatformAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:choice minOccurs="0">\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Path"/>\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Filename"/>\r
-                </xs:choice>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="InstalledDate"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="ModifiedDate"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="AlternatePcdFile" type="FileNameConvention"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="AlternateFdfFile" type="FileNameConvention"/>\r
-            </xs:sequence>\r
-            <xs:attributeGroup ref="PlatformAttributes"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PpiDeclarations">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="PpiNotifyCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="PpiNotifyAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="ProtocolDeclarations">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">ProtocolDeclarations is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
-                            <xs:choice>\r
-                                <!-- DO NOT USE removing Guid in final, use GuidValue instead -->\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                            </xs:choice>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PpiDeclarationAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PPIs">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Provide for one or more Ppi or PpiNotify sections. </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Ppi">\r
-                    <xs:complexType mixed="true">\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="PpiCName" type="C_NameType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PpiAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="PpiNotify">\r
-                    <xs:complexType mixed="true">\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="PpiNotifyCName" type="C_NameType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PpiNotifyAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- DO NOT USE Arch element, use Arch Attribute in above instead. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="Ppi">\r
-                                <xs:complexType>\r
-                                    <xs:simpleContent>\r
-                                        <xs:extension base="C_Name">\r
-                                            <xs:attributeGroup ref="PpiAttributes"/>\r
-                                        </xs:extension>\r
-                                    </xs:simpleContent>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="PpiNotify">\r
-                                <xs:complexType>\r
-                                    <xs:simpleContent>\r
-                                        <xs:extension base="C_Name">\r
-                                            <xs:attributeGroup ref="PpiNotifyAttributes"/>\r
-                                        </xs:extension>\r
-                                    </xs:simpleContent>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ProtocolDeclarations">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="GuidValue" type="GuidType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="ProtocolDeclarationAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Protocols">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">If either Protocol or ProtocolNotify sections are needed, one or more of them should be specified within this section</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="Protocol">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
-                            <xs:choice>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                            </xs:choice>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="ProtocolDeclarationAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Protocols">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">If either Protocol or ProtocolNotify sections are needed, one or more of them should be specified within this section</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Protocol">\r
-                    <xs:complexType mixed="true">\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="ProtocolCName" type="C_NameType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="ProtocolAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="ProtocolNotify">\r
-                    <xs:complexType mixed="true">\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="ProtocolNotifyCName" type="C_NameType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="ProtocolNotifyAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- DO NOT USE! removing Arch element, use Arch attribute of Protocol or ProtocolNotify instead. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="Protocol">\r
-                                <xs:complexType>\r
-                                    <xs:simpleContent>\r
-                                        <xs:extension base="C_NameType">\r
-                                            <xs:attributeGroup ref="ProtocolAttributes"/>\r
-                                        </xs:extension>\r
-                                    </xs:simpleContent>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="ProtocolNotify">\r
-                                <xs:complexType>\r
-                                    <xs:simpleContent>\r
-                                        <xs:extension base="C_NameType">\r
-                                            <xs:attributeGroup ref="ProtocolNotifyAttributes"/>\r
-                                        </xs:extension>\r
-                                    </xs:simpleContent>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element default="false" name="ReadOnly" type="xs:boolean"/>\r
-    <xs:element default="false" name="RePackage" type="xs:boolean"/>\r
-    <xs:element name="Sections">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Sections refers to the Firmware Filesystem sections, PE32, UI, VER, DXS, etc. and how they are made</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Section">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="0" ref="Filenames"/>\r
-                            <xs:element minOccurs="0" name="Args" type="ArgsType"/>\r
-                            <xs:element minOccurs="0" name="OutFile" type="FileNameConvention"/>\r
-                            <xs:element minOccurs="0" name="OutputFileExtension" type="xs:string"/>\r
-                            <xs:element minOccurs="0" name="ToolName" type="ToolType"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="SectionAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Sections">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                            <xs:element name="Section">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:element minOccurs="0" ref="Filenames"/>\r
-                                        <xs:element minOccurs="0" name="Args" type="ArgsType"/>\r
-                                        <xs:element minOccurs="0" name="OutFile" type="FileNameConvention"/>\r
-                                        <xs:element minOccurs="0" name="OutputFileExtension" type="xs:string"/>\r
-                                        <xs:element minOccurs="0" name="ToolName" type="ToolType"/>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="SectionAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="SectionsAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-            <xs:attributeGroup ref="SectionsAttributes"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="SetVirtualAddressMapCallBack" type="C_Name"/>\r
-    <xs:element name="SourceFiles">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Multiple Filenames may be specified, and they may also be scoped to a specific Architecture.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Filename"/>\r
-                <!-- DO NOT USE! removing Arch element, use Arch Attribute of Filename instead.  -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1">\r
-                            <xs:element maxOccurs="unbounded" ref="Filename"/>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="SkuInfo">\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="ProtocolCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="ProtocolAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="ProtocolNotify">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="UiSkuName">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="UiNameType">\r
-                                <xs:attribute name="SkuID" type="xs:nonNegativeInteger" use="required"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Specification">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This string is used to provide the name and version of the Specification that the component conforms to.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="ProtocolNotifyCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="ProtocolNotifyAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="ProcessStep">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="ToolName" type="xs:string"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="ToolArgs" type="xs:string"/>\r
+        <!-- Input patterns  to be processed by the tool above -->\r
+        <xs:element minOccurs="0" maxOccurs="1" name="InputPattern" type="xs:string"/>\r
+        <!-- A pattern to match for the output -->\r
+        <xs:element minOccurs="1" maxOccurs="1" name="OutputPattern" type="xs:string"/>\r
+      </xs:sequence>\r
+      <xs:attributeGroup ref="ProcessStepAttributes"/>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="SourceFiles">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Multiple Filenames may be specified, and they may also be scoped to a specific Architecture.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" ref="Filename"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="SkuInfo">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="UiSkuName">\r
+          <xs:complexType>\r
             <xs:simpleContent>\r
-                <xs:extension base="xs:normalizedString">\r
-                    <xs:attribute name="Version" type="xs:normalizedString" use="optional"/>\r
-                </xs:extension>\r
+              <xs:extension base="UiNameType">\r
+                <xs:attribute name="SkuID" type="xs:nonNegativeInteger" use="required"/>\r
+              </xs:extension>\r
             </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="SystemTables">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is list of System Table elements.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element name="SystemTable">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                            <!-- Remove Entry from Use -->\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="Entry" type="xs:normalizedString"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="SystemTableAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="SystemTableCNames">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="SystemTableCName" type="C_NameType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="SystemTableAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Updated" type="DateType"/>\r
-    <xs:element name="UpdatedDate" type="DateType"/>\r
-    <xs:element name="URL" type="xs:anyURI"/>\r
-    <xs:element name="URI" type="xs:anyURI"/>\r
-    <xs:element name="UserDefinedAntTasks">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a sub-element of BuildOptions</xs:documentation>\r
-            <xs:documentation xml:lang="en">Permit Users to define their own custom ANT tasks.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence maxOccurs="unbounded">\r
-                <xs:element minOccurs="1" ref="AntTask"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="UserExtensions">\r
-        <xs:complexType>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="SystemTables">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is list of System Table elements.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="SystemTableCNames">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##local"/>\r
-            </xs:sequence>\r
-            <xs:attribute name="UserID" type="xs:NCName" use="required"/>\r
-            <xs:attribute name="Identifier" type="xs:nonNegativeInteger" use="required"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Variables">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">An MSA FILE list of EFI Variables described by string pair.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element name="Variable">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">This is an EFI Variable Entry</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:choice>\r
-                                <!-- DO NOT USE remove String from final -->\r
-                                <xs:element minOccurs="1" maxOccurs="1" name="String" type="xs:normalizedString"/>\r
-                                <!-- Make VariableName required -->\r
-                                <xs:element minOccurs="0" maxOccurs="1" name="VariableName" type="VariableNameDataType"/>\r
-                            </xs:choice>\r
-                            <xs:choice minOccurs="1">\r
-                                <!-- DO NOT USE, use GuidC_Name instead -->\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                <!-- DO NOT USE, use GuidC_Name instead -->\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                                <!-- Make GuidC_Name required -->\r
-                                <xs:element minOccurs="0" maxOccurs="1" name="GuidC_Name" type="C_NameType"/>\r
-                            </xs:choice>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>                            \r
-                            <!-- DO NOT USE, removiing  ByteOffset, Bit Offset and OffsetBitSize-->\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="ByteOffset" type="HexWordDataType">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">This entry represents the Hex Byte Offset {0x0, 0xn} to where the data starts.</xs:documentation>\r
-                                </xs:annotation>\r
-                            </xs:element>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="BitOffset">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">This entry represents the Location of the Starting Bit {0,8} of the start of Data. A value of zero or 1 indicates that there is no BitOffset into the byte.</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:simpleType>\r
-                                    <xs:restriction base="xs:int">\r
-                                        <xs:minInclusive value="0"/>\r
-                                        <xs:maxInclusive value="8"/>\r
-                                    </xs:restriction>\r
-                                </xs:simpleType>\r
-                            </xs:element>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="OffsetBitSize">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">This number represents the number of bits to use {0, 7} starting at the BitOffset. A value of 0 indicates that the entire Byte should be used.</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:simpleType>\r
-                                    <xs:restriction base="xs:int">\r
-                                        <xs:minInclusive value="0"/>\r
-                                        <xs:maxInclusive value="7"/>\r
-                                    </xs:restriction>\r
-                                </xs:simpleType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="VariableAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- DO NOT USE Arch element, use attribute Arch in above. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element name="Variable">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">This is an EFI Variable Entry</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:element minOccurs="1" maxOccurs="1" name="String" type="xs:normalizedString"/>\r
-                                        <xs:element minOccurs="1" maxOccurs="1" ref="Guid"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" name="ByteOffset" type="HexWordDataType">\r
-                                            <xs:annotation>\r
-                                                <xs:documentation xml:lang="en">This entry represents the Hex Byte Offset {0x0, 0xn} to where the data starts.</xs:documentation>\r
-                                            </xs:annotation>\r
-                                        </xs:element>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" name="BitOffset">\r
-                                            <xs:annotation>\r
-                                                <xs:documentation xml:lang="en">This entry represents the Location of the Starting Bit {0,8} of the start of Data. A value of zero or 1 indicates that there is no BitOffset into the byte.</xs:documentation>\r
-                                            </xs:annotation>\r
-                                            <xs:simpleType>\r
-                                                <xs:restriction base="xs:int">\r
-                                                    <xs:minInclusive value="0"/>\r
-                                                    <xs:maxInclusive value="8"/>\r
-                                                </xs:restriction>\r
-                                            </xs:simpleType>\r
-                                        </xs:element>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" name="OffsetBitSize">\r
-                                            <xs:annotation>\r
-                                                <xs:documentation xml:lang="en">This number represents the number of bits to use {0, 7} starting at the BitOffset. A value of 0 indicates that the entire Byte should be used.</xs:documentation>\r
-                                            </xs:annotation>\r
-                                            <xs:simpleType>\r
-                                                <xs:restriction base="xs:int">\r
-                                                    <xs:minInclusive value="0"/>\r
-                                                    <xs:maxInclusive value="7"/>\r
-                                                </xs:restriction>\r
-                                            </xs:simpleType>\r
-                                        </xs:element>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="VariableAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Version" type="xs:normalizedString"/>\r
-    <xs:element name="FarList">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This tag is used in the Framework Package Database File to track all DISTRIBUTION packages (FAR files) installed in a workspace. (Database)</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="SystemTableCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="SystemTableAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="UserDefinedAntTasks">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is a sub-element of BuildOptions</xs:documentation>\r
+      <xs:documentation xml:lang="en">Permit Users to define their own custom ANT tasks.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" ref="AntTask"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="UserExtensions">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##local"/>\r
+      </xs:sequence>\r
+      <xs:attribute name="UserID" type="xs:NCName" use="required"/>\r
+      <xs:attribute name="Identifier" type="xs:nonNegativeInteger" use="required"/>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Variables">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">An MSA FILE list of EFI Variables described by string pair.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Variable">\r
+          <xs:annotation>\r
+            <xs:documentation xml:lang="en">This is an EFI Variable Entry</xs:documentation>\r
+          </xs:annotation>\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename" type="PathAndFilename"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>    \r
+              <xs:element minOccurs="1" maxOccurs="1" name="VariableName" type="HexWordArrayType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="GuidC_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="VariableAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Version" type="VersionDataType"/>\r
 </xs:schema>\r
index 33145ef18b7b594a01c51a0c7d6467dda62fcd33..c6494ba8aa2888b53492da430d9fa3bdb2b619ab 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns="http://www.TianoCore.org/2006/Edk2.0" targetNamespace="http://www.TianoCore.org/2006/Edk2.0">\r
-    <!--\r
+  <!--\r
     Filename: FrameworkDataTypes.xsd\r
     \r
     Copyright (c) 2006, Intel Corp.\r
     WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
     \r
   -->\r
-    <xs:annotation>\r
-        <xs:documentation xml:lang="en">This schema defines EFI and Framework Data Types. Only simpleType are specified in this file. </xs:documentation>\r
-    </xs:annotation>\r
-    <xs:include schemaLocation="NamingConvention.xsd"/>\r
-    <xs:simpleType name="ArchListType">\r
-        <xs:list itemType="SupportedArchitectures"/>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="BlockNameType">\r
-        <xs:restriction base="UCNameType">\r
-            <xs:pattern value="BLOCK([A-F0-9]){2}"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="BootModeNames">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="FULL"/>\r
-            <xs:enumeration value="MINIMAL"/>\r
-            <xs:enumeration value="NO_CHANGE"/>\r
-            <xs:enumeration value="DIAGNOSTICS"/>\r
-            <xs:enumeration value="DEFAULT"/>\r
-            <xs:enumeration value="S2_RESUME"/>\r
-            <xs:enumeration value="S3_RESUME"/>\r
-            <xs:enumeration value="S4_RESUME"/>\r
-            <xs:enumeration value="S5_RESUME"/>\r
-            <xs:enumeration value="FLASH_UPDATE"/>\r
-            <xs:enumeration value="RECOVERY"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="BootModeUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="ModuleListType">\r
-        <xs:list itemType="FrameworkModuleTypes"/>\r
-    </xs:simpleType>    \r
-    <xs:simpleType name="IntermediateOutputType">\r
-        <xs:restriction base="UCNameType">\r
-            <xs:enumeration value="MODULE"/>\r
-            <xs:enumeration value="UNIFIED"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>    \r
-    <xs:simpleType name="BuildTargets">\r
-        <xs:restriction base="xs:NCName">\r
-            <xs:enumeration value="DEBUG"/>\r
-            <xs:enumeration value="RELEASE"/>\r
-            <xs:enumeration value="BOTH"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="BuildTargetList">\r
-        <xs:union memberTypes="UCNameType DEBUG RELEASE"/>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="DEBUG">\r
-        <xs:restriction base="UCNameType">\r
-            <xs:pattern value="DEBUG"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="RELEASE">\r
-        <xs:restriction base="UCNameType">\r
-            <xs:pattern value="RELEASE"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>    \r
-    <xs:simpleType name="ComponentExecutionPhase">\r
-        <xs:restriction base="UCNameType">\r
-            <xs:enumeration value="MDE"/>\r
-            <xs:enumeration value="SEC"/>\r
-            <xs:enumeration value="PEI_CORE"/>\r
-            <xs:enumeration value="PEIM"/>\r
-            <xs:enumeration value="DXE_CORE"/>\r
-            <xs:enumeration value="DXE_DRIVER"/>\r
-            <xs:enumeration value="DXE_RUNTIME_DRIVER"/>\r
-            <xs:enumeration value="DXE_SAL_DRIVER"/>\r
-            <xs:enumeration value="DXE_SMM_DRIVER"/>\r
-            <xs:enumeration value="UEFI"/>\r
-            <xs:enumeration value="UEFI_APPLICATION"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="ConditionalTarget">\r
-        <xs:list itemType="C_Name"/>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="DataHubUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-            <xs:enumeration value="PRIVATE"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="DateType">\r
-        <xs:restriction base="xs:normalizedString">\r
-            <xs:pattern value="[1-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="DatumSizeLimitation">\r
-        <xs:restriction base="xs:int">\r
-            <xs:minInclusive value="1"/>\r
-            <xs:maxInclusive value="16777215"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="DefaultValueType">\r
-      <xs:union memberTypes="xs:normalizedString Hex64BitDataType UnicodeString HexByteArrayType"/>\r
-    </xs:simpleType>    \r
-    <xs:simpleType name="EfiSectionType">\r
-        <xs:restriction base="UCNameType">\r
-            <xs:enumeration value="EFI_SECTION_FREEFORM_SUBTYPE_GUID"/>\r
-            <xs:enumeration value="EFI_SECTION_VERSION"/>\r
-            <xs:enumeration value="EFI_SECTION_USER_INTERFACE"/>\r
-            <xs:enumeration value="EFI_SECTION_DXE_DEPEX"/>\r
-            <xs:enumeration value="EFI_SECTION_PEI_DEPEX"/>\r
-            <xs:enumeration value="EFI_SECTION_PE32"/>\r
-            <xs:enumeration value="EFI_SECTION_PIC"/>\r
-            <xs:enumeration value="EFI_SECTION_TE"/>\r
-            <xs:enumeration value="EFI_SECTION_RAW"/>\r
-            <xs:enumeration value="EFI_SECTION_COMPRESSION"/>\r
-            <xs:enumeration value="EFI_SECTION_GUID_DEFINED"/>\r
-            <xs:enumeration value="EFI_SECTION_COMPATIBILITY16"/>\r
-            <xs:enumeration value="EFI_SECTION_FIRMWARE_VOLUME_IMAGE"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="EventTypes">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="EVENT_GROUP_GUID"/>\r
-            <xs:enumeration value="EVENT_TYPE_PERIODIC_TIMER"/>\r
-            <xs:enumeration value="EVENT_TYPE_RELATIVE_TIMER"/>\r
-            <!-- DON'T USE! TO BE REMOVED -->\r
-            <xs:enumeration value="EVENT_GROUP_EXIT_BOOT_SERVICES"/>\r
-            <xs:enumeration value="EVENT_GROUP_VIRTUAL_ADDRESS_CHANGE"/>\r
-            <xs:enumeration value="EVENT_GROUP_MEMORY_MAP_CHANGE"/>\r
-            <xs:enumeration value="EVENT_GROUP_READY_TO_BOOT"/>\r
-            <xs:enumeration value="EVENT_GROUP_LEGACY_BOOT"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="EventUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-            <xs:enumeration value="PRIVATE"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="ExecutionType">\r
-        <xs:restriction base="UCNameType">\r
-            <xs:enumeration value="REL" id="Relocatable"/>\r
-            <xs:enumeration value="NREL" id="Non-Relocatable"/>\r
-            <xs:enumeration value="XIP" id="Execute_In_Place"/>\r
-            <xs:enumeration value="PIC" id="Position_Independent_Code"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="ExternType">\r
-        <xs:restriction base="xs:string">\r
-            <xs:pattern value="(_*\w*\W*)*"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="ExternUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="FileNameUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-            <xs:enumeration value="PRIVATE"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="FormSetUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-            <xs:enumeration value="PRIVATE"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="FrameworkComponentTypes">\r
-        <xs:restriction base="UCNameType">\r
-            <xs:enumeration value="APRIORI"/>\r
-            <xs:enumeration value="SEC"/>\r
-            <xs:enumeration value="LIBRARY"/>\r
-            <xs:enumeration value="FV_IMAGE_FILE"/>\r
-            <xs:enumeration value="BS_DRIVER"/>\r
-            <xs:enumeration value="RT_DRIVER"/>\r
-            <xs:enumeration value="SAL_RT_DRIVER"/>\r
-            <xs:enumeration value="PE32_PEIM"/>\r
-            <xs:enumeration value="PIC_PEIM"/>\r
-            <xs:enumeration value="COMBINED_PEIM_DRIVER"/>\r
-            <xs:enumeration value="PEI_CORE"/>\r
-            <xs:enumeration value="DXE_CORE"/>\r
-            <xs:enumeration value="APPLICATION"/>\r
-            <xs:enumeration value="BS_DRIVER_EFI"/>\r
-            <xs:enumeration value="SHELLAPP"/>\r
-            <xs:enumeration value="UEFI_APPLICATION"/>\r
-            <xs:enumeration value="BINARY"/>\r
-            <xs:enumeration value="LOGO"/>\r
-            <xs:enumeration value="CUSTOM_BUILD"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="FrameworkModuleTypes">\r
-        <xs:restriction base="ModuleTypeDef">\r
-            <xs:enumeration value="BASE"/>\r
-            <xs:enumeration value="SEC"/>\r
-            <xs:enumeration value="PEI_CORE"/>\r
-            <xs:enumeration value="PEIM"/>\r
-            <xs:enumeration value="DXE_CORE"/>\r
-            <xs:enumeration value="DXE_DRIVER"/>\r
-            <xs:enumeration value="DXE_RUNTIME_DRIVER"/>\r
-            <xs:enumeration value="DXE_SAL_DRIVER"/>\r
-            <xs:enumeration value="DXE_SMM_DRIVER"/>\r
-            <xs:enumeration value="UEFI_DRIVER"/>\r
-            <xs:enumeration value="UEFI_APPLICATION"/>\r
-            <xs:enumeration value="USER_DEFINED"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="FvRegionTypes">\r
-        <xs:restriction base="UCNameType">\r
-            <xs:enumeration value="FV_MAIN"/>\r
-            <xs:enumeration value="FV_MAIN_COMPACT"/>\r
-            <xs:enumeration value="NV_STORAGE"/>\r
-            <xs:enumeration value="FV_RECOVERY"/>\r
-            <xs:enumeration value="FV_RECOVERY_FLOPPY"/>\r
-            <xs:enumeration value="FV_FILE"/>\r
-            <xs:enumeration value="CAPSULE_CARGO"/>\r
-            <xs:enumeration value="NULL"/>\r
-            <xs:enumeration value="USER_DEFINED"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="GuidTypes">\r
-        <xs:restriction base="UCNameType">\r
-            <xs:enumeration value="DATA_HUB_RECORD"/>\r
-            <xs:enumeration value="EFI_EVENT"/>\r
-            <xs:enumeration value="EFI_SYSTEM_CONFIGURATION_TABLE"/>\r
-            <xs:enumeration value="EFI_VARIABLE"/>\r
-            <xs:enumeration value="HII_PACKAGE_LIST"/>\r
-            <xs:enumeration value="HOB"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="GuidListType">\r
-        <xs:list itemType="GuidTypes"/>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="GuidUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-            <xs:enumeration value="DEFAULT"/>\r
-            <xs:enumeration value="PRIVATE"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="HexByteArrayType">\r
-      <xs:list itemType="HexByteDataType"/>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="HexByteArrayListType">\r
-      <xs:restriction base="xs:normalizedString">\r
-        <xs:pattern value="((( )?0x[a-fA-F0-9]{2})(,)?)+( )?"/>\r
-      </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="HexWordArrayType">\r
-      <xs:restriction base="xs:normalizedString">\r
-         <xs:pattern value="((( )?0x[a-fA-F0-9]{4})(,)?)+( )?"/>\r
-      </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="HiiPackageUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-            <xs:enumeration value="PRIVATE"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="HobTypes">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="PHIT"/>\r
-            <xs:enumeration value="MEMORY_ALLOCATION"/>\r
-            <xs:enumeration value="RESOURCE_DESCRIPTOR"/>\r
-            <xs:enumeration value="GUID_EXTENSION"/>\r
-            <xs:enumeration value="FIRMWARE_VOLUME"/>\r
-            <xs:enumeration value="CPU"/>\r
-            <xs:enumeration value="POOL"/>\r
-            <xs:enumeration value="CAPSULE_VOLUME"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="HobUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-            <xs:enumeration value="PRIVATE"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="IntList">\r
-        <xs:list itemType="xs:positiveInteger"/>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="LibraryUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-            <xs:enumeration value="DEFAULT"/>\r
-            <xs:enumeration value="PRIVATE"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="ModuleTypeDef">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="BASE"/>\r
-            <xs:enumeration value="SEC"/>\r
-            <xs:enumeration value="PEI_CORE"/>\r
-            <xs:enumeration value="PEIM"/>\r
-            <xs:enumeration value="DXE_CORE"/>\r
-            <xs:enumeration value="DXE_DRIVER"/>\r
-            <xs:enumeration value="DXE_RUNTIME_DRIVER"/>\r
-            <xs:enumeration value="DXE_SAL_DRIVER"/>\r
-            <xs:enumeration value="DXE_SMM_DRIVER"/>\r
-            <xs:enumeration value="TOOLS"/>\r
-            <xs:enumeration value="UEFI_DRIVER"/>\r
-            <xs:enumeration value="UEFI_APPLICATION"/>\r
-            <xs:enumeration value="USER_DEFINED"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="ModuleTypeList">\r
-        <xs:list itemType="FrameworkModuleTypes"/>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="Module_Unified">\r
-        <xs:restriction base="UCNameType">\r
-            <xs:enumeration value="MODULE"/>\r
-            <xs:enumeration value="UNIFIED"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="PackageType">\r
-        <xs:restriction base="UCNameType">\r
-            <xs:enumeration value="SOURCE"/>\r
-            <xs:enumeration value="BINARY"/>\r
-            <xs:enumeration value="MIXED"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="PackageUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="DEFAULT"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="PcdListType">\r
-        <xs:list itemType="PcdItemTypes"/>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="PcdTypes">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="FIXED_AT_BUILD"/>\r
-            <xs:enumeration value="FEATURE_FLAG"/>\r
-            <xs:enumeration value="PATCHABLE_IN_MODULE"/>\r
-            <xs:enumeration value="DYNAMIC"/>\r
-            <xs:enumeration value="DYNAMIC_EX"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="PcdDriverTypes">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="PEI_PCD_DRIVER"/>\r
-            <xs:enumeration value="DXE_PCD_DRIVER"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="PcdDataTypes">\r
-        <xs:restriction base="xs:normalizedString">\r
-            <xs:enumeration value="UINT8"/>\r
-            <xs:enumeration value="UINT16"/>\r
-            <xs:enumeration value="UINT32"/>\r
-            <xs:enumeration value="UINT64"/>\r
-            <xs:enumeration value="VOID*"/>\r
-            <xs:enumeration value="BOOLEAN"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="PcdFeatureFlagUsage">\r
-        <xs:restriction base="UsageTypes">\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="DEFAULT"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="PcdItemTypes">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="FEATURE_FLAG"/>\r
-            <xs:enumeration value="FIXED_AT_BUILD"/>\r
-            <xs:enumeration value="PATCHABLE_IN_MODULE"/>\r
-            <xs:enumeration value="DYNAMIC"/>\r
-            <xs:enumeration value="DYNAMIC_EX"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="PcdUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-            <xs:enumeration value="DEFAULT"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="PpiNotifyUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="PpiUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-            <xs:enumeration value="PRIVATE"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="ProtocolNotifyUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="ProtocolUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-            <xs:enumeration value="TO_START"/>\r
-            <xs:enumeration value="BY_START"/>\r
-            <xs:enumeration value="PRIVATE"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="SkuListType">\r
-        <xs:list itemType="HexByteDataType"/>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="SupportedArchitectures">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALL"/>\r
-            <xs:enumeration value="EBC"/>\r
-            <xs:enumeration value="ARM"/>\r
-            <xs:enumeration value="IA32"/>\r
-            <xs:enumeration value="X64"/>\r
-            <xs:enumeration value="IPF"/>\r
-            <xs:enumeration value="PPC"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="SystemTableUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-            <xs:enumeration value="PRIVATE"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="Token">\r
-        <xs:union memberTypes="GuidArrayType GuidNamingConvention HexDoubleWordDataType"/>\r
-    </xs:simpleType>\r
-    <!-- TokenDataType is xs:nonNegativeInteger in final -->\r
-    <xs:simpleType name="TokenDataType">\r
-        <xs:union memberTypes="HexDoubleWordDataType  xs:nonNegativeInteger"/>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="ToolChains">\r
-        <xs:restriction base="UCNameType">\r
-            <xs:enumeration value="MSFT"/>\r
-            <xs:enumeration value="INTEL"/>\r
-            <xs:enumeration value="GCC"/>\r
-            <xs:enumeration value="CYGWIN"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="ToothPick">\r
-        <xs:restriction base="xs:normalizedString">\r
-            <xs:enumeration value="UNIX"/>\r
-            <xs:enumeration value="WINDOWS"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="UiNameType">\r
-        <xs:restriction base="xs:string">\r
-            <xs:pattern value="(([a-zA-Z][a-zA-Z0-9]*)(_)*(.)*)+"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="UnicodeString">\r
-        <xs:restriction base="xs:normalizedString">\r
-            <xs:pattern value="L(:)?(&quot;)(\w+)*((\W*)*(\s*)*(\w*)*)*(&quot;)"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="VariableNameDataType">\r
-        <xs:list itemType="HexWordArrayType"/>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="UsageTypes">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-            <xs:enumeration value="TO_START"/>\r
-            <xs:enumeration value="BY_START"/>\r
-            <xs:enumeration value="PRIVATE"/>\r
-            <xs:enumeration value="DEFAULT"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="VariableOffsetValues">\r
-        <xs:restriction base="xs:string">\r
-            <xs:pattern value="\d+(:)?\d*"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="VariableUsage">\r
-        <xs:restriction base="NameConvention">\r
-            <xs:enumeration value="ALWAYS_CONSUMED"/>\r
-            <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
-            <xs:enumeration value="ALWAYS_PRODUCED"/>\r
-            <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
-            <xs:enumeration value="PRIVATE"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <!-- Complex Data Types -->\r
-    <xs:complexType name="ArgsType">\r
-        <xs:sequence minOccurs="0" maxOccurs="unbounded">\r
-            <xs:element name="Arg" type="xs:string"/>\r
-        </xs:sequence>\r
-    </xs:complexType>\r
-    <xs:complexType name="ToolType">\r
-        <xs:sequence>\r
-            <xs:element name="ToolName" type="xs:string"/>\r
-            <xs:element name="ToolArgs" type="xs:string"/>\r
-        </xs:sequence>\r
-    </xs:complexType>\r
-    <xs:simpleType name="FfsNameType">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en"> This defines what an FFS Name can consist of.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:restriction base="xs:string">\r
-            <xs:pattern value="[a-zA-Z][_\-a-zA-Z0-9]*(.)?[a-zA-Z0-9]*"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>\r
-    <xs:simpleType name="FeatureFlagExpressionType">\r
-        <xs:restriction base="xs:normalizedString">\r
-            <xs:pattern value="(\w*\W*)*"/>\r
-        </xs:restriction>\r
-    </xs:simpleType>    \r
+  <xs:annotation>\r
+    <xs:documentation xml:lang="en">This schema defines EFI and Framework Data Types. Only simpleType are specified in this file. </xs:documentation>\r
+  </xs:annotation>\r
+  <xs:include schemaLocation="NamingConvention.xsd"/>\r
+  <xs:simpleType name="PrimaryArchListType">\r
+    <xs:list itemType="SupportedArchitectures"/>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="ArchListType">\r
+    <xs:restriction base="PrimaryArchListType">\r
+      <xs:minLength value="1"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="BlockNameType">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:pattern value="BLOCK[A-F0-9]{2}"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="BootModeNames">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="FULL"/>\r
+      <xs:enumeration value="MINIMAL"/>\r
+      <xs:enumeration value="NO_CHANGE"/>\r
+      <xs:enumeration value="DIAGNOSTICS"/>\r
+      <xs:enumeration value="DEFAULT"/>\r
+      <xs:enumeration value="S2_RESUME"/>\r
+      <xs:enumeration value="S3_RESUME"/>\r
+      <xs:enumeration value="S4_RESUME"/>\r
+      <xs:enumeration value="S5_RESUME"/>\r
+      <xs:enumeration value="FLASH_UPDATE"/>\r
+      <xs:enumeration value="RECOVERY_FULL"/>\r
+      <xs:enumeration value="RECOVERY_MINIMAL"/>\r
+      <xs:enumeration value="RECOVERY_NO_CHANGE"/>\r
+      <xs:enumeration value="RECOVERY_DIAGNOSTICS"/>\r
+      <xs:enumeration value="RECOVERY_DEFAULT"/>\r
+      <xs:enumeration value="RECOVERY_S2_RESUME"/>\r
+      <xs:enumeration value="RECOVERY_S3_RESUME"/>\r
+      <xs:enumeration value="RECOVERY_S4_RESUME"/>\r
+      <xs:enumeration value="RECOVERY_S5_RESUME"/>\r
+      <xs:enumeration value="RECOVERY_FLASH_UPDATE"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="BootModeUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="BuildTargetList">\r
+    <xs:restriction base="BuildTargetUList">\r
+      <xs:minLength value="1"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="BuildTargetUList">\r
+    <xs:list itemType="BrUType"/>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="BrUType">\r
+    <xs:union memberTypes="BrType UCNameType"/>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="BrType">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="DEBUG"/>\r
+      <xs:enumeration value="RELEASE"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="ComponentExecutionPhase">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="MDE"/>\r
+      <xs:enumeration value="SEC"/>\r
+      <xs:enumeration value="PEI_CORE"/>\r
+      <xs:enumeration value="PEIM"/>\r
+      <xs:enumeration value="DXE_CORE"/>\r
+      <xs:enumeration value="DXE_DRIVER"/>\r
+      <xs:enumeration value="DXE_RUNTIME_DRIVER"/>\r
+      <xs:enumeration value="DXE_SAL_DRIVER"/>\r
+      <xs:enumeration value="DXE_SMM_DRIVER"/>\r
+      <xs:enumeration value="UEFI"/>\r
+      <xs:enumeration value="UEFI_APPLICATION"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="DataHubUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
+      <xs:enumeration value="PRIVATE"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="DatumSizeLimitation">\r
+    <xs:restriction base="xs:nonNegativeInteger">\r
+      <xs:minExclusive value="0"/>\r
+      <xs:maxExclusive value="13777216"/>\r
+      <xs:pattern value="(\s)*[1-9][0-9]*(\s)*"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="DefaultValueType">\r
+    <xs:union memberTypes="xs:normalizedString Hex64BitDataType UnicodeString HexByteArrayType"/>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="EfiSectionType">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="EFI_SECTION_FREEFORM_SUBTYPE_GUID"/>\r
+      <xs:enumeration value="EFI_SECTION_VERSION"/>\r
+      <xs:enumeration value="EFI_SECTION_USER_INTERFACE"/>\r
+      <xs:enumeration value="EFI_SECTION_DXE_DEPEX"/>\r
+      <xs:enumeration value="EFI_SECTION_PEI_DEPEX"/>\r
+      <xs:enumeration value="EFI_SECTION_PE32"/>\r
+      <xs:enumeration value="EFI_SECTION_PIC"/>\r
+      <xs:enumeration value="EFI_SECTION_TE"/>\r
+      <xs:enumeration value="EFI_SECTION_RAW"/>\r
+      <xs:enumeration value="EFI_SECTION_COMPRESSION"/>\r
+      <xs:enumeration value="EFI_SECTION_GUID_DEFINED"/>\r
+      <xs:enumeration value="EFI_SECTION_COMPATIBILITY16"/>\r
+      <xs:enumeration value="EFI_SECTION_FIRMWARE_VOLUME_IMAGE"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="EventTypes">\r
+    <xs:restriction base="UCNameType">\r
+       <xs:enumeration value="EVENT_GROUP_GUID"/>\r
+      <xs:enumeration value="EVENT_TYPE_PERIODIC_TIMER"/>\r
+      <xs:enumeration value="EVENT_TYPE_RELATIVE_TIMER"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="EventUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
+      <xs:enumeration value="PRIVATE"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="ExecutionType">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="REL" id="Relocatable"/>\r
+      <xs:enumeration value="NREL" id="Non-Relocatable"/>\r
+      <xs:enumeration value="XIP" id="Execute_In_Place"/>\r
+      <xs:enumeration value="PIC" id="Position_Independent_Code"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="ExternType">\r
+    <xs:restriction base="xs:normalizedString">\r
+      <xs:minLength value="1"/>\r
+      <!--<xs:pattern value="((\w)+(\W)*(\s)*)+"/>-->\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="ExternUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="FileNameUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
+      <xs:enumeration value="PRIVATE"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="FeatureFlagExpressionType">\r
+    <xs:restriction base="xs:normalizedString">\r
+      <xs:minLength value="1"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="FrameworkComponentListType">\r
+    <xs:list itemType="FrameworkComponentTypes"/>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="FrameworkComponentTypes">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="APRIORI"/>\r
+      <xs:enumeration value="SEC"/>\r
+      <xs:enumeration value="LIBRARY"/>\r
+      <xs:enumeration value="FV_IMAGE_FILE"/>\r
+      <xs:enumeration value="BS_DRIVER"/>\r
+      <xs:enumeration value="RT_DRIVER"/>\r
+      <xs:enumeration value="SAL_RT_DRIVER"/>\r
+      <xs:enumeration value="PE32_PEIM"/>\r
+      <xs:enumeration value="PIC_PEIM"/>\r
+      <xs:enumeration value="COMBINED_PEIM_DRIVER"/>\r
+      <xs:enumeration value="PEI_CORE"/>\r
+      <xs:enumeration value="DXE_CORE"/>\r
+      <xs:enumeration value="BS_DRIVER_EFI"/>\r
+      <xs:enumeration value="SHELLAPP"/>\r
+      <xs:enumeration value="BINARY"/>\r
+      <xs:enumeration value="LOGO"/>\r
+      <xs:enumeration value="USER_DEFINED"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="FrameworkModuleTypes">\r
+    <xs:restriction base="ModuleTypeDef">\r
+      <xs:enumeration value="BASE"/>\r
+      <xs:enumeration value="SEC"/>\r
+      <xs:enumeration value="PEI_CORE"/>\r
+      <xs:enumeration value="PEIM"/>\r
+      <xs:enumeration value="DXE_CORE"/>\r
+      <xs:enumeration value="DXE_DRIVER"/>\r
+      <xs:enumeration value="DXE_RUNTIME_DRIVER"/>\r
+      <xs:enumeration value="DXE_SAL_DRIVER"/>\r
+      <xs:enumeration value="DXE_SMM_DRIVER"/>\r
+      <xs:enumeration value="UEFI_DRIVER"/>\r
+      <xs:enumeration value="UEFI_APPLICATION"/>\r
+      <xs:enumeration value="USER_DEFINED"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="FvRegionTypes">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="FV_MAIN"/>\r
+      <xs:enumeration value="FV_MAIN_COMPACT"/>\r
+      <xs:enumeration value="NV_STORAGE"/>\r
+      <xs:enumeration value="FV_RECOVERY"/>\r
+      <xs:enumeration value="FV_RECOVERY_FLOPPY"/>\r
+      <xs:enumeration value="FV_FILE"/>\r
+      <xs:enumeration value="CAPSULE_CARGO"/>\r
+      <xs:enumeration value="NULL"/>\r
+      <xs:enumeration value="USER_DEFINED"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PrimaryGuidListType">\r
+    <xs:list itemType="GuidTypes"/>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="GuidListType">\r
+    <xs:restriction base="PrimaryGuidListType">\r
+      <xs:minLength value="1"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="GuidTypes">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="DATA_HUB_RECORD"/>\r
+      <xs:enumeration value="EFI_EVENT"/>\r
+      <xs:enumeration value="EFI_SYSTEM_CONFIGURATION_TABLE"/>\r
+      <xs:enumeration value="EFI_VARIABLE"/>\r
+      <xs:enumeration value="GUID"/>\r
+      <xs:enumeration value="HII_PACKAGE_LIST"/>\r
+      <xs:enumeration value="HOB"/>\r
+      <xs:enumeration value="TOKEN_SPACE_GUID"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="GuidUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
+      <xs:enumeration value="DEFAULT"/>\r
+      <xs:enumeration value="PRIVATE"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="HexByteArrayListType">\r
+    <xs:restriction base="xs:normalizedString">\r
+      <xs:minLength value="4"/>\r
+      <xs:pattern value="((( )?0x[a-fA-F0-9]{2})(,)?)+( )?"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="HexByteArrayType">\r
+    <xs:restriction base="xs:normalizedString">\r
+      <xs:minLength value="4"/>\r
+      <xs:pattern value="((\s)*0x([a-fA-F0-9]){2}(,)?(\s)*)+"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="HexWordArrayType">\r
+    <xs:restriction base="xs:normalizedString">\r
+      <xs:minLength value="6"/>\r
+      <xs:pattern value="((\s)*0x([a-fA-F0-9]){4}(,)?(\s)*)+"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="HiiPackageUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
+      <xs:enumeration value="PRIVATE"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="HobTypes">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="PHIT"/>\r
+      <xs:enumeration value="MEMORY_ALLOCATION"/>\r
+      <xs:enumeration value="RESOURCE_DESCRIPTOR"/>\r
+      <xs:enumeration value="GUID_EXTENSION"/>\r
+      <xs:enumeration value="FIRMWARE_VOLUME"/>\r
+      <xs:enumeration value="CPU"/>\r
+      <xs:enumeration value="POOL"/>\r
+      <xs:enumeration value="CAPSULE_VOLUME"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="HobUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
+      <xs:enumeration value="PRIVATE"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="IntermediateOutputType">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="MODULE"/>\r
+      <xs:enumeration value="UNIFIED"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="LibraryUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
+      <xs:enumeration value="DEFAULT"/>\r
+      <xs:enumeration value="PRIVATE"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="ModuleTypeDef">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="BASE"/>\r
+      <xs:enumeration value="SEC"/>\r
+      <xs:enumeration value="PEI_CORE"/>\r
+      <xs:enumeration value="PEIM"/>\r
+      <xs:enumeration value="DXE_CORE"/>\r
+      <xs:enumeration value="DXE_DRIVER"/>\r
+      <xs:enumeration value="DXE_RUNTIME_DRIVER"/>\r
+      <xs:enumeration value="DXE_SAL_DRIVER"/>\r
+      <xs:enumeration value="DXE_SMM_DRIVER"/>\r
+      <xs:enumeration value="TOOL"/>\r
+      <xs:enumeration value="UEFI_DRIVER"/>\r
+      <xs:enumeration value="UEFI_APPLICATION"/>\r
+      <xs:enumeration value="USER_DEFINED"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="Md5sumType">\r
+    <xs:restriction base="xs:normalizedString">\r
+      <xs:pattern value="[a-fA-F0-9]{32}"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PrimaryModuleListType">\r
+    <xs:list itemType="FrameworkModuleTypes"/>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="ModuleListType">\r
+    <xs:restriction base="PrimaryModuleListType">\r
+      <xs:minLength value="1"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PackageType">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="SOURCE"/>\r
+      <xs:enumeration value="BINARY"/>\r
+      <xs:enumeration value="MIXED"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PackageUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+      <xs:enumeration value="DEFAULT"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PcdListType">\r
+    <xs:restriction base="PrimaryPcdListType">\r
+      <xs:minLength value="1"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PrimaryPcdListType">\r
+    <xs:list itemType="PcdItemTypes"/>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PcdTypes">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="FIXED_AT_BUILD"/>\r
+      <xs:enumeration value="FEATURE_FLAG"/>\r
+      <xs:enumeration value="PATCHABLE_IN_MODULE"/>\r
+      <xs:enumeration value="DYNAMIC"/>\r
+      <xs:enumeration value="DYNAMIC_EX"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PcdDriverTypes">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="PEI_PCD_DRIVER"/>\r
+      <xs:enumeration value="DXE_PCD_DRIVER"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PcdDataTypes">\r
+    <xs:restriction base="xs:normalizedString">\r
+      <xs:enumeration value="UINT8"/>\r
+      <xs:enumeration value="UINT16"/>\r
+      <xs:enumeration value="UINT32"/>\r
+      <xs:enumeration value="UINT64"/>\r
+      <xs:enumeration value="VOID*"/>\r
+      <xs:enumeration value="BOOLEAN"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PcdFeatureFlagUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <xs:enumeration value="DEFAULT"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PcdItemTypes">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="FEATURE_FLAG"/>\r
+      <xs:enumeration value="FIXED_AT_BUILD"/>\r
+      <xs:enumeration value="PATCHABLE_IN_MODULE"/>\r
+      <xs:enumeration value="DYNAMIC"/>\r
+      <xs:enumeration value="DYNAMIC_EX"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PcdUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
+      <xs:enumeration value="DEFAULT"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PpiNotifyUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PpiUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
+      <xs:enumeration value="PRIVATE"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="ProtocolNotifyUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="ProtocolUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
+      <xs:enumeration value="TO_START"/>\r
+      <xs:enumeration value="BY_START"/>\r
+      <xs:enumeration value="PRIVATE"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="SkuListType">\r
+    <xs:restriction base="xs:normalizedString">\r
+      <xs:minLength value="1"/>\r
+      <xs:pattern value="(\d)+((,)?(\s)*(\d)+)*"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="SupportedArchitectures">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="EBC"/>\r
+      <xs:enumeration value="IA32"/>\r
+      <xs:enumeration value="X64"/>\r
+      <xs:enumeration value="IPF"/>\r
+      <xs:enumeration value="ARM"/>\r
+      <xs:enumeration value="PPC"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="SystemTableUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
+      <xs:enumeration value="PRIVATE"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="TokenDataType">\r
+    <xs:union memberTypes="HexDoubleWordDataType  xs:nonNegativeInteger"/>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="ToolChains">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:minLength value="2"/>\r
+      <xs:enumeration value="MSFT"/>\r
+      <xs:enumeration value="INTEL"/>\r
+      <xs:enumeration value="GCC"/>\r
+      <xs:enumeration value="CYGWIN"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="UiNameType">\r
+    <xs:restriction base="xs:string">\r
+      <xs:minLength value="1"/>\r
+      <xs:pattern value="[^ ].*"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="UnicodeString">\r
+    <xs:restriction base="xs:normalizedString">\r
+      <xs:minLength value="3"/>\r
+      <xs:pattern value="(\s)*L(\:)?&quot;[^&quot;]*&quot;(\s)*"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="UsageListType">\r
+    <xs:restriction base="PrimaryUsageList">\r
+      <xs:minLength value="1"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="PrimaryUsageList">\r
+    <xs:list itemType="UsageTypes"/>\r
+  </xs:simpleType>\r
+  <!-- UsageTypes describes all of the Usage Attributes that are defined in the Module Surface Area Specification -->\r
+  <xs:simpleType name="UsageTypes">\r
+    <xs:restriction base="UCNameType">\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
+      <xs:enumeration value="TO_START"/>\r
+      <xs:enumeration value="BY_START"/>\r
+      <xs:enumeration value="PRIVATE"/>\r
+      <xs:enumeration value="DEFAULT"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="VariableOffsetValues">\r
+    <xs:restriction base="xs:string">\r
+      <xs:minLength value="1"/>\r
+      <xs:pattern value="\d+(:)?\d*"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <xs:simpleType name="VariableUsage">\r
+    <xs:restriction base="UsageTypes">\r
+      <!-- Module requires the variable entry to be set -->\r
+      <xs:enumeration value="ALWAYS_CONSUMED"/>\r
+      <!-- Module will use the variable entry if it's set -->\r
+      <xs:enumeration value="SOMETIMES_CONSUMED"/>\r
+      <!-- Module Always will write the variable -->\r
+      <xs:enumeration value="ALWAYS_PRODUCED"/>\r
+      <!-- Module sometimes writes the variable -->\r
+      <xs:enumeration value="SOMETIMES_PRODUCED"/>\r
+      <!-- Variable is produced and consumed only by this module -->\r
+      <xs:enumeration value="PRIVATE"/>\r
+    </xs:restriction>\r
+  </xs:simpleType>\r
+  <!-- Complex Data Types -->\r
+  <xs:complexType name="DbPathAndFilename">\r
+    <xs:simpleContent>\r
+      <xs:extension base="PathAndFilename">\r
+        <xs:attribute name="FarGuid" type="GuidType" use="optional"/>\r
+        <xs:attribute name="Md5sum" type="Md5sumType"/>\r
+      </xs:extension>\r
+    </xs:simpleContent>\r
+  </xs:complexType>\r
+  <xs:complexType name="ArgsType">\r
+    <xs:sequence minOccurs="0" maxOccurs="unbounded">\r
+      <xs:element name="Arg" type="xs:string"/>\r
+    </xs:sequence>\r
+  </xs:complexType>\r
+  <xs:complexType name="ToolType">\r
+    <xs:sequence>\r
+      <xs:element name="ToolName" type="xs:string"/>\r
+      <xs:element name="ToolArgs" type="xs:string"/>\r
+    </xs:sequence>\r
+  </xs:complexType>\r
 </xs:schema>\r
index a0104f5c6ef9572f84499cfe0981af4a70347f70..c14254cd93529879fdd1febba2c981f4ab67c406 100644 (file)
@@ -1,9 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.TianoCore.org/2006/Edk2.0" xmlns="http://www.TianoCore.org/2006/Edk2.0">\r
-    <!--\r
+  <!--\r
     Filename: FrameworkHeaders.xsd\r
     \r
     Copyright (c) 2006, Intel Corp.\r
+\r
     All rights reserved. This program and the accompanying materials\r
     are licensed and made available under the terms and conditions of the BSD License\r
     which may be found at http://opensource.org/licenses/bsd-license.php\r
     THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
     WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
     \r
+    APPROVED: 14-Jun-2006\r
   -->\r
-    <xs:include schemaLocation="FrameworkDataElements.xsd"/>\r
-    <xs:element name="FdbHeader">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is the header for the Framework Package Database file.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="DatabaseName"/>\r
-                <!-- Value fixed during initialization: FrameworkDatabase -->\r
-                <xs:choice minOccurs="1" maxOccurs="1">\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                    <!-- Guid needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                    <!-- GuidValue needs to be required -->\r
-                </xs:choice>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
-                <!-- Version is the version of this file -->\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Path"/>\r
-                <!-- Path needs to be removed -->\r
-                <xs:choice minOccurs="1" maxOccurs="1">\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Created"/>\r
-                    <!-- Created needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="CreatedDate"/>\r
-                    <!-- CreatedDate needs to be required -->\r
-                </xs:choice>\r
-                <xs:choice minOccurs="0">\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Updated"/>\r
-                    <!-- Updated needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="UpdatedDate"/>\r
-                </xs:choice>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Abstract"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Description"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Copyright"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="License"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="Specification" type="xs:string"/>\r
-                <!-- Specificatoin needs to be required - FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00090000 -->\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="MbdHeader">\r
-        <!-- MbdHeader needs to be removed -->\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">DO NOT USE! This is the header for the Component Module Build Description (MBD) file. NOTE: The GUID may be different from the GUID in the MSA file, as the Guid is updated every time the file is changed, as the Guid may change if the contents of the file are changed.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="BaseName"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Guid"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Description"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Copyright"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="License"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="Specification" type="xs:string"/>\r
-                <xs:choice minOccurs="1" maxOccurs="1">\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Created"/>\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="CreatedDate"/>\r
-                </xs:choice>\r
-                <xs:choice minOccurs="1" maxOccurs="1">\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Modified"/>\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="ModifiedDate"/>\r
-                </xs:choice>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="MbdLibHeader">\r
-        <!-- MbdLibHeader needs to be removed -->\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">DO NOT USE! This is the header for the Library Module Build Description (MBD) file. NOTE: The Guid may be different from the Guid in the MSA file, as the Guid may change when the contents of the file are changed..</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="BaseName"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Guid"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Description"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Copyright"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="License"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="Specification" type="xs:string"/>\r
-                <xs:choice minOccurs="1" maxOccurs="1">\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Created"/>\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="CreatedDate"/>\r
-                </xs:choice>\r
-                <xs:choice minOccurs="1" maxOccurs="1">\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Modified"/>\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="ModifiedDate"/>\r
-                </xs:choice>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="MsaHeader">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is the Component Module Surface Area Description Header - a replacement for INF files. The GUID may change when the contents of the file are changed.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:choice>\r
-                    <!-- BaseName needs to be removed  -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="BaseName"/>\r
-                    <!-- ModuleName needs to be required -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" name="ModuleName" type="UiNameType"/>\r
-                </xs:choice>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="ModuleType"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="ComponentType"/>\r
-                <xs:choice>\r
-                    <!-- Guid needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                    <!-- GuidValue needs to be required -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                </xs:choice>\r
-                <!-- Version needs to be a decimal in final -->\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Abstract"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Description"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Copyright"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="License"/>\r
-                <xs:choice minOccurs="1" maxOccurs="1">\r
-                    <!-- Created needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Created"/>\r
-                    <!-- CreatedDate needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="CreatedDate"/>\r
-                </xs:choice>\r
-                <xs:choice>\r
-                    <!-- Updated needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Updated"/>\r
-                    <!-- ModifiedDate needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="ModifiedDate"/>\r
-                </xs:choice>\r
-                <xs:element default="false" minOccurs="0" name="BinaryModule" type="xs:boolean"/>\r
-                <!-- Specification needs to be required - FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00000052 -->\r
-                <xs:element minOccurs="0" maxOccurs="1" name="Specification" type="xs:string"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="MsaLibHeader">\r
-        <!-- MsaLibHeader needs to be removed -->\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">DO NOT USE! This is the Library Module Surface Area Description Header - a replacement for INF files. The Guid may change when the contents of the file are changed.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="BaseName"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="ModuleType"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="ComponentType"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Guid"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Abstract"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Description"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Copyright"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="License"/>\r
-                <xs:choice minOccurs="1" maxOccurs="1">\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Created"/>\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="CreatedDate"/>\r
-                </xs:choice>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Updated"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="Specification" type="xs:string"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PlatformHeader">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This head is for the Framework Platform Description file (FPD.)</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="PlatformName" type="PlatformNamingConvention"/>\r
-                <xs:choice>\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                    <!-- DO NOT USE Guid needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                    <!-- GuidValue needs to be required -->\r
-                </xs:choice>\r
-                <!-- Version needs to be xs:decimal in final -->\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Version"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Abstract"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Description"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Copyright"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="License"/>\r
-                <xs:choice minOccurs="1" maxOccurs="1">\r
-                    <!-- DO NOT USE Created needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Created"/>\r
-                    <!-- DO NOT USE CreatedDate needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="CreatedDate"/>\r
-                </xs:choice>\r
-                <!-- DO NOT USE CreatedBy needs to be removed -->\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="CreatedBy"/>\r
-                <xs:choice>\r
-                    <!-- DO NOT USE Updated needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Updated"/>\r
-                    <!-- DO NOT USE ModifiedDate needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="ModifiedDate"/>\r
-                </xs:choice>\r
-                <!-- DO NOT USE PackageType needs to be removed -->\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="PackageType"/>\r
-                <!-- DO NOT USE BuildTarget needs to be removed -->\r
-                <xs:element minOccurs="0" maxOccurs="1" name="BuildTarget" type="BuildTargets"/>\r
-                <!-- Specification needs to be required - FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00000052 -->\r
-                <xs:element minOccurs="0" maxOccurs="1" name="Specification" type="xs:string"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="SpdHeader">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This head is for the Surface Area Package Description file (SPD)</xs:documentation>\r
-            <xs:documentation xml:lang="en">The Guid MUST change when the contents of the file undergo MAJOR FUNCTIONALITY changes.</xs:documentation>\r
-            <xs:documentation xml:lang="en">The Version MUST change when the contents of the file undergo MINOR FUNCTIONALITY changes.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="PackageName" type="UiNameType"/>\r
-                <xs:choice minOccurs="1" maxOccurs="1">\r
-                    <!-- DO NOT USE! Guid needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                    <!-- GuidValue needs to be required -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                </xs:choice>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Abstract"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Description"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Copyright"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="License"/>\r
-                <xs:choice minOccurs="1" maxOccurs="1">\r
-                    <!-- Created needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Created"/>\r
-                    <!-- CreatedDate needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="CreatedDate"/>\r
-                </xs:choice>\r
-                <!-- E_Mail needs to be removed -->\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="E-Mail"/>\r
-                <xs:choice minOccurs="0" maxOccurs="1">\r
-                    <!-- Updated needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Updated"/>\r
-                    <!-- UpdatedDate needs to be removed -->\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="ModifiedDate"/>\r
-                </xs:choice>\r
-                <!-- URL needs to be removed -->\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="URL"/>\r
-                <!-- PackageType needs to be removed -->\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="PackageType"/>\r
-                <!-- ReadOnly and RePackage remain in final -->\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="ReadOnly"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="RePackage"/>\r
-                <!-- Specification needs to be required - FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00000052 -->\r
-                <xs:element minOccurs="0" maxOccurs="1" name="Specification" type="xs:string"/>\r
-                <!-- OutputDirectory needs to be removed -->\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="OutputDirectory"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
+  <xs:include schemaLocation="FrameworkDataElements.xsd"/>\r
+  <xs:element name="FdbHeader">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is the header for the Framework Package Database (DB) file.</xs:documentation>\r
+      <xs:documentation xml:lang="en">The Guid MUST change if backward compatibility breaks caused by a new release of XML Schema.</xs:documentation>\r
+      <xs:documentation xml:lang="en">The Version will change if a minor change to XML Schema has been made, but backward compatiblity is maintained.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="DatabaseName" type="UiNameType" fixed="FrameworkDatabase"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="GuidValue" type="GuidType"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Abstract"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Description"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Copyright"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="License"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="Specification" type="Sentence" fixed="FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00000052"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="FarHeader">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is the header for the Framework Archive Manifest file.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="FarName" type="UiNameType"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="GuidValue" type="GuidType"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Abstract"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Description"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Copyright"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="License"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="Specification" type="Sentence" fixed="FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00000052"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="MsaHeader">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This header is for the Module Surface Area Description (MSA) files</xs:documentation>\r
+      <xs:documentation xml:lang="en">The Guid MUST change if the Module changes break backward compatibility.</xs:documentation>\r
+      <xs:documentation xml:lang="en">The Version MUST change if the Module changes, however, backward compatiblity is maintained.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="ModuleName" type="UiNameType"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="ModuleType"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="GuidValue" type="GuidType"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Abstract"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Description"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Copyright"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="License"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="Specification" type="Sentence" fixed="FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00000052"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="PlatformHeader">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This header is for the Framework Platform Description (FPD) files.</xs:documentation>\r
+      <xs:documentation xml:lang="en">The Guid MUST change if the FPD changes break backward compatibility.</xs:documentation>\r
+      <xs:documentation xml:lang="en">The Version MUST change if the FPD changes, however, backward compatiblity is maintained.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="PlatformName" type="UiNameType"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="GuidValue" type="GuidType"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Abstract"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Description"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Copyright"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="License"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="Specification" type="Sentence" fixed="FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00000052"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="SpdHeader">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This head is for the Surface Area Package Description file (SPD)</xs:documentation>\r
+      <xs:documentation xml:lang="en">The Guid MUST change when the contents of the file undergo MAJOR FUNCTIONALITY changes.</xs:documentation>\r
+      <xs:documentation xml:lang="en">The Version MUST change when the contents of the file undergo MINOR FUNCTIONALITY changes.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="PackageName" type="UiNameType"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="GuidValue" type="GuidType"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Abstract"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Description"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="Copyright"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="License"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="Specification" type="Sentence" fixed="FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00000052"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
 </xs:schema>\r
index 234535901fcb66cab4d884cb607bfbbe742d21bc..85ed426f95ed6d4a3db782f82f965daa0dab33ff 100644 (file)
-<?xml version="1.0" encoding="UTF-8"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns="http://www.TianoCore.org/2006/Edk2.0" targetNamespace="http://www.TianoCore.org/2006/Edk2.0">
-    <!--
-    Filename: FrameworkPlatformDataElements.xsd
-    
-    Copyright (c) 2006, Intel Corp.
-    All rights reserved. This program and the accompanying materials
-    are licensed and made available under the terms and conditions of the BSD License
-    which may be found at http://opensource.org/licenses/bsd-license.php
-    
-    THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-    WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-    
-  -->
-    <xs:annotation>
-        <xs:documentation xml:lang="en"> This schema defines EFI and Framework Platform Data Elements that are specific to platform creation.</xs:documentation>
-    </xs:annotation>
-    <xs:include schemaLocation="NamingConvention.xsd"/>
-    <xs:include schemaLocation="FrameworkDataAttributes.xsd"/>
-    <xs:include schemaLocation="FrameworkDataTypes.xsd"/>
-    <xs:include schemaLocation="FrameworkDataElements.xsd"/>
-    <xs:include schemaLocation="FrameworkPlatformDataTypes.xsd"/>
-    <xs:element name="Capsule">
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element minOccurs="1" maxOccurs="1" name="CapsuleId" type="xs:string"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="CapsuleOptions"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="CapsuleAttributes"/>
-            </xs:sequence>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="CapsuleAttributes">
-        <xs:annotation>
-            <xs:documentation xml:lang="en">This element is used specify different name value pairs.</xs:documentation>
-        </xs:annotation>
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="NameValue"/>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Enable"/>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Disable"/>
-            </xs:sequence>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="CapsuleOptions">
-        <xs:annotation>
-            <xs:documentation xml:lang="en">This element is used specify different name value pairs.</xs:documentation>
-        </xs:annotation>
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="NameValue"/>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Enable"/>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Disable"/>
-            </xs:sequence>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="Capsules">
-        <xs:annotation>
-            <xs:documentation xml:lang="en">Permit multiple Capsule Sections</xs:documentation>
-        </xs:annotation>
-        <xs:complexType>
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">
-                <xs:element ref="Capsule"/>
-            </xs:sequence>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="Disable" type="xs:string"/>
-    <xs:element name="Enable" type="xs:string"/>
-    <xs:element name="Flash">
-        <xs:complexType>
-            <xs:annotation>
-                <xs:documentation xml:lang="en">We allow specifying the Flash layout in this directory, or we allow specifying a flashmap filename</xs:documentation>
-            </xs:annotation>
-            <xs:sequence>
-                <xs:choice>
-                    <xs:element name="FlashDefinition" type="FlashData"/>
-                    <xs:element name="FlashDefinitionFile" type="FileNameConvention"/>
-                </xs:choice>
-                <xs:element minOccurs="0" maxOccurs="1" ref="FvImages"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="Capsules"/>
-            </xs:sequence>
-            <xs:attribute name="MicrocodeFile" type="FileNameConvention" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="FlashDeviceImage">
-        <xs:annotation>
-            <xs:documentation xml:lang="en">Define contents of the regions in flash. The files and data are placed in the output image in the order they are encountered in this definition. Multiple FlashDeviceImage sections may be defined. Which one the tool should use is specified by Name on the command line.</xs:documentation>
-        </xs:annotation>
-        <xs:complexType>
-            <xs:all>
-                <xs:element minOccurs="0" maxOccurs="1" name="RawData">
-                    <xs:complexType>
-                        <xs:sequence minOccurs="0" maxOccurs="1">
-                            <xs:element name="Data" type="xs:string"/>
-                        </xs:sequence>
-                        <xs:attributeGroup ref="RawDataAttributes"/>
-                    </xs:complexType>
-                </xs:element>
-                <xs:element minOccurs="0" maxOccurs="1" name="File">
-                    <xs:complexType>
-                        <xs:attributeGroup ref="FlashDeviceImageFileAttributes"/>
-                    </xs:complexType>
-                </xs:element>
-            </xs:all>
-            <xs:attributeGroup ref="FlashDeviceImageAttributes"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="FlashDeviceInfo">
-        <xs:annotation>
-            <xs:documentation xml:lang="en">This is the Flash Devcie definition List</xs:documentation>
-        </xs:annotation>
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element name="Blocks">
-                    <xs:complexType>
-                        <xs:sequence>
-                            <xs:element minOccurs="1" maxOccurs="255" name="Block">
-                                <xs:complexType>
-                                    <xs:simpleContent>
-                                        <xs:extension base="BlockNameType">
-                                            <xs:attributeGroup ref="BlockAttributes"/>
-                                        </xs:extension>
-                                    </xs:simpleContent>
-                                </xs:complexType>
-                            </xs:element>
-                        </xs:sequence>
-                    </xs:complexType>
-                </xs:element>
-                <xs:element name="Regions">
-                    <xs:complexType>
-                        <xs:sequence>
-