<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element type="conventions" name="Conventions"/>

  <xs:complexType name="conventions">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element type="zeroType" name="Zero"/>
      <xs:element type="cdsConventionsType" name="CDS"/>
      <xs:element type="depositType" name="Deposit"/>
      <xs:element type="futureType" name="Future"/>
      <xs:element type="fraType" name="FRA"/>
      <xs:element type="oisType" name="OIS"/>
      <xs:element type="swapType" name="Swap"/>
      <xs:element type="averageOISType" name="AverageOIS"/>
      <xs:element type="tenorBasisSwapType" name="TenorBasisSwap"/>
      <xs:element type="tenorBasisTwoSwapType" name="TenorBasisTwoSwap"/>
      <xs:element type="bmaBasisSwapType" name="BMABasisSwap"/>
      <xs:element type="fxType" name="FX"/>
      <xs:element type="crossCurrencyBasisType" name="CrossCurrencyBasis"/>
      <xs:element type="crossCurrencyFixFloatType" name="CrossCurrencyFixFloat"/>
      <xs:element type="iborIndexType" name="IborIndex"/>
      <xs:element type="overnightIndexType" name="OvernightIndex"/>
      <xs:element type="swapIndexType" name="SwapIndex"/>
      <xs:element type="inflationswapType" name="InflationSwap"/>
      <xs:element type="cmsSpreadOptionType" name="CmsSpreadOption"/>
      <xs:element type="commodityForwardType" name="CommodityForward"/>
      <xs:element type="commodityFutureType" name="CommodityFuture"/>
      <xs:element type="fxOption" name="FxOption"/>
      <xs:element type="fxOptionTimeWeighting" name="FxOptionTimeWeighting"/>
      <xs:element type="zeroInflationIndexType" name="ZeroInflationIndex"/>
      <xs:element type="bondYield" name="BondYield"/>
    </xs:choice>
  </xs:complexType>

  <xs:complexType name="zeroType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="bool" name="TenorBased" minOccurs="1" maxOccurs="1"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="1" maxOccurs="1"/>
      <xs:element type="compounding" name="Compounding" minOccurs="0" maxOccurs="1"/>
      <xs:element type="frequencyType" name="CompoundingFrequency" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="TenorCalendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:integer" name="SpotLag" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="SpotCalendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="RollConvention" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="EOM" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="cdsConventionsType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:integer" name="SettlementDays" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Calendar" minOccurs="1" maxOccurs="1"/>
      <xs:element type="frequencyType" name="Frequency" minOccurs="1" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="PaymentConvention" minOccurs="1" maxOccurs="1"/>
      <xs:element type="dateRule" name="Rule" minOccurs="1" maxOccurs="1"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:nonNegativeInteger" name="UpfrontSettlementDays" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="SettlesAccrual" minOccurs="1" maxOccurs="1"/>
      <xs:element type="bool" name="PaysAtDefaultTime" minOccurs="1" maxOccurs="1"/>
      <xs:element type="dayCounter" name="LastPeriodDayCounter" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="depositType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="bool" name="IndexBased" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Index" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Calendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="Convention" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="EOM" minOccurs="0" maxOccurs="1"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:unsignedLong" name="SettlementDays" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="futureType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Index" minOccurs="1" maxOccurs="1"/>
      <xs:element type="futureDateGenerationRule" name="DateGenerationRule" minOccurs="0" maxOccurs="1"/>
      <xs:element type="overnightIndexFutureNettingType" name="OvernightIndexFutureNettingType" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Calendar" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="fraType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Index" minOccurs="1" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="oisType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:integer" name="SpotLag" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Index" minOccurs="1" maxOccurs="1"/>
      <xs:element type="dayCounter" name="FixedDayCounter" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="FixedCalendar" minOccurs="0"/>
      <xs:element type="xs:integer" name="PaymentLag" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="EOM" minOccurs="0" maxOccurs="1"/>
      <xs:element type="frequencyType" name="FixedFrequency" minOccurs="0" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="FixedConvention" minOccurs="0" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="FixedPaymentConvention" minOccurs="0" maxOccurs="1"/>
      <xs:element type="dateRule" name="Rule" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="PaymentCalendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:integer" name="RateCutoff" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="swapType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="FixedCalendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="frequencyType" name="FixedFrequency" minOccurs="1" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="FixedConvention" minOccurs="0" maxOccurs="1"/>
      <xs:element type="dayCounter" name="FixedDayCounter" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Index" minOccurs="1" maxOccurs="1"/>
      <xs:element type="frequencyType" name="FloatFrequency" minOccurs="0" maxOccurs="1"/>
      <xs:element type="subPeriodsCouponType" name="SubPeriodsCouponType" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="averageOISType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:integer" name="SpotLag" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="FixedTenor" minOccurs="1" maxOccurs="1"/>
      <xs:element type="dayCounter" name="FixedDayCounter" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="FixedCalendar" minOccurs="1" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="FixedConvention" minOccurs="1" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="FixedPaymentConvention" minOccurs="1" maxOccurs="1"/>
      <xs:element type="frequencyType" name="FixedFrequency" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Index" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="OnTenor" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="RateCutoff" minOccurs="1" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="tenorBasisSwapType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="PayIndex" minOccurs="0" maxOccurs="1"/>
      <xs:element type="period" name="PayFrequency" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="ReceiveIndex" minOccurs="0" maxOccurs="1"/>
      <xs:element type="period" name="ReceiveFrequency" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="SpreadOnRec" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="IncludeSpread" minOccurs="0" maxOccurs="1"/>
      <xs:element type="subPeriodsCouponType" name="SubPeriodsCouponType" minOccurs="0" maxOccurs="1"/>
      <!-- deprecated fields -->
      <xs:element type="xs:string" name="LongIndex" minOccurs="0" maxOccurs="1"/>
      <xs:element type="period" name="LongPayTenor" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="ShortIndex" minOccurs="0" maxOccurs="1"/>
      <xs:element type="period" name="ShortPayTenor" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="SpreadOnShort" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="tenorBasisTwoSwapType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Calendar" minOccurs="1" maxOccurs="1"/>
      <xs:element type="frequencyType" name="LongFixedFrequency" minOccurs="1" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="LongFixedConvention" minOccurs="1" maxOccurs="1"/>
      <xs:element type="dayCounter" name="LongFixedDayCounter" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="LongIndex" minOccurs="1" maxOccurs="1"/>
      <xs:element type="frequencyType" name="ShortFixedFrequency" minOccurs="1" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="ShortFixedConvention" minOccurs="1" maxOccurs="1"/>
      <xs:element type="dayCounter" name="ShortFixedDayCounter" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="ShortIndex" minOccurs="1" maxOccurs="1"/>
      <xs:element type="bool" name="LongMinusShort" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="bmaBasisSwapType">
    <xs:all>
      <xs:element type="xs:string" name="Id"/>
      <xs:element type="xs:string" name="Index"/>
      <xs:element type="xs:string" name="BMAIndex"/>
      <xs:element type="xs:string" name="BMAPaymentCalendar" minOccurs="0"/>
      <xs:element type="businessDayConvention" name="BMAPaymentConvention" minOccurs="0"/>
      <xs:element type="xs:integer" name="BMAPaymentLag" minOccurs="0"/>
      <xs:element type="xs:string" name="IndexPaymentCalendar" minOccurs="0"/>
      <xs:element type="businessDayConvention" name="IndexPaymentConvention" minOccurs="0"/>
      <xs:element type="xs:integer" name="IndexPaymentLag" minOccurs="0"/>
      <xs:element type="xs:integer" name="IndexSettlementDays" minOccurs="0"/>
      <xs:element type="period" name="IndexPaymentPeriod" minOccurs="0"/>
      <xs:element type="xs:integer" name="OvernightLockoutDays" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="fxType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:integer" name="SpotDays" minOccurs="1" maxOccurs="1"/>
      <xs:element type="currencyCode" name="SourceCurrency" minOccurs="1" maxOccurs="1"/>
      <xs:element type="currencyCode" name="TargetCurrency" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:decimal" name="PointsFactor" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="AdvanceCalendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="SpotRelative" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="EOM" minOccurs="0"/>
      <xs:element type="businessDayConvention" name="Convention" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="crossCurrencyBasisType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:integer" name="SettlementDays" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="SettlementCalendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="RollConvention" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="FlatIndex" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="SpreadIndex" minOccurs="1" maxOccurs="1"/>
      <xs:element type="bool" name="EOM" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="IsResettable" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="FlatIndexIsResettable" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="FlatTenor" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="SpreadTenor" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:integer" name="SpreadPaymentLag" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:integer" name="FlatPaymentLag" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="SpreadIncludeSpread" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="SpreadLookback" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:integer" name="SpreadFixingDays" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:integer" name="SpreadRateCutoff" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="SpreadIsAveraged" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="FlatIncludeSpread" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="FlatLookback" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:integer" name="FlatFixingDays" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:integer" name="FlatRateCutoff" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="FlatIsAveraged" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="crossCurrencyFixFloatType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:integer" name="SettlementDays" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="SettlementCalendar" minOccurs="1" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="SettlementConvention" minOccurs="1" maxOccurs="1"/>
      <xs:element type="currencyCode" name="FixedCurrency" minOccurs="1" maxOccurs="1"/>
      <xs:element type="frequencyType" name="FixedFrequency" minOccurs="1" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="FixedConvention" minOccurs="1" maxOccurs="1"/>
      <xs:element type="dayCounter" name="FixedDayCounter" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Index" minOccurs="1" maxOccurs="1"/>
      <xs:element type="bool" name="EOM" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="IsResettable" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="FloatIndexIsResettable" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="iborIndexType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="FixingCalendar" minOccurs="1" maxOccurs="1"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:integer" name="SettlementDays" minOccurs="1" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="BusinessDayConvention" minOccurs="1" maxOccurs="1"/>
      <xs:element type="bool" name="EndOfMonth" minOccurs="1" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="overnightIndexType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="FixingCalendar" minOccurs="1" maxOccurs="1"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:integer" name="SettlementDays" minOccurs="1" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="swapIndexType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Conventions" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="FixingCalendar" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="inflationswapType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="FixCalendar" minOccurs="1" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="FixConvention" minOccurs="1" maxOccurs="1"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Index" minOccurs="1" maxOccurs="1"/>
      <xs:element type="bool" name="Interpolated" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="ObservationLag" minOccurs="1" maxOccurs="1"/>
      <xs:element type="bool" name="AdjustInflationObservationDates" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="InflationCalendar" minOccurs="1" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="InflationConvention" minOccurs="1" maxOccurs="1"/>
      <xs:element type="publicationRoll" name="PublicationRoll" minOccurs="0" maxOccurs="1"/>
      <xs:element type="scheduleData" name="PublicationSchedule" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="StartDelay" minOccurs="0" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="StartDelayConvention" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="cmsSpreadOptionType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="ForwardStart" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="SpotDays" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="SwapTenor" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:integer" name="FixingDays" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Calendar" minOccurs="1" maxOccurs="1"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="1" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="RollConvention" minOccurs="1" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="commodityForwardType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:integer" name="SpotDays" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:decimal" name="PointsFactor" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="AdvanceCalendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="SpotRelative" minOccurs="0" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="BusinessDayConvention" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="Outright" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="nthWeekdayType">
    <xs:all>
      <xs:element name="Nth" minOccurs="1" maxOccurs="1">
        <xs:simpleType>
          <xs:restriction base="xs:integer">
            <xs:minInclusive value="1"/>
            <xs:maxInclusive value="4"/>
          </xs:restriction> 
        </xs:simpleType>
      </xs:element>
      <xs:element type="weekdayType" name="Weekday" minOccurs="1" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  
  <xs:simpleType name="prohibitedExpiriesBdcType">
    <xs:restriction base="businessDayConvention">
      <xs:enumeration value="F"/>
      <xs:enumeration value="Following"/>
      <xs:enumeration value="FOLLOWING"/>
      <xs:enumeration value="MF"/>
      <xs:enumeration value="ModifiedFollowing"/>
      <xs:enumeration value="Modified Following"/>
      <xs:enumeration value="MODIFIEDF"/>
      <xs:enumeration value="MODFOLLOWING"/>
      <xs:enumeration value="P"/>
      <xs:enumeration value="Preceding"/>
      <xs:enumeration value="PRECEDING"/>
      <xs:enumeration value="MP"/>
      <xs:enumeration value="ModifiedPreceding"/>
      <xs:enumeration value="Modified Preceding"/>
      <xs:enumeration value="MODIFIEDP"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="prohibitedExpiriesType">
    <xs:all>
      <xs:element name="Dates">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Date" minOccurs="1" maxOccurs="unbounded">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="date">
                    <xs:attribute name="forFuture" type="bool" />
                    <xs:attribute name="convention" type="prohibitedExpiriesBdcType" />
                    <xs:attribute name="forOption" type="bool" />
                    <xs:attribute name="optionConvention" type="prohibitedExpiriesBdcType" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="continuationMappingType">
    <xs:sequence>
      <xs:element type="xs:positiveInteger" name="From"/>
      <xs:element type="xs:positiveInteger" name="To"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="continuationMappingsType">
    <xs:sequence>
      <xs:element type="continuationMappingType" name="ContinuationMapping" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="averagingDataType">
    <xs:all>
      <xs:element type="xs:string" name="CommodityName" minOccurs="1" maxOccurs="1"/>
      <xs:element type="averagingDataPeriodType" name="Period" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="PricingCalendar" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Conventions" minOccurs="1" maxOccurs="1"/>
      <xs:element type="bool" name="UseBusinessDays" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:nonNegativeInteger" name="DeliveryRollDays" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:nonNegativeInteger" name="FutureMonthOffset" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:nonNegativeInteger" name="DailyExpiryOffset" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  
  <xs:complexType name="offPeakPowerIndexDataType">
    <xs:all>
      <xs:element type="xs:string" name="OffPeakIndex" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="PeakIndex" minOccurs="1" maxOccurs="1"/>
      <xs:element name="OffPeakHours" minOccurs="1" maxOccurs="1">
        <xs:simpleType>
          <xs:restriction base="xs:decimal">
            <xs:minExclusive value="0"/>
            <xs:maxExclusive value="24"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element type="xs:string" name="PeakCalendar" minOccurs="1" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="commodityFutureType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element name="AnchorDay" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:choice>
            <xs:element type="nthWeekdayType" name="NthWeekday"/>
            <xs:element type="dayOfMonth" name="DayOfMonth"/>
            <xs:element type="xs:nonNegativeInteger" name="CalendarDaysBefore"/>
            <xs:element type="weekdayType" name="LastWeekday"/>
            <xs:element type="weekdayType" name="WeeklyDayOfTheWeek"/>
            <xs:element type="xs:integer" name="BusinessDaysAfter"/>
          </xs:choice>
        </xs:complexType>
      </xs:element>
      <xs:element type="frequencyType" name="ContractFrequency" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Calendar" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="ExpiryCalendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:integer" name="ExpiryMonthLag" minOccurs="0" maxOccurs="1"/>
      <xs:element type="monthType" name="OneContractMonth" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:integer" name="OffsetDays" minOccurs="0" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="BusinessDayConvention" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="AdjustBeforeOffset" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="IsAveraging" minOccurs="0" maxOccurs="1"/>
      <xs:element type="prohibitedExpiriesType" name="ProhibitedExpiries" minOccurs="0" maxOccurs="1"/>
      <xs:element name="ValidContractMonths" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:sequence>
            <xs:element type="monthType" name="Month" minOccurs="1" maxOccurs="12"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element type="xs:integer" name="OptionExpiryMonthLag" minOccurs="0" maxOccurs="1"/>
      <xs:element type="frequencyType" name="OptionContractFrequency" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:nonNegativeInteger" name="OptionExpiryOffset" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:nonNegativeInteger" name="OptionCalendarDaysBefore" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:nonNegativeInteger" name="OptionMinBusinessDaysBefore" minOccurs="0" maxOccurs="1"/>
      <xs:element type="dayOfMonth" name="OptionExpiryDay" minOccurs="0" maxOccurs="1"/>
      <xs:element type="nthWeekdayType" name="OptionNthWeekday" minOccurs="0" maxOccurs="1"/>
      <xs:element type="weekdayType" name="OptionExpiryLastWeekdayOfMonth" minOccurs="0" maxOccurs="1"/>
      <xs:element type="weekdayType" name="OptionExpiryWeeklyDayOfTheWeek" minOccurs="0" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="OptionBusinessDayConvention" minOccurs="0" maxOccurs="1"/>
      <xs:element type="continuationMappingsType" name="FutureContinuationMappings" minOccurs="0" maxOccurs="1"/>
      <xs:element type="continuationMappingsType" name="OptionContinuationMappings" minOccurs="0" maxOccurs="1"/>
      <xs:element type="averagingDataType" name="AveragingData" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:nonNegativeInteger" name="HoursPerDay" minOccurs="0" maxOccurs="1"/>
      <xs:element type="offPeakPowerIndexDataType" name="OffPeakPowerIndexData" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="IndexName" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="SavingsTime" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="BalanceOfTheMonth" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="BalanceOfTheMonthPricingCalendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="OptionUnderlyingFutureConvention" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="fxOption">
    <xs:all>
      <xs:element type="xs:string" name="Id"/>
      <xs:element type="xs:string" name="FXConventionID" minOccurs="0"/>
      <xs:element type="xs:string" name="AtmType"/>
      <xs:element type="xs:string" name="DeltaType"/>
      <xs:element type="xs:string" name="SwitchTenor" minOccurs="0"/>
      <xs:element type="xs:string" name="LongTermAtmType" minOccurs="0"/>
      <xs:element type="xs:string" name="LongTermDeltaType" minOccurs="0"/>
      <xs:element type="xs:string" name="RiskReversalInFavorOf" minOccurs="0"/>
      <xs:element type="xs:string" name="ButterflyStyle" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="fxOptionTimeWeighting">
    <xs:all>
      <xs:element type="xs:string" name="Id"/>
      <xs:element name="WeekdayWeights">
        <xs:complexType>
          <xs:sequence>
            <xs:element type="xs:float" name="Monday"/>
            <xs:element type="xs:float" name="Tuesday"/>
            <xs:element type="xs:float" name="Wednesday"/>
            <xs:element type="xs:float" name="Thursday"/>
            <xs:element type="xs:float" name="Friday"/>
            <xs:element type="xs:float" name="Saturday"/>
            <xs:element type="xs:float" name="Sunday"/>
         </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="TradingCenters" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="TradingCenter">
              <xs:complexType>
                <xs:all>
                  <xs:element type="xs:string" name="Name" />
                  <xs:element type="xs:string" name="Calendar" />
                  <xs:element type="xs:float" name="Weight" />
                </xs:all>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Events" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Event">
              <xs:complexType>
                <xs:all>
                  <xs:element type="xs:string" name="Description" />
                  <xs:element type="date" name="Date" />
                  <xs:element type="xs:float" name="Weight" />
                </xs:all>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="zeroInflationIndexType">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="RegionName" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="RegionCode" minOccurs="1" maxOccurs="1"/>
      <xs:element type="bool" name="Revised" minOccurs="1" maxOccurs="1"/>
      <xs:element type="frequencyType" name="Frequency" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="AvailabilityLag" minOccurs="1" maxOccurs="1"/>
      <xs:element type="currencyCode" name="Currency" minOccurs="1" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="bondYield">
    <xs:all>
      <xs:element type="xs:string" name="Id" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Compounding" minOccurs="1" maxOccurs="1"/>
      <xs:element type="frequencyType" name="Frequency" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="PriceType" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:float" name="Accuracy" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:integer" name="MaxEvaluations" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:float" name="Guess" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

</xs:schema>
