﻿<?xml version="1.0" encoding="utf-8"?>
<xsd:schema id="IMDEMessages" targetNamespace="https://imde.io/schema/imdemessages" elementFormDefault="qualified" xmlns="https://imde.io/schema/imdemessages" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:code="https://imde.io/schema/azlon/1.0/codelists" xmlns:azlonkeyinfo="https://imde.io/schema/azlon/1.0/keyinfo" xmlns:azlonfoodingredientstatements="https://imde.io/schema/azlon/1.0/foodingredientstatements" xmlns:azlonfoodallergens="https://imde.io/schema/azlon/1.0/foodallergens" xmlns:azlonfoodnutrients="https://imde.io/schema/azlon/1.0/foodnutrients" xmlns:azlonmeasurements="https://imde.io/schema/azlon/1.0/measurements" xmlns:azlonattributes="https://imde.io/schema/azlon/1.0/attributes" xmlns:azlontrade="https://imde.io/schema/azlon/1.0/trade" xmlns:azlonlifecycledata="https://imde.io/schema/azlon/1.0/lifecycledata">
	
	<xsd:import schemaLocation="https://imde.io/schema/azlon/1.0/keyinfo.xsd" namespace="https://imde.io/schema/azlon/1.0/keyinfo"/>
	<xsd:import schemaLocation="https://imde.io/schema/azlon/1.0/foodingredientstatements.xsd" namespace="https://imde.io/schema/azlon/1.0/foodingredientstatements"/>
	<xsd:import schemaLocation="https://imde.io/schema/azlon/1.0/foodallergens.xsd" namespace="https://imde.io/schema/azlon/1.0/foodallergens"/>
	<xsd:import schemaLocation="https://imde.io/schema/azlon/1.0/foodnutrients.xsd" namespace="https://imde.io/schema/azlon/1.0/foodnutrients"/>
	<xsd:import schemaLocation="https://imde.io/schema/azlon/1.0/measurements.xsd" namespace="https://imde.io/schema/azlon/1.0/measurements"/>
	<xsd:import schemaLocation="https://imde.io/schema/azlon/1.0/attributes.xsd" namespace="https://imde.io/schema/azlon/1.0/attributes"/>
	<xsd:import schemaLocation="https://imde.io/schema/azlon/1.0/trade.xsd" namespace="https://imde.io/schema/azlon/1.0/trade"/>
	<xsd:import schemaLocation="https://imde.io/schema/azlon/1.0/lifecycledata.xsd" namespace="https://imde.io/schema/azlon/1.0/lifecycledata"/>	
	<xsd:import schemaLocation="https://imde.io/schema/azlon/1.0/codelists/partyIdentifierType.xsd" namespace="https://imde.io/schema/azlon/1.0/codelists"/>
	<xsd:import schemaLocation="https://imde.io/schema/azlon/1.0/codelists/dataContainerType.xsd" namespace="https://imde.io/schema/azlon/1.0/codelists"/>
	<xsd:import schemaLocation="https://imde.io/schema/azlon/1.0/codelists/materialType.xsd" namespace="https://imde.io/schema/azlon/1.0/codelists"/>
	<xsd:import schemaLocation="https://imde.io/schema/azlon/1.0/codelists/identifierType.xsd" namespace="https://imde.io/schema/azlon/1.0/codelists"/>
	<xsd:element name="IMDEMessages">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="IMDEMessage" minOccurs="1" maxOccurs="unbounded">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element minOccurs="1" maxOccurs="1" name="Header">
								<xsd:complexType>
									<xsd:all>
										<xsd:element minOccurs="1" maxOccurs="1" name="DataSender">
											<xsd:complexType>
												<xsd:all>
													<xsd:element name="Identifiers" type="PartyIdentifiersType" minOccurs="0" maxOccurs="1"/>
												</xsd:all>
											</xsd:complexType>
										</xsd:element>
										<xsd:element minOccurs="1" maxOccurs="1" name="DataReceiver">
											<xsd:complexType>
												<xsd:all>
													<xsd:element name="Identifiers" type="PartyIdentifiersType" minOccurs="0" maxOccurs="1"/>
												</xsd:all>
											</xsd:complexType>
										</xsd:element>							
										<xsd:element minOccurs="1" maxOccurs="1" name="DataProvider">
											<xsd:complexType>
												<xsd:all>
													<xsd:element name="Identifiers" type="PartyIdentifiersType" minOccurs="0" maxOccurs="1"/>
													<xsd:element name="Name" minOccurs="1" maxOccurs="1">
															<xsd:complexType>
																<xsd:simpleContent>
																	<xsd:extension base="xsd:string">
																	</xsd:extension>
																</xsd:simpleContent>
															</xsd:complexType>
														</xsd:element>
												</xsd:all>
											</xsd:complexType>
										</xsd:element>
										<xsd:element minOccurs="1" maxOccurs="1" name="MessageIdentifier">
											<xsd:complexType>
												<xsd:simpleContent>
													<xsd:extension base="xsd:string">
													</xsd:extension>
												</xsd:simpleContent>
											</xsd:complexType>
										</xsd:element>
										<xsd:element minOccurs="1" maxOccurs="1" name="CreationDateTime">
											<xsd:complexType>
												<xsd:simpleContent>
													<xsd:extension base="xsd:dateTime">
													</xsd:extension>
												</xsd:simpleContent>
											</xsd:complexType>
										</xsd:element>
										<xsd:element minOccurs="0" maxOccurs="1" name="Parameters">
											<xsd:complexType>
												<xsd:sequence>
													<xsd:element minOccurs="1" maxOccurs="unbounded" name="Parameter">
														<xsd:complexType>
															<xsd:attribute name="Key" type="xsd:string" use="required"/>
															<xsd:attribute name="Value" type="xsd:string" use="required"/>
														</xsd:complexType>
													</xsd:element>
												</xsd:sequence>
											</xsd:complexType>
										</xsd:element>											
									</xsd:all>
									<xsd:attribute name="DataContainerType" type="code:dataContainerType" use="required"/>
								</xsd:complexType>
							</xsd:element>
							<xsd:choice>
								<xsd:element name="Item" minOccurs="1">
									<xsd:complexType>
										<xsd:all>
											<xsd:element minOccurs="1" name="DataTopics">
												<xsd:complexType>
													<xsd:sequence>
														<xsd:element name="DataTopic" minOccurs="1" maxOccurs="unbounded">
															<xsd:complexType>
																<xsd:choice>
																	<xsd:element ref="azlonkeyinfo:KeyInfo" minOccurs="0" maxOccurs="1"/>
																	<xsd:element ref="azlonfoodingredientstatements:FoodIngredientStatements" minOccurs="0" maxOccurs="1"/>
																	<xsd:element ref="azlonfoodallergens:FoodAllergens" minOccurs="0" maxOccurs="1"/>
																	<xsd:element ref="azlonfoodnutrients:FoodNutrients" minOccurs="0" maxOccurs="1"/>
																	<xsd:element ref="azlonmeasurements:Measurements" minOccurs="0" maxOccurs="1"/>
																	<xsd:element ref="azlonattributes:Attributes" minOccurs="0" maxOccurs="1"/>
																	<xsd:element ref="azlontrade:Trade" minOccurs="0" maxOccurs="1"/>
																	<xsd:element ref="azlonlifecycledata:LifeCycleData" minOccurs="0" maxOccurs="1"/>
																</xsd:choice>
																<xsd:attribute name="Topic" type="xsd:string" use="required"/>
																<xsd:attribute name="Format" type="xsd:string" use="required"/>
																<xsd:attribute name="Version" type="xsd:string" use="required"/>
															</xsd:complexType>
														</xsd:element>
													</xsd:sequence>
												</xsd:complexType>
											</xsd:element>
										</xsd:all>
										<xsd:attribute name="MaterialType" type="code:materialType" use="required"/>
									</xsd:complexType>
								</xsd:element>	
								<xsd:element minOccurs="1" name="BOM" maxOccurs="1" type="BOMType"/>
							</xsd:choice>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	
	<xsd:complexType name="PartyIdentifiersType">
	  <xsd:sequence>
		<xsd:element name="Identifier" minOccurs="1" maxOccurs="unbounded">
			<xsd:complexType>
				<xsd:simpleContent>
					<xsd:extension base="xsd:string">
						<xsd:attribute name="Type" type="code:partyIdentifierType" use="required"/>
					</xsd:extension>
				</xsd:simpleContent>
			</xsd:complexType>
		</xsd:element>
	  </xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="BOMType">
		<xsd:sequence>
			<xsd:element name="Item" minOccurs="1" maxOccurs="1">
				<xsd:complexType>
					  <xsd:sequence>
						<xsd:element name="ItemIdentifiers" type="IdentifiersType" minOccurs="0" maxOccurs="1"/>
						<xsd:element name="Items" minOccurs="0" maxOccurs="1">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="Item" type="BOMItemType" minOccurs="1" maxOccurs="unbounded"/>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
					  </xsd:sequence>
					  <xsd:attribute name="MaterialType" type="code:materialType" use="required"/>	
				</xsd:complexType>									  
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
		
	<xsd:complexType name="BOMItemType">
	  <xsd:sequence>
		<xsd:element name="QuantityUnits" minOccurs="1" maxOccurs="1">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="QuantityUnit" minOccurs="1" maxOccurs="unbounded">
							<xsd:complexType>
								<xsd:simpleContent>
									<xsd:extension base="xsd:string">
										<xsd:attribute name="Type" type="code:unitType" use="required"/>
									</xsd:extension>
								</xsd:simpleContent>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
		</xsd:element>
		<xsd:element name="ItemIdentifiers" type="IdentifiersType" minOccurs="0" maxOccurs="1"/>
		<xsd:element name="Items" minOccurs="0" maxOccurs="1">
			<xsd:complexType>
				<xsd:sequence>
					<xsd:element name="Item" type="BOMItemType" minOccurs="1" maxOccurs="unbounded"/>
				</xsd:sequence>
			</xsd:complexType>
		</xsd:element>
	  </xsd:sequence>
	  <xsd:attribute name="MaterialType" type="code:materialType" use="required"/>
	  <xsd:attribute name="Quantity" type="xsd:double" use="required"/>
	</xsd:complexType>
	
	<xsd:complexType name="IdentifiersType">
		<xsd:sequence>
			<xsd:element name="Identifier" type="IdentifierType" minOccurs="1" maxOccurs="unbounded"/>					
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="IdentifierType">
		<xsd:simpleContent>
			<xsd:extension base="xsd:string">
				<xsd:attribute name="Type" type="code:identifierType" use="required"/>
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>	

</xsd:schema>
