<?xml version="1.0" encoding="UTF-8"?>
<!--
  StowCargo XML 1.0 şeması.
  İki belge türü vardır:
    <stowcargo><cekiListesi>…</cekiListesi></stowcargo>  ERP'den StowCargo'ya: yüklenecek kalemler (ve isteğe bağlı araç)
    <stowcargo><plan>…</plan></stowcargo>                StowCargo'dan ERP'ye: plan, araç araç yükleme sırası ve konumlar
  Ölçüler varsayılan olarak mm, ağırlıklar kg; ondalık ayracı nokta. Ayrıntı: docs/XML.md
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="urn:stowcargo:1"
           targetNamespace="urn:stowcargo:1"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">

  <xs:simpleType name="pozitif">
    <xs:restriction base="xs:decimal">
      <xs:minExclusive value="0"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="sifirVeUstu">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="0"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="evetHayir">
    <xs:restriction base="xs:string">
      <xs:enumeration value="evet"/>
      <xs:enumeration value="hayir"/>
      <xs:enumeration value="true"/>
      <xs:enumeration value="false"/>
      <xs:enumeration value="1"/>
      <xs:enumeration value="0"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="olcuBirimi">
    <xs:restriction base="xs:string">
      <xs:enumeration value="mm"/>
      <xs:enumeration value="cm"/>
      <xs:enumeration value="m"/>
      <xs:enumeration value="in"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="agirlikBirimi">
    <xs:restriction base="xs:string">
      <xs:enumeration value="kg"/>
      <xs:enumeration value="t"/>
      <xs:enumeration value="lb"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="yon">
    <xs:annotation><xs:documentation>dik: bu taraf yukarı · serbest: her yöne dönebilir · sabit: verilen yönde kalır (silindirde yatık)</xs:documentation></xs:annotation>
    <xs:restriction base="xs:string">
      <xs:enumeration value="dik"/>
      <xs:enumeration value="serbest"/>
      <xs:enumeration value="sabit"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="bicim">
    <xs:restriction base="xs:string">
      <xs:enumeration value="kutu"/>
      <xs:enumeration value="silindir"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="metin">
    <xs:restriction base="xs:string">
      <xs:maxLength value="120"/>
    </xs:restriction>
  </xs:simpleType>

  <!--
    Araç içi engel (yalnız ölçüleriyle verilen araçta):
      davlumbaz: iki yanda tekerlek davlumbazı (x önden, boy, en = her yanın içe taşması, yukseklik)
      basamak:   önde ya da arkada yüksek taban (konum on|arka, boy, yukseklik)
      tavan:     tavandan sarkan çıkıntı (x, boy, yukseklik = sarkma)
      kutu:      serbest engel (x, y, z, boy, en, yukseklik, ustuneKonur)
  -->
  <xs:complexType name="engel">
    <xs:attribute name="tur" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="davlumbaz"/>
          <xs:enumeration value="basamak"/>
          <xs:enumeration value="tavan"/>
          <xs:enumeration value="kutu"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="konum">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="on"/>
          <xs:enumeration value="arka"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="x" type="sifirVeUstu"/>
    <xs:attribute name="y" type="sifirVeUstu"/>
    <xs:attribute name="z" type="sifirVeUstu"/>
    <xs:attribute name="boy" type="pozitif"/>
    <xs:attribute name="en" type="pozitif"/>
    <xs:attribute name="yukseklik" type="pozitif"/>
    <xs:attribute name="ustuneKonur" type="evetHayir"/>
  </xs:complexType>

  <!-- Araç: bilinen araç kodu (ör. tir-tenteli, 40hc) ya da iç ölçüler -->
  <xs:complexType name="arac">
    <xs:sequence>
      <xs:element name="engel" type="engel" minOccurs="0" maxOccurs="50"/>
    </xs:sequence>
    <xs:attribute name="kod" type="xs:string"/>
    <xs:attribute name="ad" type="metin"/>
    <xs:attribute name="boy" type="pozitif"/>
    <xs:attribute name="en" type="pozitif"/>
    <xs:attribute name="yukseklik" type="pozitif"/>
    <xs:attribute name="azamiYuk" type="pozitif"/>
  </xs:complexType>

  <!-- Kalem: kutu için boy/en/yukseklik, silindir için boy (eksen) + cap -->
  <xs:complexType name="kalem">
    <xs:attribute name="no" type="xs:positiveInteger"/>
    <xs:attribute name="kod" type="metin"/>
    <xs:attribute name="ad" type="metin"/>
    <xs:attribute name="bicim" type="bicim" default="kutu"/>
    <xs:attribute name="boy" type="pozitif" use="required"/>
    <xs:attribute name="en" type="pozitif"/>
    <xs:attribute name="yukseklik" type="pozitif"/>
    <xs:attribute name="cap" type="pozitif"/>
    <xs:attribute name="agirlik" type="sifirVeUstu"/>
    <xs:attribute name="toplamAgirlik" type="sifirVeUstu"/>
    <xs:attribute name="adet" type="xs:positiveInteger" default="1"/>
    <xs:attribute name="yon" type="yon" default="dik"/>
    <xs:attribute name="istiflenebilir" type="evetHayir" default="evet"/>
    <xs:attribute name="ustYuk" type="sifirVeUstu"/>
    <xs:attribute name="katSiniri" type="xs:positiveInteger"/>
    <xs:attribute name="durak" type="xs:positiveInteger" default="1"/>
    <xs:attribute name="siparis" type="metin"/>
    <xs:attribute name="sinif" type="metin"/>
    <xs:attribute name="paletle" type="evetHayir" default="hayir"/>
    <xs:attribute name="yalnizZemin" type="evetHayir" default="hayir"/>
    <xs:attribute name="dolgu" type="evetHayir" default="hayir"/>
  </xs:complexType>

  <xs:complexType name="icerik">
    <xs:attribute name="kalem" type="xs:positiveInteger" use="required"/>
    <xs:attribute name="adet" type="xs:positiveInteger" use="required"/>
  </xs:complexType>

  <!-- Yerleşim: araçtaki konum. x ön duvardan kapıya, y sağ duvardan, z zeminden (mm). -->
  <xs:complexType name="yerlesim">
    <xs:sequence>
      <xs:element name="icerik" type="icerik" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="sira" type="xs:positiveInteger" use="required"/>
    <xs:attribute name="kalem" type="xs:positiveInteger"/>
    <xs:attribute name="palet" type="xs:positiveInteger"/>
    <xs:attribute name="x" type="sifirVeUstu" use="required"/>
    <xs:attribute name="y" type="sifirVeUstu" use="required"/>
    <xs:attribute name="z" type="sifirVeUstu" use="required"/>
    <xs:attribute name="boy" type="pozitif" use="required"/>
    <xs:attribute name="en" type="pozitif" use="required"/>
    <xs:attribute name="yukseklik" type="pozitif" use="required"/>
    <xs:attribute name="agirlik" type="sifirVeUstu"/>
    <xs:attribute name="durak" type="xs:positiveInteger"/>
  </xs:complexType>

  <xs:complexType name="yukleme">
    <xs:sequence>
      <xs:element name="yerlesim" type="yerlesim" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="arac" type="xs:positiveInteger" use="required"/>
    <xs:attribute name="hacimDoluluk" type="sifirVeUstu"/>
    <xs:attribute name="agirlikDoluluk" type="sifirVeUstu"/>
    <xs:attribute name="agirlik" type="sifirVeUstu"/>
    <xs:attribute name="yukBoyu" type="sifirVeUstu"/>
    <xs:attribute name="agirlikMerkeziX" type="xs:decimal"/>
    <xs:attribute name="agirlikMerkeziY" type="xs:decimal"/>
    <xs:attribute name="agirlikMerkeziZ" type="xs:decimal"/>
  </xs:complexType>

  <xs:complexType name="yerlesmeyen">
    <xs:attribute name="kalem" type="xs:positiveInteger" use="required"/>
    <xs:attribute name="adet" type="xs:positiveInteger" use="required"/>
    <xs:attribute name="neden">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="sigmiyor"/>
          <xs:enumeration value="agir"/>
          <xs:enumeration value="kapasite"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>

  <xs:complexType name="sonuc">
    <xs:sequence>
      <xs:element name="yukleme" type="yukleme" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="yerlesmeyen" type="yerlesmeyen" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="aracSayisi" type="xs:nonNegativeInteger"/>
    <xs:attribute name="yerlesen" type="xs:nonNegativeInteger"/>
    <xs:attribute name="toplam" type="xs:nonNegativeInteger"/>
    <xs:attribute name="agirlik" type="sifirVeUstu"/>
  </xs:complexType>

  <xs:complexType name="kalemler">
    <xs:sequence>
      <xs:element name="kalem" type="kalem" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="olcuBirimi" type="olcuBirimi" default="mm"/>
    <xs:attribute name="agirlikBirimi" type="agirlikBirimi" default="kg"/>
  </xs:complexType>

  <xs:complexType name="cekiListesi">
    <xs:sequence>
      <xs:element name="arac" type="arac" minOccurs="0"/>
      <xs:element name="kalem" type="kalem" maxOccurs="5000"/>
    </xs:sequence>
    <xs:attribute name="ad" type="metin"/>
    <xs:attribute name="ref" type="metin"/>
    <xs:attribute name="alici" type="metin"/>
    <xs:attribute name="olcuBirimi" type="olcuBirimi" default="mm"/>
    <xs:attribute name="agirlikBirimi" type="agirlikBirimi" default="kg"/>
  </xs:complexType>

  <xs:complexType name="plan">
    <xs:sequence>
      <xs:element name="arac" type="arac"/>
      <xs:element name="kalemler" type="kalemler"/>
      <xs:element name="sonuc" type="sonuc" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="ad" type="metin"/>
    <xs:attribute name="ref" type="metin"/>
    <xs:attribute name="alici" type="metin"/>
    <xs:attribute name="id" type="xs:string"/>
    <xs:attribute name="planSurumu" type="xs:positiveInteger"/>
    <xs:attribute name="arsiv" type="xs:anyURI"/>
    <xs:attribute name="oncelik">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="bosluk"/>
          <xs:enumeration value="kurallar"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="stowcargo">
    <xs:complexType>
      <xs:choice>
        <xs:element name="cekiListesi" type="cekiListesi"/>
        <xs:element name="plan" type="plan"/>
      </xs:choice>
      <xs:attribute name="surum" type="xs:string" use="required"/>
      <xs:attribute name="olusturma" type="xs:dateTime"/>
      <xs:attribute name="uygulama" type="xs:string"/>
    </xs:complexType>
  </xs:element>
</xs:schema>
