<!-- (C) 2020 - FreightTrust and Clearing Corporation
   - SPDX-License-Identifier: MPL-2.0
   - SPDXVersion: SPDX-2.2
   - SPDX-FileCopyrightText
   - This Source Code Form is subject to the terms of the Mozilla Public
   - License, v. 2.0. If a copy of the MPL was not distributed with this
   - file, You can obtain one at https://mozilla.org/MPL/2.0/. -->
<xs:schema
    targetNamespace="http://www.freighttrust.com/Schemas/Native/2020/09"
    version="2.0"
    elementFormDefault="qualified"
    xmlns="http://www.freighttrust.com/Schemas/Native/2020/09"
    xmlns:uv="http://www.freighttrust.com/Schemas/Universal/2020/09"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:import schemaLocation="UniversalCommon.xsd" namespace="http://www.freighttrust.com/Schemas/Universal/2020/09" />
  <xs:element name="Native">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Header">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="OwnerCode" type="xs:string" minOccurs="0" />
              <xs:element name="EnableCodeMapping" type="xs:boolean" minOccurs="0" />
              <xs:element name="DataContext" type="uv:DataContext" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="Body">
          <xs:complexType>
            <xs:sequence>
              <xs:any minOccurs="1" maxOccurs="unbounded" processContents="skip" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="version" type="xs:token" />
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="Action">
    <xs:restriction base="xs:string">
      <xs:enumeration value="INSERT" />
      <xs:enumeration value="UPDATE" />
      <xs:enumeration value="MERGE" />
      <xs:enumeration value="DELETE" />
    </xs:restriction>
  </xs:simpleType>
  <!-- Organisation address, simplified-->
  <xs:complexType name="NativeOrganizationAddress">
    <xs:all>
      <xs:element name="OrganizationCode" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="12" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Address1" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="50" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Address2" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="50" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="City" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="25" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="CompanyName" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="100" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="AddressShortCode" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="25" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Country" minOccurs="0">
        <xs:complexType>
          <xs:all>
            <xs:element name="Code">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:maxLength value="2" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element type="xs:string" name="Name" minOccurs="0" />
          </xs:all>
        </xs:complexType>
      </xs:element>
      <xs:element name="Email" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="60" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Fax" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="20" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Phone" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="20" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Port" minOccurs="0">
        <xs:complexType>
          <xs:all>
            <xs:element name="Code">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:maxLength value="5" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element type="xs:string" name="Name" minOccurs="0" />
          </xs:all>
        </xs:complexType>
      </xs:element>
      <xs:element name="Postcode" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="10" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="State" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="25" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="AddressType" minOccurs="1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="40" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="RegistrationNumberCollection" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="RegistrationNumber" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:all>
                  <xs:element name="Type" minOccurs="1">
                    <xs:complexType>
                      <xs:all>
                        <xs:element name="Code" minOccurs="1">
                          <xs:simpleType>
                            <xs:restriction base="xs:string">
                              <xs:maxLength value="3" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                        <xs:element name="Description" minOccurs="0">
                          <xs:simpleType>
                            <xs:restriction base="xs:string">
                              <xs:maxLength value="35" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                      </xs:all>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="CountryOfIssue" minOccurs="0">
                    <xs:complexType>
                      <xs:all>
                        <xs:element name="Code" minOccurs="1">
                          <xs:simpleType>
                            <xs:restriction base="xs:string">
                              <xs:maxLength value="2" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                        <xs:element name="Name" minOccurs="0">
                          <xs:simpleType>
                            <xs:restriction base="xs:string">
                              <xs:maxLength value="35" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                      </xs:all>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="Value" minOccurs="1">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="35" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                </xs:all>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <!-- end address -->
  <xs:complexType name="CustomValues">
    <xs:sequence maxOccurs="unbounded">
      <xs:choice>
        <xs:element name="Boolean">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:boolean">
                <xs:attribute name="Name" type="xs:string" use="required" />
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="DateTime">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:dateTime">
                <xs:attribute name="Name" type="xs:string" use="required" />
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="Integer">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:integer">
                <xs:attribute name="Name" type="xs:string" use="required" />
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="String">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute name="Name" type="xs:string" use="required" />
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="emptiableDateTime">
    <xs:union memberTypes="xs:dateTime emptyString" />
  </xs:simpleType>
  <xs:simpleType name="emptyString">
    <xs:restriction base="xs:string">
      <xs:length value="0" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
