<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v4.4 U (http://www.xmlspy.com) by Niko Siltala (TTKK / Tuotantotekniikka) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:include schemaLocation="../Component_lib_IPC-2546.xsd"/>
	<!--IPC2546FA: Item Model-->
	<xs:element name="Item" type="ITEM_TYPE" abstract="true"/>
	<xs:complexType name="ITEM_TYPE" abstract="true">
		<xs:sequence>
			<xs:element ref="ItemIdentifier" maxOccurs="unbounded"/>
			<xs:element ref="BoundBox" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="itemType" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:element name="ItemIdentifier">
		<xs:complexType>
			<xs:attribute name="idType" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="UNIQUE"/>
						<xs:enumeration value="NONUNIQUE"/>
						<xs:enumeration value="BULK"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="idCategory" type="xs:string" use="required"/>
			<xs:attribute name="identifier" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="BoundBox">
		<xs:complexType>
			<xs:attribute name="diagonalX" type="xs:double" use="required"/>
			<xs:attribute name="diagonalY" type="xs:double" use="required"/>
			<xs:attribute name="diagonalZ" type="xs:double" use="required"/>
			<xs:attribute name="units" type="xs:string" use="required"/>
			<xs:attribute name="decade" type="xs:double" use="optional" default="0"/>
			<xs:attribute name="rotationX" type="xs:double" use="optional"/>
			<xs:attribute name="rotationY" type="xs:double" use="optional"/>
			<xs:attribute name="rotationZ" type="xs:double" use="optional"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="Container" type="CONTAINER_TYPE" substitutionGroup="Item"/>
	<xs:complexType name="CONTAINER_TYPE">
		<xs:complexContent>
			<xs:extension base="ITEM_TYPE">
				<xs:sequence>
					<xs:element ref="ContainerPosition" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
				<xs:attribute name="routeInformation" type="xs:NMTOKENS" use="optional"/>
				<xs:attribute name="routeIndex" type="xs:NMTOKEN" use="optional"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="ContainerPosition">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Item" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="designator" type="xs:string" use="required"/>
			<xs:attribute name="containerPositionType" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="Component" type="COMPONENT_TYPE" substitutionGroup="Item"/>
	<xs:complexType name="COMPONENT_TYPE">
		<xs:complexContent>
			<xs:extension base="ITEM_TYPE">
				<xs:sequence>
					<xs:element ref="Component" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
				<xs:attribute name="designator" type="xs:string" use="optional"/>
				<xs:attribute name="imageId" type="xs:string" use="optional"/>
				<xs:attribute name="recognitionReference" type="xs:string" use="optional"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--IPC2546FA: Nested Elements-->
	<xs:element name="EndEffector">
		<xs:complexType>
			<xs:attribute name="endEffectorType" type="xs:string" use="required"/>
			<xs:attribute name="endEffectorBaseId" type="xs:string" use="required"/>
			<xs:attribute name="endEffectorToolId" type="xs:string" use="optional"/>
			<xs:attribute name="endEffectorSegmentId" type="xs:string" use="optional"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="MaterialHandler">
		<xs:complexType>
			<xs:choice>
				<xs:element name="Feeder">
					<xs:complexType>
						<xs:attribute name="trackId" type="xs:positiveInteger" use="required"/>
						<xs:attribute name="materialHandlerTableId" type="xs:string" use="optional"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="TrayFeeder">
					<xs:complexType>
						<xs:attribute name="trayFeederTower" type="xs:positiveInteger" use="required"/>
						<xs:attribute name="traySection" type="xs:string" use="required"/>
						<xs:attribute name="trayFeederLocation" type="xs:positiveInteger" use="optional"/>
						<xs:attribute name="trayId" type="xs:string" use="optional"/>
					</xs:complexType>
				</xs:element>
			</xs:choice>
			<xs:attribute name="materialSupplyArea" type="xs:string" use="required"/>
			<xs:attribute name="feederType" type="xs:string" use="required"/>
			<xs:attribute name="feederDivision" type="xs:string" use="required"/>
			<xs:attribute name="feederId" type="xs:string" use="optional"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="ComponentValidation">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="ItemIdentifier" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="itemType" type="xs:string" use="required"/>
			<xs:attribute name="vendorId" type="xs:string" use="optional"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="Parameter" type="PARAMETER_TYPE"/>
	<xs:complexType name="PARAMETER_TYPE">
		<xs:sequence>
			<xs:element ref="DataNumeric" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element ref="DataOctet" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="nameId" type="xs:string" use="required"/>
		<xs:attribute name="instanceId" type="xs:string" use="optional"/>
		<xs:attribute name="description" type="xs:string" use="optional"/>
	</xs:complexType>
	<xs:element name="DataNumeric">
		<xs:complexType>
			<xs:attribute name="application" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="MEASURED"/>
						<xs:enumeration value="EXPECTED"/>
						<xs:enumeration value="ALARMLIMITS"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="units" type="xs:string" use="required"/>
			<xs:attribute name="decade" type="xs:double" use="optional"/>
			<xs:attribute name="value" type="xs:double" use="optional"/>
			<xs:attribute name="minimum" type="xs:double" use="optional"/>
			<xs:attribute name="maximum" type="xs:double" use="optional"/>
			<xs:attribute name="comparator" use="optional">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="EQ"/>
						<xs:enumeration value="NE"/>
						<xs:enumeration value="GT"/>
						<xs:enumeration value="LT"/>
						<xs:enumeration value="GE"/>
						<xs:enumeration value="LE"/>
						<xs:enumeration value="GTLT"/>
						<xs:enumeration value="GELE"/>
						<xs:enumeration value="GTLE"/>
						<xs:enumeration value="GELT"/>
						<xs:enumeration value="LTGT"/>
						<xs:enumeration value="LEGE"/>
						<xs:enumeration value="LTGE"/>
						<xs:enumeration value="LEGT"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="position" type="xs:NMTOKENS" use="optional"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="DataOctet">
		<xs:complexType>
			<xs:attribute name="application" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="MEASURED"/>
						<xs:enumeration value="EXPECTED"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="value" type="xs:string" use="required"/>
			<xs:attribute name="caseSensitive" use="optional">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="YES"/>
						<xs:enumeration value="NO"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="format" type="xs:string" use="optional"/>
			<xs:attribute name="position" type="xs:NMTOKENS" use="optional"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="Recipe">
		<xs:complexType>
			<xs:attribute name="recipeId" type="xs:string" use="required"/>
			<xs:attribute name="revision" type="xs:string" use="optional"/>
			<xs:attribute name="laneList" type="xs:NMTOKENS" use="optional"/>
			<xs:attribute name="zoneList" type="xs:NMTOKENS" use="optional"/>
			<xs:attribute name="recipeStep" type="xs:string" use="optional"/>
			<xs:attribute name="command" type="xs:string" use="optional"/>
			<xs:attribute name="description" type="xs:string" use="optional"/>
		</xs:complexType>
	</xs:element>
	<!--IPC2546FA: Simple Types-->
	<xs:simpleType name="INITIATOR_STYPE">
		<xs:restriction base="xs:string">
			<xs:enumeration value="OPERATOR"/>
			<xs:enumeration value="AUTOMATIC"/>
		</xs:restriction>
	</xs:simpleType>
	<!--IPC2546FA: Complex types-->
	<xs:complexType name="PROCESS_STEP_TYPE">
		<xs:sequence>
			<xs:element ref="Item" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element ref="Subsystem" minOccurs="0"/>
			<xs:element ref="Extensions" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="dateTime" type="xs:dateTime" use="required"/>
		<xs:attribute name="processStepId" type="xs:string" use="required"/>
		<xs:attribute name="laneList" type="xs:NMTOKENS" use="required"/>
		<xs:attribute name="zoneList" type="xs:NMTOKENS" use="required"/>
		<xs:attribute name="description" type="xs:string" use="optional"/>
	</xs:complexType>
</xs:schema>

