<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.ice.gov/xmlschema/sevisbatch/Common" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:common="http://www.ice.gov/xmlschema/sevisbatch/Common" xmlns:table="http://www.ice.gov/xmlschema/sevisbatch/Table" elementFormDefault="unqualified" attributeFormDefault="unqualified" version="6.0">
  <xs:import namespace="http://www.ice.gov/xmlschema/sevisbatch/Table" schemaLocation="SEVISTable.xsd"/>
  <xs:simpleType name="BatchIDType">
    <xs:annotation>
      <xs:documentation>Unique 14-character Batch ID</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:length value="14"/>
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="NameNullable">
    <xs:union memberTypes="table:emptyStringType common:Name"/>
  </xs:simpleType>
  <xs:simpleType name="Name">
    <xs:restriction base="xs:string">
      <xs:maxLength value="60"/>
      <xs:minLength value="1"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="OrganizationIDType">
    <xs:annotation>
      <xs:documentation>SchoolCode or ProgramNumber</xs:documentation>
    </xs:annotation>
    <xs:union memberTypes="common:ProgramNumberType common:SchoolCodeType"/>
  </xs:simpleType>
  <xs:simpleType name="ProgramNumberType">
    <xs:annotation>
      <xs:documentation>Global Program Number type</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="(P-[1-4]-\d{5})|(G-[1-7]-\d{5})"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="RemarksNoWSType">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="500"/>
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="RemarksNullableType">
    <xs:union memberTypes="table:emptyStringType common:RemarksType"/>
  </xs:simpleType>
  <xs:simpleType name="RemarksType">
    <xs:restriction base="xs:string">
      <xs:maxLength value="500"/>
      <xs:whiteSpace value="preserve"/>
      <xs:minLength value="1"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="RemarksNullable250Type">
    <xs:union memberTypes="table:emptyStringType common:Remarks250Type"/>
  </xs:simpleType>
  <xs:simpleType name="Remarks250Type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="250"/>
      <xs:whiteSpace value="preserve"/>
      <xs:minLength value="1"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="RequestID">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="20"/>
      <xs:whiteSpace value="collapse"/>
      <xs:pattern value="[^:/\\]*"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="ResultCodeType">
    <xs:restriction base="xs:string">
      <xs:pattern value="S\d{4}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SchoolCodeType">
    <xs:annotation>
      <xs:documentation>Global School Code</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Z]{3}214F\d{8}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SevisIDType">
    <xs:restriction base="xs:string">
      <xs:pattern value="N\d{10}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="UserDefinedAType">
    <xs:annotation>
      <xs:documentation>UserDefinedA</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:maxLength value="10"/>
      <xs:whiteSpace value="preserve"/>
      <xs:minLength value="0"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="UserDefinedBType">
    <xs:annotation>
      <xs:documentation>UserDefinedB</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:maxLength value="14"/>
      <xs:whiteSpace value="preserve"/>
      <xs:minLength value="0"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="UserIdType">
    <xs:annotation>
      <xs:documentation>Global user ID</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:length value="10"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="StudentInternType">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="100"/>
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="BatchHeaderType">
    <xs:annotation>
      <xs:documentation>Header information used by SEVIS system to identify Batch ID and Org ID (school or program)</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="BatchID" type="common:BatchIDType">
        <xs:annotation>
          <xs:documentation>Unique Batch ID</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="OrgID" type="common:OrganizationIDType">
        <xs:annotation>
          <xs:documentation>Unique school or program identifier assigned by SEVIS</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DriverLicenseNullableType">
    <xs:sequence>
      <xs:element name="Number" minOccurs="0">
        <xs:annotation>
          <xs:documentation>maxLen = 30</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="30"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="State" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Two char state code</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:union memberTypes="table:emptyEnumerationType table:StateCodeType"/>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DriverLicenseType">
    <xs:sequence>
      <xs:element name="Number" minOccurs="0">
        <xs:annotation>
          <xs:documentation>maxLen = 30</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="30"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="State" type="table:StateCodeType" minOccurs="0">
        <xs:annotation>
          <xs:documentation>Two char state code</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="EmptyType">
    <xs:annotation>
      <xs:documentation>EMPTY event tag</xs:documentation>
    </xs:annotation>
  </xs:complexType>
  <xs:complexType name="ForeignAddrNullableType">
    <xs:annotation>
      <xs:documentation>Global foreign address information</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Address1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Address2" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="City" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Province" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="30"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="CountryCode" type="table:CntryCodeWithoutType"/>
      <xs:element name="PostalCode" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="20"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ForeignAddrType">
    <xs:annotation>
      <xs:documentation>Global foreign address information</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Address1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Address2" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="City" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Province" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="30"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="CountryCode" type="table:CntryCodeWithoutType"/>
      <xs:element name="PostalCode" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="20"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="NameNullableType">
    <xs:sequence>
      <xs:element name="LastName">
        <xs:annotation>
          <xs:documentation>Family name</xs:documentation>
          <xs:documentation>No number ( 0 ~ 9 ) allowed</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="40"/>
            <xs:minLength value="1"/>
            <xs:pattern value="\D+"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="FirstName" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="40"/>
            <xs:minLength value="0"/>
            <xs:pattern value="\D*"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="MiddleName" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="40"/>
            <xs:whiteSpace value="preserve"/>
            <xs:minLength value="0"/>
            <xs:pattern value="\D*"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Suffix" minOccurs="0">
        <xs:simpleType>
          <xs:union memberTypes="table:emptyEnumerationType table:NameSuffixCodeType"/>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="NameType">
    <xs:sequence>
      <xs:element name="LastName">
        <xs:annotation>
          <xs:documentation>Family name</xs:documentation>
          <xs:documentation>No number ( 0 ~ 9 ) allowed</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="40"/>
            <xs:minLength value="1"/>
            <xs:pattern value="\D+"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="FirstName" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="40"/>
            <xs:minLength value="1"/>
            <xs:pattern value="\D+"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="MiddleName" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="40"/>
            <xs:whiteSpace value="preserve"/>
            <xs:minLength value="1"/>
            <xs:pattern value="\D+"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Suffix" type="table:NameSuffixCodeType" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="TravelNullableType">
    <xs:annotation>
      <xs:documentation>Travel information type Nullable</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="PassportNumber" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="25"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="PassportIssuingCntry" type="table:CntryCodeWithCloseDateNullableType" minOccurs="0"/>
      <xs:element name="PassportExpDate" type="table:DateNullableType" minOccurs="0"/>
      <xs:element name="VisaNumber" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="25"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="VisaIssuingCntry" type="table:VisaPostCodeNullableType" minOccurs="0"/>
      <xs:element name="VisaIssueDate" type="table:DateNullableType" minOccurs="0"/>
      <xs:element name="VisaExpDate" type="table:DateNullableType" minOccurs="0"/>
      <xs:element name="AdmissionNumber" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="11"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="PortOfEntry" type="table:PoeCodeNullableType" minOccurs="0"/>
      <xs:element name="DateOfEntry" type="table:DateNullableType" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="TravelType">
    <xs:annotation>
      <xs:documentation>Travel information type</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="PassportNumber" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="25"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="PassportIssuingCntry" type="table:CntryCodeWithCloseDateType" minOccurs="0"/>
      <xs:element name="PassportExpDate" type="table:DateType" minOccurs="0"/>
      <xs:element name="VisaNumber" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="25"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="VisaIssuingCntry" type="table:VisaPostCodeType" minOccurs="0"/>
      <xs:element name="VisaIssueDate" type="table:DateType" minOccurs="0"/>
      <xs:element name="VisaExpDate" type="table:DateType" minOccurs="0"/>
      <xs:element name="AdmissionNumber" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="11"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="PortOfEntry" type="table:PoeCodeType" minOccurs="0"/>
      <xs:element name="DateOfEntry" type="table:DateType" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="SEVISResponse">
    <xs:annotation>
      <xs:documentation>Standard response for upload and download</xs:documentation>
    </xs:annotation>
    <xs:attribute name="orgID" type="common:OrganizationIDType" use="required"/>
    <xs:attribute name="batchID" type="common:BatchIDType" use="required"/>
    <xs:attribute name="resultCode" type="common:ResultCodeType" use="required"/>
    <xs:attribute name="dateTimeStamp" type="table:DateTimeType" use="required"/>
  </xs:complexType>
  <xs:complexType name="USAddressNullableType">
    <xs:sequence>
      <xs:element name="Address1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Address2" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="City">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="State" type="table:StateCodeType"/>
      <xs:element name="PostalCode" type="table:USPostalType">
        <xs:annotation>
          <xs:documentation>5 digit postal code</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="PostalRoutingCode" type="table:USPostalRoutingNullableType" minOccurs="0">
        <xs:annotation>
          <xs:documentation>4 digit postal routing code</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="USAddressCommuterNullableType">
    <xs:sequence>
      <xs:element name="Address1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Address2" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="City">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="State" type="table:StateCodeNullableType"/>
      <xs:element name="PostalCode" type="table:USPostalTypeNullableType">
        <xs:annotation>
          <xs:documentation>5 digit postal code</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="PostalRoutingCode" type="table:USPostalRoutingNullableType" minOccurs="0">
        <xs:annotation>
          <xs:documentation>4 digit postal routing code</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="USAddressOptionalType">
    <xs:annotation>
      <xs:documentation>Edit individual address elements</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Address1" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Address2" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="City" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="State" type="table:StateCodeNullableType" minOccurs="0"/>
      <xs:element name="PostalCode" type="table:USPostalTypeNullableType" minOccurs="0">
        <xs:annotation>
          <xs:documentation>5 digit postal code</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="PostalRoutingCode" type="table:USPostalRoutingNullableType" minOccurs="0">
        <xs:annotation>
          <xs:documentation>4 digit postal routing code</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="USAddressType">
    <xs:sequence>
      <xs:element name="Address1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Address2" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="City">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="preserve"/>
            <xs:maxLength value="60"/>
            <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="State" type="table:StateCodeType"/>
      <xs:element name="PostalCode" type="table:USPostalType">
        <xs:annotation>
          <xs:documentation>5 digit postal code</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="PostalRoutingCode" type="table:USPostalRoutingType" minOccurs="0">
        <xs:annotation>
          <xs:documentation>4 digit postal routing code</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:schema>
