<!-- (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:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:include schemaLocation="Native.xsd" />
  <xs:element name="Container" type="ContainerData" />
  <xs:complexType name="ContainerData">
    <xs:all>
      <xs:element name="RefContainer" type="NativeContainer" />
    </xs:all>
    <xs:attribute name="version" type="xs:token" />
  </xs:complexType>
  <xs:complexType name="NativeContainer">
    <xs:all>
      <!-- Candidate Key: Code -->
      <xs:element name="PK" minOccurs="0" type="xs:string" />
      <xs:element name="Code" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="10" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="ShippingMode" minOccurs="0">
        <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:element name="Length" minOccurs="0" type="xs:decimal" />
      <xs:element name="Height" minOccurs="0" type="xs:decimal" />
      <xs:element name="Width" minOccurs="0" type="xs:decimal" />
      <xs:element name="ContainerType" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="3" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="ISOType" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="4" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="TareWeight" minOccurs="0" type="xs:decimal" />
      <xs:element name="GrossWeight" minOccurs="0" type="xs:decimal" />
      <xs:element name="CubicCapacity" minOccurs="0" type="xs:decimal" />
      <xs:element name="StorageClass" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="3" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="HandlingRateClass" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="4" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="FreightRateClass" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="4" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="IATARateClass" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="3" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="USContainerCode" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="2" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="TEU" minOccurs="0" type="xs:decimal" />
      <xs:element name="IsHighCube" minOccurs="0" type="xs:boolean" />
      <xs:element name="HasTynes" minOccurs="0" type="xs:boolean" />
      <xs:element name="HasVents" minOccurs="0" type="xs:boolean" />
      <xs:element name="IsIso" minOccurs="0" type="xs:boolean" />
      <xs:element name="IsActive" minOccurs="0" type="xs:boolean" />
      <xs:element name="ISOEquipmentSizeTypeCode" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="10" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="RefEquipmentCollection" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="RefEquipment" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:all>
                  <!-- Candidate Key: ShortCode + Registration -->
                  <xs:element name="PK" minOccurs="0" type="xs:string" />
                  <xs:element name="Description" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="35" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="EquipmentType" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="3" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="EquipmentGroup" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="3" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="ShortCode" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="20" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="TwoWayInfo" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="15" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="GateTransponder1" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="15" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="GateTransponder2" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="15" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="GateTransponder3" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="15" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="TollPass" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="15" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="CapacityInTEU" minOccurs="0" type="xs:short" />
                  <xs:element name="WeightCapacity" minOccurs="0" type="xs:decimal" />
                  <xs:element name="TareWeight" minOccurs="0" type="xs:decimal" />
                  <xs:element name="WeightUnit" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="2" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="CubicCapacity" minOccurs="0" type="xs:decimal" />
                  <xs:element name="CubicUnit" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="2" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="PackCapacity" minOccurs="0" type="xs:int" />
                  <xs:element name="PackType" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="3" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="PurchaseDate" minOccurs="0" type="emptiableDateTime" />
                  <xs:element name="DisposalDate" minOccurs="0" type="emptiableDateTime" />
                  <xs:element name="RegExpiry" minOccurs="0" type="emptiableDateTime" />
                  <xs:element name="RegState" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="10" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="VIN" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="20" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="AddReference1" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="15" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="AddReference2" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="15" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="GeoProviderType" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="3" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="GeoProviderID" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="64" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="AddFlag1" minOccurs="0" type="xs:boolean" />
                  <xs:element name="AddCheckBox1" minOccurs="0" type="xs:boolean" />
                  <xs:element name="IsActive" minOccurs="0" type="xs:boolean" />
                  <xs:element name="IsVehicle" minOccurs="0" type="xs:boolean" />
                  <xs:element name="Registration" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="20" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="OwnerType" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="3" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="PreferredDriver" minOccurs="0">
                    <xs:complexType>
                      <xs:all>
                        <!-- Candidate Key: Code + LoginName -->
                        <xs:element name="Code" minOccurs="0">
                          <xs:simpleType>
                            <xs:restriction base="xs:string">
                              <xs:maxLength value="3" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                        <xs:element name="LoginName" minOccurs="0">
                          <xs:simpleType>
                            <xs:restriction base="xs:string">
                              <xs:maxLength value="104" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                        <xs:element name="PK" minOccurs="0" type="xs:string" />
                      </xs:all>
                      <xs:attribute name="Action" type="Action" />
                      <xs:attribute name="TableName" type="xs:string" />
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="PackTypeExternal" minOccurs="0">
                    <xs:complexType>
                      <xs:all>
                        <!-- Candidate Key: Code -->
                        <xs:element name="Code" minOccurs="0">
                          <xs:simpleType>
                            <xs:restriction base="xs:string">
                              <xs:maxLength value="3" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                        <xs:element name="PK" minOccurs="0" type="xs:string" />
                      </xs:all>
                      <xs:attribute name="Action" type="Action" />
                      <xs:attribute name="TableName" type="xs:string" />
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="Owner" minOccurs="0">
                    <xs:complexType>
                      <xs:all>
                        <!-- Candidate Key: Code -->
                        <xs:element name="Code" minOccurs="0">
                          <xs:simpleType>
                            <xs:restriction base="xs:string">
                              <xs:maxLength value="12" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                        <xs:element name="PK" minOccurs="0" type="xs:string" />
                      </xs:all>
                      <xs:attribute name="Action" type="Action" />
                      <xs:attribute name="TableName" type="xs:string" />
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="RegistrationCountry" minOccurs="0">
                    <xs:complexType>
                      <xs:all>
                        <!-- Candidate Key: Code -->
                        <xs:element name="Code" minOccurs="0">
                          <xs:simpleType>
                            <xs:restriction base="xs:string">
                              <xs:maxLength value="2" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                        <xs:element name="PK" minOccurs="0" type="xs:string" />
                      </xs:all>
                      <xs:attribute name="Action" type="Action" />
                      <xs:attribute name="TableName" type="xs:string" />
                    </xs:complexType>
                  </xs:element>
                </xs:all>
                <xs:attribute name="Action" type="Action" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="RefContainerStockCollection" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="RefContainerStock" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:all>
                  <!-- Candidate Key: ContainerNum -->
                  <xs:element name="PK" minOccurs="0" type="xs:string" />
                  <xs:element name="ContainerNum" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="20" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="OwnerType" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="3" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="Owner" minOccurs="0">
                    <xs:complexType>
                      <xs:all>
                        <!-- Candidate Key: Code -->
                        <xs:element name="Code" minOccurs="0">
                          <xs:simpleType>
                            <xs:restriction base="xs:string">
                              <xs:maxLength value="12" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                        <xs:element name="PK" minOccurs="0" type="xs:string" />
                      </xs:all>
                      <xs:attribute name="Action" type="Action" />
                      <xs:attribute name="TableName" type="xs:string" />
                    </xs:complexType>
                  </xs:element>
                </xs:all>
                <xs:attribute name="Action" type="Action" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="RefContainerCodeMapCollection" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="RefContainerCodeMap" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:all>
                  <!-- Candidate Key: RefCountry.Code + Usage + RefContainer.PK -->
                  <xs:element name="PK" minOccurs="0" type="xs:string" />
                  <xs:element name="Usage" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="3" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="Code" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="5" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="Country" minOccurs="0">
                    <xs:complexType>
                      <xs:all>
                        <!-- Candidate Key: Code -->
                        <xs:element name="Code" minOccurs="0">
                          <xs:simpleType>
                            <xs:restriction base="xs:string">
                              <xs:maxLength value="2" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                        <xs:element name="PK" minOccurs="0" type="xs:string" />
                      </xs:all>
                      <xs:attribute name="Action" type="Action" />
                      <xs:attribute name="TableName" type="xs:string" />
                    </xs:complexType>
                  </xs:element>
                </xs:all>
                <xs:attribute name="Action" type="Action" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:all>
    <xs:attribute name="Action" type="Action" />
  </xs:complexType>
</xs:schema>
