<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <!-- Period -->
  <xs:simpleType name="Period">
    <xs:restriction base="xs:integer">
      <xs:pattern value="((199|20[0-9])[0-9])((0[1-9]|1[0-2])(0[1-9]|[1-2][0-9])|((01|03|04|05|06|07|08|09|11|12)30|(01|03|05|07|08|10|12)31)?|4([1-4])|2([1-2]))?"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- SubmissionType -->
  <xs:simpleType name="SubmissionType">
    <xs:restriction base="xs:string">
      <xs:pattern value="[Tt]est|[Nn]ormal"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- Template -->
  <xs:complexType name="Template">
    <xs:sequence>
      <xs:element name="Group" type="Group" maxOccurs="500"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:string" use="required"/>
    <xs:attribute name="instanceKey" type="xs:string"/>
  </xs:complexType>
  <!-- Group -->
  <xs:complexType name="Group">
    <xs:sequence>
      <xs:element name="Error" type="ControlError" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="Data" type="Data" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:string" use="required"/>
  </xs:complexType>
  <!-- ControlError -->
  <xs:complexType name="ControlError">
    <xs:attribute name="controlId" type="xs:string" use="required"/>
    <xs:attribute name="controlGroupId" type="xs:string" use="required"/>
    <xs:attribute name="details" type="xs:string" use="required"/>
  </xs:complexType>
  <!-- Data -->
  <xs:complexType name="Data">
    <xs:sequence>
      <xs:element name="Error" type="ControlError"/>
    </xs:sequence>
    <xs:anyAttribute processContents="lax"/>
  </xs:complexType>
  <!-- Report -->
  <xs:complexType name="Report">
    <xs:sequence>
      <xs:element name="Template" type="Template" minOccurs="0" maxOccurs="500"/>
    </xs:sequence>
    <xs:attribute name="type" type="xs:string" use="required"/>
    <xs:attribute name="reporterKey" type="xs:string" use="required"/>
    <xs:attribute name="period" type="Period" use="required"/>
    <xs:attribute name="revisionNumber" type="xs:int" use="required"/>
    <xs:attribute name="submissionType" type="SubmissionType"/>
  </xs:complexType>
  <!-- Result Type -->
  <xs:complexType name="Result">
    <xs:sequence>
      <xs:element name="Report" type="Report"/>
    </xs:sequence>
  </xs:complexType>
  <!-- Root -->
  <xs:element name="Result" type="Result"/>
</xs:schema>
