<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.ieee.org/ATML/2004/01/TestResults" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:c="http://www.ieee.org/ATML/2004/01/Common" xmlns="http://www.ieee.org/ATML/2004/01/TestResults" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.11">
	<xs:import namespace="http://www.ieee.org/ATML/2004/01/Common" schemaLocation="Common.xsd"/>
	<xs:element name="TestResults">
		<xs:annotation>
			<xs:documentation>Root element for this schema.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:all>
				<xs:annotation>
					<xs:documentation>Reference information to locate a specific software element used in a test.</xs:documentation>
				</xs:annotation>
				<xs:element name="UUT" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Minimal identification data for the subject UUT.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:complexContent>
							<xs:extension base="c:HardwareItemType">
								<xs:attribute name="uutType" type="xs:string" use="optional"/>
							</xs:extension>
						</xs:complexContent>
					</xs:complexType>
				</xs:element>
				<xs:element name="ResultSet" type="TestGroupType">
					<xs:annotation>
						<xs:documentation>Parent element to permit heirarchical structure of TestGroups.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="TestStation" type="c:HardwareItemType" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Reference information to identify the specific test station on which a test was run.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="TestProgram" type="c:SoftwareItemType" minOccurs="0"/>
				<xs:element name="TestDescription" type="c:ReferenceType" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Reference information to enable linkage to a specific TestDescription instance document.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="WorkOrder" minOccurs="0">
					<xs:annotation>
						<xs:documentation>The reference ID of a Work Order related to this test.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence minOccurs="0">
							<xs:element name="WorkItem" type="c:ItemInstanceType" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>Optional holder for specific Work Item(s) from the Work Order.</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
						<xs:attribute name="ID" type="xs:string" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="PreTestRepairs" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Identifies components repaired prior to a test or test run. Applies to diagnostics.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="Repair" type="RepairType" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>Identify the repair.</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="Environmental" minOccurs="0">
					<xs:annotation>
						<xs:documentation>External environmental data pertinent to the test instance.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="Data" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>Extension of ValueType with an added name attribute to identify the particular environmental parameter.</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:complexContent>
										<xs:extension base="c:ValueType">
											<xs:attribute name="name" type="xs:string" use="required"/>
										</xs:extension>
									</xs:complexContent>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="References" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Collector element for child(ren) Reference element(s).</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="Reference" type="c:ReferenceType" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>Miscellaneous reference information relevant to the overall set of Tests in this file.</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="Operator" type="c:OperatorType" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Placeholder to identify the specific operator of the ATE when the Test Results instance document was created.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="Indictments" minOccurs="0">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="Indictment" maxOccurs="unbounded">
								<xs:complexType>
									<xs:complexContent>
										<xs:extension base="c:ItemInstanceType">
											<xs:attribute name="indictedUUT" type="xs:anySimpleType" use="optional"/>
										</xs:extension>
									</xs:complexContent>
								</xs:complexType>
							</xs:element>
							<xs:element name="OtherData" type="c:TagValueType" minOccurs="0" maxOccurs="unbounded"/>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="Extension" type="c:ExtensionType" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Element provided to permit extensibility of the schema.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:all>
		</xs:complexType>
		<xs:key name="UUTidentifier">
			<xs:selector xpath="UUT"/>
			<xs:field xpath="@ID"/>
		</xs:key>
		<xs:keyref name="linkToUUT" refer="UUTidentifier">
			<xs:selector xpath="Indictments/Indictment"/>
			<xs:field xpath="@indictedUUT"/>
		</xs:keyref>
	</xs:element>
	<xs:simpleType name="RepairCodeType">
		<xs:annotation>
			<xs:documentation>Enumeration of repair codes.</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:enumeration value="Repair"/>
			<xs:enumeration value="Replace"/>
			<xs:enumeration value="Cannibalize"/>
			<xs:enumeration value="Reseat"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="OutcomeValueType">
		<xs:annotation>
			<xs:documentation>Simple enumeration to specify test outcomes Passed/Failed/Aborted.</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:enumeration value="Passed"/>
			<xs:enumeration value="Failed"/>
			<xs:enumeration value="Aborted"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="RepairType">
		<xs:annotation>
			<xs:documentation>Identify the type of repair conducted.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Component" type="c:ItemInstanceType" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Identify the repaired component.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="repairCode" type="RepairCodeType" use="required"/>
		<xs:attribute name="repairName" type="xs:string" use="optional"/>
	</xs:complexType>
	<xs:complexType name="FailureModeType">
		<xs:annotation>
			<xs:documentation>Provides a structure for capture of specific failure information related to an indictment.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="ID" type="xs:string" use="required"/>
		<xs:attribute name="name" type="xs:string" use="optional"/>
		<xs:attribute name="type" type="xs:string" use="optional"/>
	</xs:complexType>
	<xs:complexType name="IndictmentType">
		<xs:annotation>
			<xs:documentation>Permits the capture of identification data for component(s) identified as being implicated (indicted) in a test failure.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="c:ItemInstanceType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="OutcomeType">
		<xs:attribute name="value" type="OutcomeValueType" use="required"/>
		<xs:attribute name="qualifier" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>The qualifier attribute may be used to expand upon the state indicated in the value attribute.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="EventType">
		<xs:annotation>
			<xs:documentation>Provides for the capture of non-result data or system/operator messages generated during a test.</xs:documentation>
		</xs:annotation>
		<xs:sequence minOccurs="0">
			<xs:element name="Message" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Data" type="c:ValueType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Reference" type="c:ReferenceType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="ID" type="xs:string" use="required"/>
		<xs:attribute name="name" type="xs:string" use="optional"/>
		<xs:attribute name="severity" use="optional">
			<xs:annotation>
				<xs:documentation>0 - lowest severity; information only 4 - highest severity; critical event</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:int">
					<xs:enumeration value="0"/>
					<xs:enumeration value="1"/>
					<xs:enumeration value="2"/>
					<xs:enumeration value="3"/>
					<xs:enumeration value="4"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="source" type="xs:string" use="required"/>
		<xs:attribute name="timeStamp" type="xs:dateTime" use="optional"/>
	</xs:complexType>
	<xs:complexType name="ParameterType">
		<xs:annotation>
			<xs:documentation>Provides for capture of test input parameters using a ValueType.</xs:documentation>
		</xs:annotation>
		<xs:sequence minOccurs="0">
			<xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Data" type="c:ValueType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Reference" type="c:ReferenceType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="ID" type="xs:string" use="optional"/>
		<xs:attribute name="name" type="xs:string" use="optional"/>
		<xs:attribute name="timeStamp" type="xs:dateTime" use="optional"/>
	</xs:complexType>
	<xs:complexType name="TestResultType">
		<xs:annotation>
			<xs:documentation>Element sequence to capture test result data, comparison limits, components indicted in a failure and any data transforms required to evaluate raw capture data.</xs:documentation>
		</xs:annotation>
		<xs:all>
			<xs:annotation>
				<xs:documentation>A string element providing for extensive prose documentation.</xs:documentation>
			</xs:annotation>
			<xs:element name="Outcome" type="OutcomeType" minOccurs="0"/>
			<xs:element name="Description" type="xs:string" minOccurs="0"/>
			<xs:element name="TestData" type="c:ValueType">
				<xs:annotation>
					<xs:documentation>Captured data from the test equipment. This may be either raw or post-processed data. It is presumed that a Transform will be provided for raw data.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Transform" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Any transform that might be needed to produce meaningful results from RawData. NOTE: there is some thought that this may not be needed/useful.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Indictments" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Indictment" type="IndictmentType" maxOccurs="unbounded">
							<xs:annotation>
								<xs:documentation>Optional element to capture data about a component (item) suspected of contributing to an out-of-limit test result. </xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="TestLimits" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Limits" type="c:LimitType" maxOccurs="unbounded">
							<xs:annotation>
								<xs:documentation>Limits against which TestData is compared to arrive at a testOutcome.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="Extension" type="c:ExtensionType" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Provided to permit schema extensibility.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:all>
		<xs:attribute name="ID" type="xs:string" use="optional"/>
		<xs:attribute name="name" type="xs:string" use="optional"/>
	</xs:complexType>
	<xs:complexType name="TestType">
		<xs:annotation>
			<xs:documentation>The TestType element is to be used to capture all activity within a test program. This will include any initialization, calibration, tests, post-test events, etc. The ID attribute of this element does not necessarily indicate the order of tests. It is assumed that the order of the tests within the file is significant.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Outcome" type="OutcomeType" minOccurs="0"/>
			<xs:element name="Description" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Optional descriptive information for the test.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Event" type="EventType" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Optional element to capture any non-result event occuring during a test. Events may be system or operator messages.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Parameter" type="ParameterType" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Optional storage for test parameters, as required.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Calibration" type="ParameterType" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Optional calibration information for the test instance.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="TestResult" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="TestResultType"/>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="Extension" type="c:ExtensionType" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Provided to permit schema extensibility.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="ID" type="xs:string" use="required"/>
		<xs:attribute name="name" type="xs:string" use="optional"/>
		<xs:attribute name="type" type="xs:string" use="optional"/>
		<xs:attribute name="cost" type="xs:double" use="optional"/>
		<xs:attribute name="simulated" type="xs:boolean" use="optional" default="false"/>
		<xs:attribute name="startDateTime" type="xs:dateTime" use="optional"/>
		<xs:attribute name="endDateTime" type="xs:dateTime" use="optional"/>
	</xs:complexType>
	<xs:complexType name="TestGroupType">
		<xs:annotation>
			<xs:documentation>Heirarchical group element to permit more structured format of test data.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Outcome" type="OutcomeType" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Outcome (result) for the entire Test Group.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Description" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Textual description for the Test Group.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element name="Test" type="TestType"/>
				<xs:element name="TestGroup">
					<xs:complexType>
						<xs:complexContent>
							<xs:extension base="TestGroupType"/>
						</xs:complexContent>
					</xs:complexType>
				</xs:element>
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="ID" type="xs:string" use="required"/>
		<xs:attribute name="name" type="xs:string" use="optional"/>
		<xs:attribute name="entryPoint" type="xs:boolean" use="optional" default="false"/>
		<xs:attribute name="simulated" type="xs:boolean" use="optional" default="false"/>
		<xs:attribute name="startDateTime" type="xs:dateTime" use="optional"/>
		<xs:attribute name="endDateTime" type="xs:dateTime" use="optional"/>
	</xs:complexType>
</xs:schema>

