<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" id="SD_MSP_Registry" version="1.1">
  <!--
================
    complexTypes    
================
-->
  <xsd:complexType name="Address">
    <xsd:attributeGroup ref="Address.attr"/>
  </xsd:complexType>
  <xsd:complexType name="AddressList">
    <xsd:sequence>
      <xsd:element name="Address" type="Address" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="AlternateName">
    <xsd:attributeGroup ref="AlternateName.attr"/>
  </xsd:complexType>
  <xsd:complexType name="AlternateNameList">
    <xsd:sequence>
      <xsd:element name="AlternateName" type="AlternateName" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="DbaName">
    <xsd:attributeGroup ref="DbaName.attr"/>
  </xsd:complexType>
  <xsd:complexType name="DbaNameList">
    <xsd:sequence>
      <xsd:element name="DbaName" type="DbaName" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="Status">
    <xsd:attributeGroup ref="Status.attr"/>
  </xsd:complexType>
  <xsd:complexType name="StatusList">
    <xsd:sequence>
      <xsd:element name="Status" type="Status" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="SwapEntity">
    <xsd:sequence>
      <xsd:element name="NfaId" minOccurs="1" maxOccurs ="1" nillable ="false">
        <xsd:simpleType>
          <xsd:restriction base ="xsd:token">
            <xsd:pattern value="[0-9]{7}"/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
      <xsd:element name="Name" minOccurs="0" maxOccurs ="unbounded">
        <xsd:simpleType>
          <xsd:restriction base ="xsd:token">
            <xsd:maxLength value="100"/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
      <xsd:element name="StatusList" type="StatusList" minOccurs="1" maxOccurs="1"/>
      <xsd:element name="AddressList" type="AddressList" minOccurs="1" maxOccurs="1"/>
      <xsd:element name="DbaNameList" type="DbaNameList" minOccurs="1" maxOccurs="1"/>
      <xsd:element name="AlternateNameList" type="AlternateNameList" minOccurs="1" maxOccurs="1"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="SwapRegistryList">
    <xsd:sequence>
      <xsd:element name="SwapEntity" type="SwapEntity" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="Version" use="required">
      <xsd:simpleType>
        <xsd:restriction base="xsd:token">
          <xsd:pattern value="[0-9]{1,3}.[0-9]{1,3}"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="Generated" use="required">
      <xsd:simpleType>
        <xsd:restriction base="xsd:dateTime">
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
  </xsd:complexType>

  <!--
================
    elements    
================
-->
  <xsd:element name="SwapRegistryList" type="SwapRegistryList"/>

  <!--
================
    attributeGroups    
================
-->
  <xsd:attributeGroup name="Address.attr">
    <xsd:attribute name="CountryName" use="optional">
      <xsd:simpleType>
        <xsd:restriction base="xsd:string">
          <xsd:maxLength value="50"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="Country" use="optional">
      <xsd:simpleType>
        <xsd:restriction base="xsd:token">
          <xsd:maxLength value="2"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="PostalCode" use="optional">
      <xsd:simpleType>
        <xsd:restriction base="xsd:token">
          <xsd:maxLength value="15"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="State" use="optional">
      <xsd:simpleType>
        <xsd:restriction base="xsd:token">
          <xsd:maxLength value="2"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="City" use="optional">
      <xsd:simpleType>
        <xsd:restriction base="xsd:token">
          <xsd:maxLength value="20"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="AddrLine3" use="optional">
      <xsd:simpleType>
        <xsd:restriction base="xsd:string">
          <xsd:maxLength value="60"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="AddrLine2" use="optional">
      <xsd:simpleType>
        <xsd:restriction base="xsd:string">
          <xsd:maxLength value="60"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="AddrLine1" use="optional">
      <xsd:simpleType>
        <xsd:restriction base="xsd:string">
          <xsd:maxLength value="60"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="AlternateName.attr">
    <xsd:attribute name="TypeCode" use="required">
      <xsd:simpleType>
        <xsd:restriction base="xsd:token">
          <xsd:maxLength value="1"/>
          <xsd:pattern value="[A-Z]{1}"/>
          <xsd:enumeration value ="A"/>
          <xsd:enumeration value ="B"/>
          <xsd:enumeration value ="D"/>
          <xsd:enumeration value ="J"/>
          <xsd:enumeration value ="P"/>
          <xsd:enumeration value ="Q"/>
          <xsd:enumeration value ="R"/>
          <xsd:enumeration value ="T"/>
          <xsd:enumeration value ="U"/>
          <xsd:enumeration value ="V"/>
          <xsd:enumeration value ="X"/>
          <xsd:enumeration value ="Y"/>
          <xsd:enumeration value ="Z"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="TypeDesc" use="required">
      <xsd:simpleType>
        <xsd:restriction base ="xsd:token">
          <xsd:maxLength value="50"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="Name" use="required">
      <xsd:simpleType>
        <xsd:restriction base ="xsd:token">
          <xsd:maxLength value="100"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="DbaName.attr">
    <xsd:attribute name="Name" use="required">
      <xsd:simpleType>
        <xsd:restriction base ="xsd:token">
          <xsd:maxLength value="100"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="Status.attr">
    <xsd:attribute name="EffectiveDate" use="optional" >
      <xsd:simpleType>
        <xsd:restriction base="xsd:date">
          <xsd:maxInclusive value="9999-12-31" />
          <xsd:minInclusive value="0001-01-01" />
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="StatusDesc" use="required">
      <xsd:simpleType>
        <xsd:restriction base="xsd:token">
          <xsd:maxLength value="81"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="StatusTypeCode" use="required">
      <xsd:simpleType>
        <xsd:restriction base="xsd:token">
          <xsd:maxLength value="4"/>
          <xsd:pattern value="[a-zA-Z]{3,4}"/>
          <xsd:enumeration value ="CNDL"/>
          <xsd:enumeration value ="DEND"/>
          <xsd:enumeration value ="PEND"/>
          <xsd:enumeration value ="PREG"/>
          <xsd:enumeration value ="PSWD"/>
          <xsd:enumeration value ="RCON"/>
          <xsd:enumeration value ="REG"/>
          <xsd:enumeration value ="RVKD"/>
          <xsd:enumeration value ="SSPL"/>
          <xsd:enumeration value ="SUSP"/>
          <xsd:enumeration value ="WITH"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="CategoryTypeCode" use="required">
      <xsd:simpleType>
        <xsd:restriction base="xsd:token">
          <xsd:maxLength value="4"/>
          <xsd:pattern value="[a-zA-Z]{2,4}"/>
          <xsd:enumeration value ="MSP"/>
          <xsd:enumeration value ="SD"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
  </xsd:attributeGroup>
</xsd:schema>