<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:gp="http://xsd.germanports.com"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://xsd.germanports.com">
  <xs:element name="GermanPortsReleaseOrder">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Interchange" type="gp:Interchange"/>
        <xs:element name="GPReleaseOrder" type="gp:GPReleaseOrder" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="an..14Type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="14"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="an..15Type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="15"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="an..17Type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="17"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="an..35Type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="35"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="BillOfLadingID">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="35"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="CallSign">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="7"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="Contact">
    <xs:sequence>
      <xs:element name="Name" type="gp:Name"/>
      <xs:element name="Telephone" type="gp:Phone" minOccurs="0"/>
      <xs:element name="Email" type="gp:Email" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ContainerDetails">
    <xs:sequence>
      <xs:element name="ContainerID" type="gp:ContainerIDType" minOccurs="0"/>
      <xs:element name="StuffingLevelCode" type="gp:StuffingLevelCode" minOccurs="0"/>
      <xs:element name="ContainerTypeISOCode" type="gp:ContainerTypeISOCode" minOccurs="0"/>
      <xs:element name="EquipmentStatusCode" type="gp:EquipmentStatusCode" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="ContainerIDType">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>
  <xs:simpleType name="ContainerTypeISOCode">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="4"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="CustomerReference">
    <xs:restriction base="gp:an..35Type">
      <xs:minLength value="1"/>
      <xs:maxLength value="35"/>
      <xs:pattern value="[A-Z0-9]+"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="DocumentCreationTimeStamp">
    <xs:restriction base="xs:dateTime"/>
  </xs:simpleType>
  <xs:simpleType name="DocumentExchangeNumber">
    <xs:restriction base="gp:an..14Type">
      <xs:minLength value="1"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Email">
    <xs:restriction base="xs:string">
      <xs:minLength value="3"/>
      <xs:maxLength value="70"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="EquipmentStatusCode">
    <xs:simpleContent>
      <xs:extension base="gp:EquipmentStatusCodeContent"/>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="EquipmentStatusCodeContent">
    <xs:restriction base="xs:string">
      <xs:enumeration value="2"/>
      <xs:enumeration value="3"/>
      <xs:enumeration value="6"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="ExpirationDate">
    <xs:restriction base="xs:date"/>
  </xs:simpleType>
  <xs:simpleType name="FacilityID">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="9"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="FacilityLocation">
    <xs:sequence>
      <xs:element name="LocationID" type="gp:LocationIDType" minOccurs="0"/>
      <xs:element name="FacilityID" type="gp:FacilityID" minOccurs="0"/>
      <xs:element name="FacilityName" type="gp:Name" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="GPReleaseOrder">
    <xs:complexContent>
      <xs:extension base="gp:Message">
        <xs:sequence>
          <xs:element name="GPReleaseOrderDetails" type="gp:ReleaseOrderDetailsType"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="HandlingType">
    <xs:simpleContent>
      <xs:extension base="gp:HandlingTypeContent"/>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="HandlingTypeContent">
    <xs:restriction base="xs:string">
      <xs:enumeration value="CH"/>
      <xs:enumeration value="MH"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="Interchange">
    <xs:sequence>
      <xs:element name="CreationTimeStamp" type="gp:DocumentCreationTimeStamp"/>
      <xs:element name="ExchangeNumber" type="gp:DocumentExchangeNumber"/>
      <xs:element name="TestIndicator" type="xs:boolean" minOccurs="0"/>
      <xs:element name="Sender" type="gp:SenderType"/>
      <xs:element name="Recipient" type="gp:RecipientType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="LocationIDType">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="5"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="Message">
    <xs:sequence>
      <xs:element name="MessageHeader" type="gp:MessageHeader"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="MessageFunctionCode">
    <xs:simpleContent>
      <xs:extension base="gp:MessagefunctionCodeContent"/>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="MessagefunctionCodeContent">
    <xs:restriction base="xs:string">
      <xs:enumeration value="CANCEL"/>
      <xs:enumeration value="CREATE"/>
      <xs:enumeration value="UPDATE"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="MessageHeader">
    <xs:sequence>
      <xs:element name="Version" type="gp:MessageVersionID" fixed="1.0.1"/>
      <xs:element name="Function" type="gp:MessageFunctionCode"/>
      <xs:element name="ReferenceNumber" type="gp:MessageReferenceNumber"/>
      <xs:element name="Sender" type="gp:SenderType"/>
      <xs:element name="Recipient" type="gp:RecipientType" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="MessageReferenceNumber">
    <xs:restriction base="gp:an..35Type"/>
  </xs:simpleType>
  <xs:simpleType name="MessageVersionID">
    <xs:restriction base="gp:an..17Type"/>
  </xs:simpleType>
  <xs:simpleType name="Name">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="35"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="ParticipantCode">
    <xs:simpleContent>
      <xs:extension base="gp:ParticipantCodeType"/>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="ParticipantCodeType">
    <xs:restriction base="gp:an..35Type">
      <xs:minLength value="1"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="PartyIDType">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="35"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Phone">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="35"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="RecipientType">
    <xs:sequence>
      <xs:element name="ParticipantCode" type="gp:ParticipantCode"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ReleaseOrderDetailsType">
    <xs:sequence>
      <xs:element name="Container" type="gp:ContainerDetails" minOccurs="0"/>
      <xs:element name="BillOfLadingID" type="gp:BillOfLadingID"/>
      <xs:element name="HandlingType" type="gp:HandlingType" minOccurs="0"/>
      <xs:choice>
        <xs:element name="GermanPortsID" type="gp:PartyIDType" minOccurs="0"/>
        <xs:element name="PartnerID" type="gp:PartyIDType" minOccurs="0"/>
      </xs:choice>
      <xs:element name="PartnerEmail" type="gp:Email" minOccurs="0"/>
      <xs:element name="CustomerReferenceID" type="gp:CustomerReference" minOccurs="0"/>
      <xs:element name="Vessel" type="gp:VesselType" minOccurs="0"/>
      <xs:element name="Terminal" type="gp:TerminalLocation"/>
      <xs:element name="ReleaseOrderReference" type="gp:ReleaseOrderReference" minOccurs="0"/>
      <xs:element name="IssueTimeStamp" type="xs:string" minOccurs="0"/>
      <xs:element name="ExpirationDate" type="gp:ExpirationDate" minOccurs="0"/>
      <xs:element name="ReturnLocationData" type="gp:ReturnLocationData" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="ReleaseOrderReference">
    <xs:restriction base="gp:an..15Type"/>
  </xs:simpleType>
  <xs:complexType name="ReturnLocationData">
    <xs:sequence>
      <xs:element name="FacilityLocation" type="gp:FacilityLocation" minOccurs="0"/>
      <xs:element name="TurnInReference" type="gp:TurnInReference" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="SenderType">
    <xs:sequence>
      <xs:element name="ParticipantCode" type="gp:ParticipantCode"/>
      <xs:element name="Contact" type="gp:Contact" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="StuffingLevelCode">
    <xs:simpleContent>
      <xs:extension base="gp:StuffingLevelCodeContent"/>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="StuffingLevelCodeContent">
    <xs:restriction base="xs:string">
      <xs:enumeration value="EMPTY"/>
      <xs:enumeration value="FULL"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="TerminalID">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="17"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="TerminalLocation">
    <xs:sequence>
      <xs:element name="LocationID" type="gp:LocationIDType" minOccurs="0"/>
      <xs:element name="TerminalID" type="gp:TerminalID"/>
      <xs:element name="TerminalName" type="gp:TerminalName" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="TerminalName">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="35"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="TransportMeansID">
    <xs:simpleContent>
      <xs:extension base="xs:string"/>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="TransportMeansName">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="35"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="TurnInReference">
    <xs:restriction base="gp:an..35Type"/>
  </xs:simpleType>
  <xs:complexType name="VesselType">
    <xs:sequence>
      <xs:element name="IMO" type="gp:TransportMeansID" minOccurs="0"/>
      <xs:element name="CallSign" type="gp:CallSign" minOccurs="0"/>
      <xs:element name="Name" type="gp:TransportMeansName" minOccurs="0"/>
      <xs:element name="VoyageNumber" type="gp:VoyageNumber" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="VoyageNumber">
    <xs:restriction base="gp:an..17Type">
      <xs:minLength value="1"/>
      <xs:maxLength value="17"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
