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

  <xs:element type="stresstesting" name="StressTesting"/>

  <xs:complexType name="stresstesting">
    <xs:sequence>
      <xs:element type="bool" name="UseSpreadedTermStructures" minOccurs="0"/>
      <xs:element type="stresstest" name="StressTest" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

<xs:complexType name="stresstestparshifts">
  <xs:all>
    <xs:element type="bool" name="IRCurves" minOccurs="0"/>
    <xs:element type="bool" name="CapFloorVolatilities" minOccurs="0"/>
    <xs:element type="bool" name="SurvivalProbability" minOccurs="0"/>
  </xs:all>
</xs:complexType>

<xs:complexType name="stresscapfloorvolatility">
  <xs:sequence>
    <xs:element type="shiftTypeEntry" name="ShiftType" maxOccurs="unbounded"/>
    <xs:element name="Shifts">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="Shift" maxOccurs="unbounded" minOccurs="0">
            <xs:complexType>
              <xs:simpleContent>
                <xs:extension base="xs:string">
                  <xs:attribute type="xs:string" name="tenor"/>
                </xs:extension>
              </xs:simpleContent>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    <xs:element type="xs:string" name="ShiftExpiries"/>
    <xs:element type="xs:string" name="ShiftStrikes" minOccurs="0"/>
    <xs:element type="indexNameType" name="Index" minOccurs="0"/>
    <xs:element type="xs:boolean" name="IsRelative" minOccurs="0"/>
  </xs:sequence>
  <xs:attribute type="xs:string" name="key"/>
  <xs:attribute type="currencyCode" name="ccy"/> <!-- deprecated -->
</xs:complexType>

<xs:complexType name="stresscapfloorvolatilities">
  <xs:sequence>
    <xs:element type="stresscapfloorvolatility" name="CapFloorVolatility" maxOccurs="unbounded" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>

  <xs:complexType name="stresstest">
    <xs:all>
      <xs:element type="stresstestparshifts" name="ParShifts" minOccurs="0"/>
      <xs:element type="discountcurves" name="DiscountCurves" minOccurs="0"/>
      <xs:element type="indexcurves" name="IndexCurves" minOccurs="0"/>
      <xs:element type="yieldcurves" name="YieldCurves" minOccurs="0"/>
      <xs:element type="fxspots" name="FxSpots" minOccurs="0"/>
      <xs:element type="stressfxvolatilities" name="FxVolatilities" minOccurs="0"/>
      <xs:element type="swaptionvolatilities" name="SwaptionVolatilities" minOccurs="0"/>
      <xs:element type="stresscapfloorvolatilities" name="CapFloorVolatilities" minOccurs="0"/>
      <xs:element type="equityspots" name="EquitySpots" minOccurs="0"/>
      <xs:element type="equityvolatilities" name="EquityVolatilities" minOccurs="0"/>
      <xs:element type="stresscommoditycurves" name="CommodityCurves" minOccurs="0"/>
      <xs:element type="stresscommodityvolatilities" name="CommodityVolatilities" minOccurs="0"/>
      <xs:element type="securityspreads" name="SecuritySpreads" minOccurs="0"/>
      <xs:element type="recoveryrates" name="RecoveryRates" minOccurs="0"/>
      <xs:element type="survivalprobabilities" name="SurvivalProbabilities" minOccurs="0"/>
    </xs:all>
    <xs:attribute type="xs:string" name="id" use="required"/>
  </xs:complexType>

  <xs:complexType name="stressfxvolatilities">
    <xs:sequence>
      <xs:element type="stressfxvolatility" name="FxVolatility" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="stressfxvolatility">
    <xs:sequence>
      <xs:element type="shiftTypeEntry" name="ShiftType" maxOccurs="unbounded"/>
      <xs:choice>
        <xs:sequence>
          <xs:element type="xs:string" name="Shifts"/>
          <xs:element type="xs:string" name="ShiftExpiries"/>
        </xs:sequence>

        <xs:sequence>
          <xs:element name="WeightedShifts">
            <xs:complexType>
              <xs:all>
                <xs:element type="xs:string" name="WeightingSchema"/>
                <xs:element type="xs:string" name="Shift"/>
                <xs:element type="xs:string" name="Tenor"/>
                <xs:element type="xs:string" name="ShiftWeights" minOccurs="0"/>
                <xs:element type="xs:string" name="WeightTenors" minOccurs="0"/>
              </xs:all>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:choice>
    </xs:sequence>
    <xs:attribute type="currencyPair" name="ccypair" use="required"/>
  </xs:complexType>

  <xs:complexType name="stresscommoditycurves">
    <xs:sequence>
      <xs:element type="stresscommoditycurve" name="CommodityCurve" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="stresscommodityvolatilities">
    <xs:sequence>
      <xs:element type="stresscommodityvolatility" name="CommodityVolatility" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="stresscommoditycurve">
    <xs:sequence>
      <xs:element type="currencyCode" name="Currency"/>
      <xs:element type="shiftTypeEntry" name="ShiftType" maxOccurs="unbounded"/>
      <xs:element type="xs:string" name="Shifts"/>
      <xs:element type="xs:string" name="ShiftTenors"/>
    </xs:sequence>
    <xs:attribute type="xs:string" name="commodity" use="required"/>
  </xs:complexType>

  <xs:complexType name="stresscommodityvolatility">
    <xs:sequence>
      <xs:element type="shiftTypeEntry" name="ShiftType" maxOccurs="unbounded"/>
      <xs:element type="xs:string" name="Shifts"/>
      <xs:element type="xs:string" name="ShiftExpiries"/>
      <xs:element type="xs:string" name="ShiftMoneyness"/>
    </xs:sequence>
    <xs:attribute type="xs:string" name="commodity" use="required"/>
  </xs:complexType>

</xs:schema>
