<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <!--=====================================================================================================-->
  <!--Base Framework [##SfIfSvPl.xml##]-->
  <!--=====================================================================================================-->
  <xsd:element name="BaseFramework">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="FrameworkService" maxOccurs="unbounded" />
      </xsd:sequence>
      <xsd:attribute name="version" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>
  <!--=====================================================================================================-->
  <!--Each Framework Service [##SfIfSvPl.xml##]-->
  <!--=====================================================================================================-->
  <xsd:element name="FrameworkService">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Module"/>
        <xsd:element ref="ModuleName"/>
        <xsd:element ref="Startup"/>
        <xsd:element ref="Load"/>
        <xsd:element ref="OrderOfLoading"/>
        <xsd:element ref="OrderOfUnloading"/>
        <xsd:element ref="Shared"/>
        <xsd:element ref="Controller"/>
        <xsd:element ref="Provider"/>
        <xsd:element ref="AllowToLoadSetupMode"/>
        <xsd:element ref="AllowToLoadExpiredMode"/>
      </xsd:sequence>
      <xsd:attribute name="label" type="xsd:string" use="required" />
      <xsd:attribute name="Layer" type="LayerType" use="required" />
      <xsd:attribute name="Service" type="ServiceType" use="required" />
      <xsd:attribute name="version" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>


  <!--=====================================================================================================-->
  <!--Policy Enforce Layer [##SfEnPlcy.xml##]-->
  <!--=====================================================================================================-->
  <xsd:element name="PolicyEnforceLayer">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="PolicyControllers" />
      </xsd:sequence>
      <xsd:attribute name="version" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>
  <!--=====================================================================================================-->
  <!--Policy Controllers [##SfEnPlcy.xml##]-->
  <!--=====================================================================================================-->
  <xsd:element name="PolicyControllers">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="PolicyController" maxOccurs="unbounded" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <!--=====================================================================================================-->
  <!--Each Policy Controller [##SfEnPlcy.xml##]-->
  <!--=====================================================================================================-->
  <xsd:element name="PolicyController">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Permission" />
        <xsd:element ref="AllowToLoadSetupMode"/>
        <xsd:element ref="AllowToLoadExpiredMode"/>
        <xsd:element ref="PolicyProviders" maxOccurs="unbounded" />
      </xsd:sequence>
      <xsd:attribute name="label" type="xsd:string" use="required" />
      <xsd:attribute name="Controller" type="ControllerType" use="required" />
      <xsd:attribute name="version" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>
  <!--=====================================================================================================-->
  <!--Policy Providers [##SfEnPlcy.xml##]-->
  <!--=====================================================================================================-->
  <xsd:element name="PolicyProviders">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="PolicyProvider" maxOccurs="unbounded" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <!--=====================================================================================================-->
  <!--Each Policy Provider [##SfEnPlcy.xml##]-->
  <!--=====================================================================================================-->
  <xsd:element name="PolicyProvider">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Permission" />
        <xsd:element ref="Deploy" />
      </xsd:sequence>
      <xsd:attribute name="label" type="xsd:string" use="required" />
      <xsd:attribute name="Controller" type="ControllerType" use="required" />
      <xsd:attribute name="Provider" type="ProviderType" use="required" />
      <xsd:attribute name="version" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>


  <!--=====================================================================================================-->
  <!--Data Enforce Layer [##SfEnData.xml##]-->
  <!--=====================================================================================================-->
  <xsd:element name="DataEnforceLayer">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="DataControllers" />
      </xsd:sequence>
      <xsd:attribute name="version" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>
  <!--=====================================================================================================-->
  <!--Data Controllers [##SfEnData.xml##]-->
  <!--=====================================================================================================-->
  <xsd:element name="DataControllers">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="DataController" maxOccurs="unbounded" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <!--=====================================================================================================-->
  <!--Each Data Controller [##SfEnData.xml##]-->
  <!--=====================================================================================================-->
  <xsd:element name="DataController">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Module"/>
        <xsd:element ref="ModuleName"/>
        <xsd:element ref="Startup"/>
        <xsd:element ref="OrderOfLoading"/>
        <xsd:element ref="OrderOfUnloading"/>
        <xsd:element ref="AuId"/>
        <xsd:element ref="DataProviders" maxOccurs="unbounded" />
      </xsd:sequence>
      <xsd:attribute name="label" type="xsd:string" use="required" />
      <xsd:attribute name="Controller" type="ControllerType" use="required" />
      <xsd:attribute name="version" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>
  <!--=====================================================================================================-->
  <!--Data Providers [##SfEnData.xml##]-->
  <!--=====================================================================================================-->
  <xsd:element name="DataProviders">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="DataProvider" maxOccurs="unbounded" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <!--=====================================================================================================-->
  <!--Each Data Provider [##SfEnData.xml##]-->
  <!--=====================================================================================================-->
  <xsd:element name="DataProvider">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Module"/>
        <xsd:element ref="ModuleName"/>
        <xsd:element ref="Startup"/>
        <xsd:element ref="OrderOfLoading"/>
        <xsd:element ref="OrderOfUnloading"/>
        <xsd:element ref="Shared"/>
        <xsd:element ref="Layer"/>
        <xsd:element ref="Service"/>
        <xsd:element ref="DependencyController"/>
        <xsd:element ref="DependencyProvider"/>
        <xsd:element ref="AdditionalCallAfterInstall"/>
      </xsd:sequence>
      <xsd:attribute name="label" type="xsd:string" use="required" />
      <xsd:attribute name="Controller" type="ControllerType" use="required" />
      <xsd:attribute name="Provider" type="ProviderType" use="required" />
      <xsd:attribute name="version" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>

  <!--=====================================================================================================-->
  <!--Install AuIds [##SfInAuId.xml##]-->
  <!--=====================================================================================================-->
  <xsd:element name="InstallAuIds">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="InstallAuId" maxOccurs="unbounded" />
      </xsd:sequence>
      <xsd:attribute name="version" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>
  <!--=====================================================================================================-->
  <!--Each Install AuId [##SfInAuId.xml##]-->
  <!--=====================================================================================================-->
  <xsd:element name="InstallAuId">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Component" />
        <xsd:element ref="AuId" />
        <xsd:element ref="Platform" />
      </xsd:sequence>
      <xsd:attribute name="label" type="xsd:string" use="required" />
      <xsd:attribute name="version" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>

  <!--Layer Type (See SrvFrwk_DataType.h)-->
  <xsd:element name="Layer" type="LayerType" />
  <xsd:simpleType name="LayerType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="eNoneLayer"/>
      <xsd:enumeration value="eControlLayer"/>
      <xsd:enumeration value="eInterfaceLayer"/>
      <xsd:enumeration value="eServiceLayer"/>
      <xsd:enumeration value="eEnforceLayer"/>
    </xsd:restriction>
  </xsd:simpleType>

  <!--Service Type (See SrvFrwk_DataType.h)-->
  <xsd:element name="Service" type="ServiceType" />
  <xsd:simpleType name="ServiceType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="eNone"/>
      <xsd:enumeration value="eComCommandHandler"/>
      <xsd:enumeration value="eHttpCommandHandler"/>
      <xsd:enumeration value="eComDataHandler"/>
      <xsd:enumeration value="eEventManager"/>
      <xsd:enumeration value="eLicenseManager"/>
      <xsd:enumeration value="eEnforceHandler"/>
      <xsd:enumeration value="eUpdateManager"/>
      <xsd:enumeration value="eEventLog"/>
      <xsd:enumeration value="eCollectionManager"/>
      <xsd:enumeration value="eUIService"/>
      <xsd:enumeration value="eTaskScheduler"/>
      <xsd:enumeration value="eQuarantineManager"/>
    </xsd:restriction>
  </xsd:simpleType>

  <!--Controller Type (See SrvFrwk_DataType.h)-->
  <xsd:element name="Controller" type="ControllerType" />
  <xsd:simpleType name="ControllerType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="eNone" />
      <xsd:enumeration value="eAntiVirus" />
      <xsd:enumeration value="eAntiSpyware" />
      <xsd:enumeration value="eFirewall" />
      <xsd:enumeration value="eContentsProtection" />
      <xsd:enumeration value="eMiscellaneous" />
      <xsd:enumeration value="eCommon" />
    </xsd:restriction>
  </xsd:simpleType>

  <!--Provider Type (See SrvFrwk_DataType.h)-->
  <xsd:element name="Provider" type="ProviderType" />
  <xsd:simpleType name="ProviderType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="eNone" />
      <xsd:enumeration value="eRealTimeScan" />
      <xsd:enumeration value="eManualScan" />
      <xsd:enumeration value="eBehavior" />
      <xsd:enumeration value="eAcsAppFilter" />
      <xsd:enumeration value="eStreamScan" />
      <xsd:enumeration value="eNeighborList" />
      <xsd:enumeration value="eLocationChange" />
      <xsd:enumeration value="ePop3Scan" />
      <xsd:enumeration value="eSmtpScan" />
      <xsd:enumeration value="eWebMailScan" />
      <xsd:enumeration value="eAntiSpam" />
      <xsd:enumeration value="eUrlFilter" />
      <xsd:enumeration value="ePrivacyData" />
      <xsd:enumeration value="eAntiPhish" />
      <xsd:enumeration value="eTrendSecure" />
      <xsd:enumeration value="eVulnerability" />
      <xsd:enumeration value="eOutbreakWarning" />
      <xsd:enumeration value="eHomeNetwork" />
      <xsd:enumeration value="eActiveUpdate" />
      <xsd:enumeration value="eEventLog" />
      <xsd:enumeration value="eQuarantine" />
      <xsd:enumeration value="eTaskSchedule" />
      <xsd:enumeration value="eCollection" />
      <xsd:enumeration value="eRegistration" />
    </xsd:restriction>
  </xsd:simpleType>

  <!--Module Type (See SrvFrwk_DataType.h)-->
  <xsd:element name="Module" type="ModuleType" />
  <xsd:simpleType name="ModuleType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="eUnkown"/>
      <xsd:enumeration value="eExecutable"/>
      <xsd:enumeration value="eDynamicLinkLibrary"/>
      <xsd:enumeration value="eInlineCode"/>
    </xsd:restriction>
  </xsd:simpleType>

  <!--Module Name-->
  <xsd:element name="ModuleName" type="xsd:string" />

  <!--Startup Type (See SrvFrwk_DataType.h)-->
  <xsd:element name="Startup" type="StartupType" />
  <xsd:simpleType name="StartupType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="eDisable" />
      <xsd:enumeration value="eAutomatic" />
      <xsd:enumeration value="eDemand" />
    </xsd:restriction>
  </xsd:simpleType>

  <!--Load Option (See SrvFrwk_DataType.h)-->
  <xsd:element name="Load" type="LoadOption" />
  <xsd:simpleType name="LoadOption">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="ePreLoad" />
      <xsd:enumeration value="eDelayLoad" />
    </xsd:restriction>
  </xsd:simpleType>

  <!--OrderOfLoading, OrderOfUnloading-->
  <xsd:element name="OrderOfLoading" type="xsd:unsignedLong" />
  <xsd:element name="OrderOfUnloading" type="xsd:unsignedLong" />

  <!--AllowToLoadStartupMode, AllowToLoadExpiredMode-->
  <xsd:element name="AllowToLoadSetupMode" type="xsd:boolean" />
  <xsd:element name="AllowToLoadExpiredMode" type="xsd:boolean" />

  <!--Permission Type (See SrvFrwk_DataType.h)-->
  <xsd:element name="Permission" type="PermissionType" />
  <xsd:simpleType name="PermissionType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="eDeny" />
      <xsd:enumeration value="eAllow" />
      <xsd:enumeration value="ePartial" />
    </xsd:restriction>
  </xsd:simpleType>

  <!--Deploy State (See SrvFrwk_DataType.h)-->
  <xsd:element name="Deploy" type="DeployState" />
  <xsd:simpleType name="DeployState">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="eNoDeploy" />
      <xsd:enumeration value="eInstalled" />
      <xsd:enumeration value="ePartialInstalled" />
      <xsd:enumeration value="eWaitDownload" />
      <xsd:enumeration value="eWaitInstalled" />
    </xsd:restriction>
  </xsd:simpleType>

  <!--Component-->
  <xsd:element name="Component" type="ComponentType" />
  <xsd:simpleType name="ComponentType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="eNone" />
      <xsd:enumeration value="ePattern" />
      <xsd:enumeration value="eEngine" />
      <xsd:enumeration value="eProduct" />
    </xsd:restriction>
  </xsd:simpleType>

  <!--AuId-->
  <xsd:element name="AuId" type="xsd:unsignedLong" />

  <!--Platform-->
  <xsd:element name="Platform" type="PlatformType" />
  <xsd:simpleType name="PlatformType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="eOnly32bit" />
      <xsd:enumeration value="eOnly64bit" />
      <xsd:enumeration value="eBoth32And64bit" />
    </xsd:restriction>
  </xsd:simpleType>

  <!--Shared Type (See SrvFrwk_DataType.h)-->
  <xsd:element name="Shared" type="SharedType" />
  <xsd:simpleType name="SharedType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="eIndependent" />
      <xsd:enumeration value="eSharedService" />
      <xsd:enumeration value="eSharedProvider" />
    </xsd:restriction>
  </xsd:simpleType>

  <!--DependencyControler, DependencyProvider-->
  <xsd:element name="DependencyController" type="ControllerType" />
  <xsd:element name="DependencyProvider" type="ProviderType" />

  <!-- AdditionalCallAfterInstall -->
  <xsd:element name="AdditionalCallAfterInstall" type="xsd:boolean"/>
</xsd:schema>