<!-- (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
    xmlns="http://www.freighttrust.com/Schemas/Universal/2020/09"
    xmlns:b="http://schemas.microsoft.com/BizTalk/2003"
    targetNamespace="http://www.freighttrust.com/Schemas/Universal/2020/09"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified"
>
  <xs:element name="UniversalInterchange">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Header">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="SenderID" type="xs:string" />
              <xs:element name="RecipientID" type="xs:string" />
              <xs:element name="Acknowledgement" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Required">
                      <xs:simpleType>
                        <xs:restriction base="xs:string">
                          <xs:enumeration value="OnAll" />
                          <xs:enumeration value="OnError" />
                          <xs:enumeration value="OnSuccess" />
                        </xs:restriction>
                      </xs:simpleType>
                    </xs:element>
                    <xs:element name="Channel">
                      <xs:simpleType>
                        <xs:restriction base="xs:string">
                          <xs:enumeration value="eHub" />
                          <xs:enumeration value="eAdaptor" />
                        </xs:restriction>
                      </xs:simpleType>
                    </xs:element>
                    <xs:element name="RecipientID" type="xs:string" />
                    <xs:element name="ContextCollection" minOccurs="0">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="Context" maxOccurs="unbounded">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="Type" type="xs:string" />
                                <xs:element name="Value" type="xs:string" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="DeliveryMetadata" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="ValueCollection" minOccurs="0">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="Value" maxOccurs="unbounded">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="Name" type="xs:string" />
                                <xs:element name="Type">
                                  <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                      <xs:enumeration value="String" />
                                      <xs:enumeration value="DateTime" />
                                      <xs:enumeration value="Integer" />
                                      <xs:enumeration value="Decimal" />
                                      <xs:enumeration value="Byte" />
                                      <xs:enumeration value="Boolean" />
                                      <xs:enumeration value="Short" />
                                      <xs:enumeration value="DateTimeOffset" />
                                      <xs:enumeration value="Geography" />
                                      <xs:enumeration value="Base64Binary" />
                                    </xs:restriction>
                                  </xs:simpleType>
                                </xs:element>
                                <xs:element name="Data" type="xs:string" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="Body">
          <xs:complexType>
            <xs:sequence>
              <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="version" type="xs:token" />
    </xs:complexType>
  </xs:element>
</xs:schema>
