<?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: FrameworkDataAttributes.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 Attribute. Only attributeGroups are specified in this file. </xs:documentation>
  </xs:annotation>
  <xs:include schemaLocation="NamingConvention.xsd"/>
  <xs:include schemaLocation="FrameworkDataTypes.xsd"/>
  <xs:include schemaLocation="FrameworkPlatformDataTypes.xsd"/>
  <!-- Fix Name data type from xs:string -->
  <xs:attributeGroup name="BlockAttributes">
    <xs:attribute name="Name" type="BlockNameType" use="required"/>
    <xs:attribute name="Size" type="HexAddressType" use="required"/>
    <xs:attribute name="Flags" type="HexAddressType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="BootModeAttributes">
    <xs:attribute name="BootModeName" type="BootModeNames" use="required"/>
    <xs:attribute name="Usage" type="BootModeUsage" use="required"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="DataHubAttributes">
    <xs:attribute name="Usage" type="DataHubUsage" use="required"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="EventAttributes">
    <xs:attribute name="Usage" type="EventUsage" use="required"/>
    <xs:attribute name="EventGuidCName" type="C_NameType" use="optional"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="ExternAttributes">
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="FfsAttributes">
    <xs:attribute name="FfsFormatKeyword" type="KeywordType" use="required"/>
    <xs:attribute name="FfsFileType" type="EfiFfsFileTypes" use="optional"/>
    <xs:attribute name="FfsAttribTailPresent" type="xs:boolean" use="optional"/>
    <xs:attribute name="FfsAttribRecovery" type="xs:boolean" use="optional" default="false"/>
    <xs:attribute name="FfsAttribDataAlignment" type="FfsDataAlignmentType" use="optional"/>
    <xs:attribute name="FfsAttribChecksumRequired" type="xs:boolean" use="optional" default="true"/>
    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="FilenameAttributes">
    <xs:attribute name="TagName" type="ToolsNameConvention" use="optional"/>
    <xs:attribute name="ToolCode" type="ToolsNameConvention" use="optional"/>
    <xs:attribute name="ToolChainFamily" type="ToolsNameConvention" use="optional"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="FlashDeviceImageAttributes">
    <xs:attribute name="Name" type="xs:string" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="FlashDeviceImageFileAttributes">
    <xs:attribute name="Name" type="xs:string" use="required"/>
    <xs:attribute name="Region" type="xs:string" use="required"/>
    <xs:attribute name="SubRegion" type="xs:string" use="optional"/>
    <xs:attribute name="Optional" type="xs:boolean" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="FlashDeviceInfoAttributes">
    <xs:attribute name="Name" type="xs:string" use="required"/>
    <xs:attribute name="Size" type="HexAddressType" use="required"/>
    <xs:attribute name="BaseAddress" type="HexAddressType" use="required"/>
    <xs:attribute name="ErasePolarity" type="Polarity" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="FvRegionNameAttributes">
    <xs:attribute name="FvBaseAddressPcdCName" type="C_NameType" use="required"/>
    <xs:attribute name="FvRegionSizePcdCName" type="C_NameType" use="required"/>
    <xs:attribute name="FvRegionAlignmentPcdCName" type="C_NameType" use="optional"/>
    <xs:attribute name="FvPcdTokenSpaceGuid" type="GuidType" use="optional"/>
    <xs:attribute name="Alignment" type="xs:positiveInteger" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="GuidAttributes">
    <xs:attribute name="Usage" type="GuidUsage" use="required"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="GuidDeclarationAttributes">
    <xs:attribute name="Name" type="UiNameType" use="required"/>
    <xs:attribute name="GuidTypeList" type="GuidListType" use="optional"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="HiiPackageAttributes">
    <xs:attribute name="Usage" type="HiiPackageUsage" use="required"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="HobAttributes">
    <xs:attribute name="Usage" type="HobUsage" use="required"/>
    <xs:attribute name="HobGuidCName" type="C_NameType" use="optional"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="IncludeHeaderAttributes">
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="IndustryStdHeaderAttributes">
    <xs:attribute name="Name" type="KeywordType" use="required"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="LibraryAttributes">
    <!-- LibraryAttributes is used for Libraries / Library elements in FPD files -->
    <xs:attribute name="ModuleGuid" type="GuidType" use="required"/>
    <xs:attribute name="ModuleVersion" type="VersionDataType" use="optional"/>
    <xs:attribute name="PackageGuid" type="GuidType" use="required"/>
    <xs:attribute name="PackageVersion" type="VersionDataType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="LibraryClassAttributes">
    <xs:attribute name="Usage" type="LibraryUsage" use="required"/>
    <xs:attribute name="RecommendedInstanceVersion" type="VersionDataType" use="optional"/>
    <xs:attribute name="RecommendedInstanceGuid" type="GuidType" use="optional"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="LibraryClassDeclarationAttributes">
    <xs:attribute name="Name" type="KeywordType" use="required"/>
    <xs:attribute name="RecommendedInstanceVersion" type="VersionDataType" use="optional"/>
    <xs:attribute name="RecommendedInstanceGuid" type="GuidType" use="optional"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="MsaGuidAttributes">
    <xs:attribute name="Usage" type="GuidUsage" use="optional"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="ModuleNameAttributes">
    <xs:attribute name="ModuleGuid" type="GuidType" use="required"/>
    <xs:attribute name="ModuleName" type="UiNameType" use="optional"/>
    <xs:attribute name="ModuleVersion" type="VersionDataType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="MsaAttributes">
    <xs:attribute name="PackageGuid" type="GuidType" use="required"/>
    <xs:attribute name="ModuleGuid" type="GuidType" use="required"/>
    <xs:attribute name="ModuleVersion" type="VersionDataType" use="optional"/>
    <xs:attribute name="PackageVersion" type="VersionDataType" use="optional"/>
    <xs:attribute name="ForceDebug" type="xs:boolean" default="false" use="optional"/>
    <xs:attribute name="BindingOrder" type="xs:int" use="optional"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="OptionAttributes">
    <xs:attribute name="BuildTargets" type="BuildTargetList" use="optional"/>
    <xs:attribute name="ToolChainFamily" type="ToolsNameConvention" use="optional"/>
    <xs:attribute name="TagName" type="ToolsNameConvention" use="optional"/>
    <xs:attribute name="ToolCode" type="ToolsNameConvention" use="optional"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="PackageHeaderAttributes">
    <xs:attribute name="ModuleType" type="ModuleTypeDef" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="PackageAttributes">
    <!-- Used with the MSA File, PackageDependencies.Package -->
    <xs:attribute name="PackageGuid" type="GuidType" use="required"/>
    <xs:attribute name="PackageVersion" type="VersionDataType" use="optional"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="PackageNameAttributes">
    <!--Used with the FrameworkDatabase PackageList.Packagename  -->
    <xs:attribute name="PackageGuid" type="GuidType" use="required"/>
    <xs:attribute name="PackageVersion" type="VersionDataType" use="optional"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="DynamicBuildPcdAttributes">
    <xs:annotation>
      <xs:documentation xml:lang="en">These attributes are for the Pcds listed in PcdData, PcdEntry and/or PcdBuildData entries.</xs:documentation>
    </xs:annotation>
    <xs:attribute name="ItemType" type="PcdItemTypes" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="PcdBuildDefinitionAttributes">
    <xs:attribute name="ItemType" type="PcdItemTypes" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="PcdCodedAttributes">
    <!-- We need to modify ALL the MSA files that have PcdCoded sections to 
      set the PcdUsage.  Once we modify all the MSA files and we modify the 
      wizard and the build tools, we need to make this required. -->
    <xs:attribute name="Usage" type="PcdUsage" use="optional"/>
    <xs:attribute name="PcdItemType" type="PcdItemTypes" use="required"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="PcdDeclarationAttributes">
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="PlatformAttributes">
    <xs:attribute name="PlatformGuid" type="GuidType" use="required"/>
    <xs:attribute name="PlatformVersion" type="VersionDataType" use="required"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="PpiDeclarationAttributes">
    <xs:attribute name="Name" type="UiNameType" use="required"/>
    <xs:attribute name="GuidTypeList" type="GuidListType" use="optional"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="PpiAttributes">
    <xs:attribute name="Usage" type="PpiUsage" use="required"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="PpiNotifyAttributes">
    <xs:attribute name="Usage" type="PpiNotifyUsage" use="required"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="ProcessStepAttributes">
    <xs:annotation>
      <xs:documentation xml:lang="en">Attributes are either compressable and/or sequence order binding</xs:documentation>
    </xs:annotation>
    <xs:attribute name="BindingOrder" type="xs:int" use="optional"/>
    <xs:attribute name="SectionType" type="EfiSectionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="ProtocolAttributes">
    <xs:attribute name="Usage" type="ProtocolUsage" use="required"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="ProtocolDeclarationAttributes">
    <xs:attribute name="Name" type="UiNameType" use="required"/>
    <xs:attribute name="GuidTypeList" type="GuidListType" use="optional"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="SupModuleList" type="ModuleListType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="ProtocolNotifyAttributes">
    <xs:attribute name="Usage" type="ProtocolNotifyUsage" use="required"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="RawDataAttributes">
    <xs:attribute name="Name" type="xs:string" use="required"/>
    <xs:attribute name="Region" type="xs:string" use="required"/>
    <xs:attribute name="SubRegion" type="xs:string" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="RegionAttributes">
    <xs:attribute name="Name" type="xs:string" use="required"/>
    <xs:attribute name="Size" type="HexAddressType" use="required"/>
    <xs:attribute name="Flags" type="HexAddressType" use="optional"/>
    <xs:attribute name="Attributes" type="xs:string" use="required"/>
    <xs:attribute name="AreaType" type="EfiFvAreaType" use="required"/>
    <xs:attribute name="Alignment" type="HexAddressType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="SectionsAttributes">
    <xs:annotation>
      <xs:documentation xml:lang="en">Attributes for Sections, EncapsulationTag and EncapsulationType</xs:documentation>
    </xs:annotation>
    <xs:attribute name="BindingOrder" type="xs:nonNegativeInteger" use="optional"/>
    <xs:attribute name="Compressible" type="xs:boolean" default="true" use="optional"/>
    <xs:attribute name="SectionType" type="EfiSectionType" use="optional"/>
    <xs:attribute name="EncapsulationType" type="xs:normalizedString" use="optional"/>
    <xs:attribute name="Alignment" type="xs:string" use="optional"/>
    <xs:attribute name="ToolName" type="xs:string" use="optional"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="SubRegionAttributes">
    <xs:attribute name="CreateHob" type="xs:boolean" use="required"/>
    <xs:attribute name="Name" type="xs:string" use="required"/>
    <xs:attribute name="Size" type="HexAddressType" use="required"/>
    <xs:attribute name="Attributes" type="xs:string" use="required"/>
    <xs:attribute name="AreaType" type="EfiFvAreaType" use="required"/>
    <xs:attribute name="NameGuid" type="xs:string" use="required"/>
    <xs:attribute name="AreaTypeGuid" type="xs:string" use="optional"/>
    <xs:attribute name="FileSystemGuid" type="xs:string" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="SystemTableAttributes">
    <xs:attribute name="Usage" type="SystemTableUsage" use="required"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="UrlAttribute">
    <xs:attribute name="Url" type="xs:anyURI"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="VariableAttributes">
    <xs:attribute name="Usage" type="VariableUsage" use="required"/>
    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
    <xs:attribute name="FeatureFlag" type="FeatureFlagExpressionType" use="optional"/>
  </xs:attributeGroup>
</xs:schema>
