<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.egis-online.de/EBC/schema/ShoppingCartQueryResponse"
    xmlns="http://www.egis-online.de/EBC/schema/ShoppingCartQueryResponse"
    elementFormDefault="qualified">
    <xs:element name="ShoppingCartQueryResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="TransactionHeader"/>
                <xs:element ref="ShoppingCart" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="TransactionHeader">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="VersionId"/>
                <xs:element ref="GenerationDateTime"/>
                <xs:element maxOccurs="1" minOccurs="0" ref="Exception"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="VersionId" type="xs:decimal"/>
    <xs:element name="GenerationDateTime" type="xs:dateTime"/>

    <xs:element name="Exception">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ErrorNumber"/>
                <xs:element ref="ErrorMessage"/>
                <xs:element ref="ErrorDescription"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="ErrorNumber" type="xs:int"/>
    <xs:element name="ErrorMessage" type="xs:string"/>
    <xs:element name="ErrorDescription" nillable="true" type="xs:string"/>

    <xs:element name="ShoppingCart">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Header"/>
                <xs:element ref="Body"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="Header">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ShoppingCartIdentification"/>
				<xs:element ref="ShoppingCartSummary"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="ShoppingCartIdentification">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ShoppingCartIdentifier"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="ShoppingCartIdentifier">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ShoppingCartName"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="ShoppingCartName">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="35"></xs:maxLength>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>

    <xs:element name="Body">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="DistributorProductItem"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="DistributorProductItem">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="DistributorDescription"/>
                <xs:element ref="ProductIdentification"/>
                <xs:element ref="Quantity"/>
                <xs:element ref="UnitPrice"/>
                <xs:element ref="EOL"/>
                <xs:element ref="Comment"/>
                <xs:element ref="ProductTypes" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
    <xs:element default="false" name="EOL" type="xs:boolean"/>

    <xs:element name="DistributorDescription">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="DistributorName"/>
                <xs:element ref="ProprietaryDistributorIdentifier"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="DistributorName" type="xs:string"/>
    <xs:element name="ProprietaryDistributorIdentifier" type="xs:string"/>

    <xs:element name="ProductIdentification">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ProprietaryProductIdentifier"/>
                <xs:element ref="DistributorProductIdentifier"/>
                <xs:element ref="ManufacturerProductIdentifier"/>
                <xs:element ref="GlobalProductIdentifier"/>
                <xs:element ref="ProductDescription"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="ProprietaryProductIdentifier">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ProprietaryProductNumber"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="DistributorProductIdentifier">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="DistributorProductNumber"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="ManufacturerProductIdentifier">
        <xs:complexType>
            <xs:sequence>
				<xs:element ref="ManufacturerName"/>
                <xs:element ref="ManufacturerProductNumber"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="GlobalProductIdentifier">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="GlobalProductNumber"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="ProductDescription">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="100"></xs:maxLength>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>

    <xs:element name="ProprietaryProductNumber" nillable="true" type="xs:string"/>
    <xs:element name="DistributorProductNumber">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="20"></xs:maxLength>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>

	<xs:element name="ManufacturerName" nillable="true">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:string">
                    <xs:attribute name="id" type="xs:positiveInteger"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
	</xs:element>
    <xs:element name="ManufacturerProductNumber" nillable="true">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="25"></xs:maxLength>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>

    <xs:element name="GlobalProductNumber" nillable="true">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="15"></xs:maxLength>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>

    <xs:element name="Quantity">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="PositionQuantity"/>
                <xs:element ref="AvailableQuantity"/>
                <xs:element ref="DateTime"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="PositionQuantity" type="xs:int"/>
    <xs:element name="AvailableQuantity" type="xs:int"/>

    <xs:element name="UnitPrice">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="PurchasePrice"/>
                <xs:element ref="RecommendSellingPrice"/>
                <xs:element ref="CurrencyCode"/>
                <xs:element ref="DateTime"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element default="0" name="PurchasePrice" nillable="true"
              type="xs:decimal">
    </xs:element>

    <xs:element name="RecommendSellingPrice" nillable="true" type="xs:decimal"/>
    <xs:element name="CurrencyCode" nillable="true" type="xs:string"/>
    <xs:element name="DateTime" nillable="true" type="xs:dateTime"/>

    <xs:element name="Comment">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="AdditionalText"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="AdditionalText" nillable="true">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="200"></xs:maxLength>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="ProductTypes">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ProductType" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ProductType">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:string">
                    <xs:attribute name="code" type="xs:string"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
	<xs:element name="ShoppingCartSummary">
		<xs:complexType>
			<xs:sequence>
                <xs:element ref="Positions"/>
                <xs:element ref="AdditionalCharges"/>
                <xs:element ref="Total"/>
                <xs:element ref="DistributorSummary" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
    <xs:element name="Positions" type="xs:positiveInteger"/>
    <xs:element name="AdditionalCharges" type="xs:decimal"/>
    <xs:element name="Total" type="xs:decimal"/>
    <xs:element name="DistributorSummary">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="DistributorDescription"/>
                <xs:element ref="Limit"/>
                <xs:element ref="Positions"/>
                <xs:element ref="ProductTotal"/>
                <xs:element ref="FreightAbsorptionLimit"/>
                <xs:element ref="FreightCharge"/>
                <xs:element ref="MinimumOrderValue"/>
                <xs:element ref="SmallQuantitiesMarkup"/>
                <xs:element ref="FurtherMarkups"/>
                <xs:element ref="DistributorTotal"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Limit" type="CurrencyType" nillable="true"/>
    <xs:element name="ProductTotal" type="CurrencyType"/>
    <xs:element name="FreightAbsorptionLimit" type="FreightChargeType"/>
    <xs:element name="FreightCharge" type="FreightChargeType"/>
    <xs:element name="MinimumOrderValue" type="CurrencyType" nillable="true"/>
    <xs:element name="SmallQuantitiesMarkup" type="CurrencyType" nillable="true"/>
    <xs:element name="FurtherMarkups" type="FreightChargeType"/>
    <xs:element name="DistributorTotal" type="FreightChargeType"/>
    <xs:complexType name="FreightChargeType">
        <xs:sequence>
            <xs:element ref="Online"/>
            <xs:element ref="Offline"/>
            <xs:element ref="CurrencyCode" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="Online" type="xs:decimal" nillable="true"/>
    <xs:element name="Offline" type="xs:decimal" nillable="true"/>
    <xs:complexType name="CurrencyType">
        <xs:simpleContent>
            <xs:extension base="xs:decimal">
                <xs:attribute name="CurrencyCode" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:schema>