<?xml version="1.0" encoding="UTF-8"?>

<!--
  Schema for data exchanged between Walmart and its partners.
  Copyright 2015 Walmart Corporation. All rights reserved.
-->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns="http://walmart.com/"
  targetNamespace="http://walmart.com/"
  elementFormDefault="qualified"
  version="2.0">

  <xsd:include schemaLocation="Errors.xsd" />

  <xsd:simpleType name="FeedStatus">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="RECEIVED" />
      <xsd:enumeration value="INPROGRESS" />
      <xsd:enumeration value="PROCESSED" />
      <xsd:enumeration value="ERROR" />
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="ItemStatus">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="INPROGRESS" />
      <xsd:enumeration value="SUCCESS" />
      <xsd:enumeration value="DATA_ERROR" />
      <xsd:enumeration value="SYSTEM_ERROR" />
      <xsd:enumeration value="TIMEOUT_ERROR" />
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="ErrorType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="DATA_ERROR" />
      <xsd:enumeration value="SYSTEM_ERROR" />
      <xsd:enumeration value="TIMEOUT_ERROR" />
      <xsd:enumeration value="WARNING" />
      <xsd:enumeration value="INTERNAL_DATA_ERROR" />
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:complexType name="IngestionError">
    <xsd:sequence>
      <xsd:element name="type" type="ErrorType" minOccurs="1">
        <xsd:annotation>
          <xsd:documentation>
            error type
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element name="code" type="xsd:string" minOccurs="1">
        <xsd:annotation>
          <xsd:documentation>
            error code
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element name="field" type="xsd:string" minOccurs="0">
        <xsd:annotation>
          <xsd:documentation>
            field name
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element name="description" type="xsd:string" minOccurs="0">
        <xsd:annotation>
          <xsd:documentation>
            textual description
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="gatewayBaseEntity">
    <xsd:sequence>
      <xsd:element name="errors" minOccurs="0">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="error" type="gatewayError" minOccurs="0" maxOccurs="unbounded"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="gatewayError">
    <xsd:complexContent>
      <xsd:extension base="error">
        <xsd:sequence>
          <xsd:element name="component" type="xsd:string" minOccurs="0"/>
          <xsd:element name="type" type="xsd:string" minOccurs="0"/>
          <xsd:element name="serviceName" type="xsd:string" minOccurs="0"/>
          <xsd:element name="stacktrace" type="xsd:string" minOccurs="0"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="NameValueAttributes">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string" minOccurs="1">
        <xsd:annotation>
          <xsd:documentation>
            name
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element name="type" type="ValueType" minOccurs="1">
        <xsd:annotation>
          <xsd:documentation>
            type
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element name="value" type="AttributeValue" minOccurs="1" maxOccurs="unbounded">
        <xsd:annotation>
          <xsd:documentation>
            Set of values for the attribute
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="AttributeValue">
    <xsd:sequence>
      <xsd:element name="value" type="xsd:string" minOccurs="1">
        <xsd:annotation>
          <xsd:documentation>
            value expressed in string
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element name="group" type="xsd:string" minOccurs="0">
        <xsd:annotation>
          <xsd:documentation>
            list of values
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element name="rank" type="xsd:int" minOccurs="0">
        <xsd:annotation>
          <xsd:documentation>
            list of values
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:simpleType name="ValueType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="LOCALIZABLE_TEXT" />
      <xsd:enumeration value="STRING" />
      <xsd:enumeration value="BOOLEAN" />
      <xsd:enumeration value="INTEGER" />
      <xsd:enumeration value="DECIMAL" />
      <xsd:enumeration value="DATE" />
      <xsd:enumeration value="TIMESTAMP" />
    </xsd:restriction>
  </xsd:simpleType>

</xsd:schema>
