<?xml version="1.0" encoding="UTF-8"?>
<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">
  <!--
    Filename: SurfaceArea.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.
    
    APPROVED: 14-Jun-2006
  -->
  <xs:include schemaLocation="FrameworkHeaders.xsd"/>
  <xs:include schemaLocation="FrameworkDataElements.xsd"/>
  <xs:include schemaLocation="FrameworkPlatformDataElements.xsd"/>
  <xs:annotation>
    <xs:documentation xml:lang="en">This describes the valid content of a FrameworkDatabase (DB) File.</xs:documentation>
  </xs:annotation>
  <xs:element name="FrameworkDatabase">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="1" maxOccurs="1" ref="FdbHeader"/>
        <xs:element minOccurs="1" maxOccurs="1" ref="PackageList"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="PlatformList"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="FarList"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="UserExtensions"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:annotation>
    <xs:documentation xml:lang="en">This describes the valid content of a Framework Platform Description (FPD) File.</xs:documentation>
  </xs:annotation>
  <xs:element name="PlatformSurfaceArea">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="1" maxOccurs="1" ref="PlatformHeader"/>
        <!-- This section will be for new definitions of how we put together the Framework Binary Images -->
        <xs:element minOccurs="0" maxOccurs="1" ref="PlatformDefinitions"/>
        <!-- The Flash section is the legacy implementation of Flash -->
        <xs:element minOccurs="0" maxOccurs="1" ref="Flash"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="FrameworkModules"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="DynamicPcdBuildDefinitions"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="BuildOptions"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="UserExtensions"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:annotation>
    <xs:documentation xml:lang="en">This describes the valid content for a Module Surface Area Description (MSA) file.</xs:documentation>
  </xs:annotation>
  <xs:element name="ModuleSurfaceArea">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="1" maxOccurs="1" ref="MsaHeader"/>
        <xs:element minOccurs="1" maxOccurs="1" ref="ModuleDefinitions"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="LibraryClassDefinitions"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="SourceFiles"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="NonProcessedFiles"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="PackageDependencies"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="Protocols"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="Events"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="Hobs"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="PPIs"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="Variables"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="BootModes"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="SystemTables"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="DataHubs"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="HiiPackages"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="Guids"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="Externs"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="PcdCoded"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="ModuleBuildOptions"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="UserExtensions"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:annotation>
    <xs:documentation xml:lang="en">This describes the valid content for a Package Surface Area Description (SPD) file.</xs:documentation>
  </xs:annotation>
  <xs:element name="PackageSurfaceArea">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="1" maxOccurs="1" ref="SpdHeader"/>
        <xs:element minOccurs="1" maxOccurs="1" ref="PackageDefinitions"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="LibraryClassDeclarations"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="IndustryStdIncludes"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="MsaFiles"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="PackageHeaders"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="GuidDeclarations"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="ProtocolDeclarations"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="PpiDeclarations"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="PcdDeclarations"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="UserExtensions"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- This element is listed here, only because we are using elements from both the FrameworkDataElements and FrameworkPlatformDataElements files. -->
  <xs:element name="PlatformDefinitions">
    <xs:complexType>
      <xs:sequence>
        <!-- This is the list of ALL architectures that are supported by this Platform -->
        <xs:element minOccurs="1" maxOccurs="1" name="SupportedArchitectures" type="ArchListType"/>
        <xs:element minOccurs="1" maxOccurs="1" name="BuildTargets" type="BuildTargetList"/>
        <xs:element default="UNIFIED" name="IntermediateDirectories" type="IntermediateOutputType"/>
        <xs:element minOccurs="0" maxOccurs="1" name="OutputDirectory" type="xs:anyURI"/>
        <xs:element minOccurs="0" maxOccurs="1" name="ForceDebugTarget" type="KeywordType"/>
        <!-- SkuInfo is only defined if Sku enabled -->
        <xs:element minOccurs="0" maxOccurs="1" ref="SkuInfo"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="FlashDeviceDefinitions"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="FfsFormatDeclarations"/>
        <xs:element minOccurs="0" maxOccurs="1" name="ClonedFrom">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="1" maxOccurs="unbounded" name="Cloned">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element minOccurs="1" maxOccurs="1" name="PlatformGuid" type="GuidType"/>
                    <xs:element minOccurs="1" maxOccurs="1" name="PlatformVersion" type="VersionDataType"/>
                  </xs:sequence>
                  <!-- The Id is a number used to track heritage  the first entry will be 0 and increment from then on. -->
                  <xs:attribute name="Id" type="xs:nonNegativeInteger" use="required"/>
                  <!-- If the original module was installed from a FAR, track the FAR it came from. -->
                  <xs:attribute name="FarGuid" type="GuidType" use="optional"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
