<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.ieee.org/ATML/2006/10/InstrumentDescription" xmlns:hw="http://www.ieee.org/ATML/2006/HardwareCommon" xmlns:c="http://www.ieee.org/ATML/2006/Common" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ieee.org/ATML/2006/10/InstrumentDescription" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.16">
	<xs:import namespace="http://www.ieee.org/ATML/2006/HardwareCommon" schemaLocation="HardwareCommon.xsd"/>
	<xs:import namespace="http://www.ieee.org/ATML/2006/Common" schemaLocation="Common.xsd"/>
	<xs:element name="InstrumentDescription">
		<xs:annotation>
			<xs:documentation>Instrument Description</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="hw:HardwareItemDescription">
					<xs:sequence>
						<xs:element name="Component" minOccurs="0">
							<xs:annotation>
								<xs:documentation>If specified, indicates that this is a description for a module or an option.</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Instrument" maxOccurs="unbounded">
										<xs:annotation>
											<xs:documentation>Instrument(s) ito which the module or option belongs.  Modules and options can not be used without the associated instrument.</xs:documentation>
										</xs:annotation>
										<xs:complexType>
											<xs:attribute name="uuid" type="c:NonBlankString" use="required"/>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
								<xs:attribute name="type">
									<xs:simpleType>
										<xs:restriction base="xs:string">
											<xs:enumeration value="Module"/>
											<xs:enumeration value="Option"/>
										</xs:restriction>
									</xs:simpleType>
								</xs:attribute>
							</xs:complexType>
						</xs:element>
						<xs:element name="Buses" minOccurs="0">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Bus" type="Bus" maxOccurs="unbounded">
										<xs:annotation>
											<xs:documentation>The bus type is specified by specifying a type derivied from the "Bus" abstract type.  The schema includes derived types for common instrumentation control buses.</xs:documentation>
										</xs:annotation>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="PowerOnDefaults" minOccurs="0">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Default" type="c:NamedValue" maxOccurs="unbounded">
										<xs:annotation>
											<xs:documentation>Keyword-value pair for identifying power-on defaults.</xs:documentation>
										</xs:annotation>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="Specifications" type="Specifications" minOccurs="0"/>
						<xs:element name="Resources" type="hw:Resources" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Resources are the physical entities in the instrument that provides the source and measure capabilities.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="Capabilities" type="hw:Capabilities" minOccurs="0"/>
						<xs:element name="Switching" type="hw:Switching" minOccurs="0"/>
					</xs:sequence>
					<xs:attributeGroup ref="c:DocumentRootAttributes"/>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<!--Bus type is an abstract type from which specific bus types are derived.  The Instrument schema defines a number of standard instrument communication buses.-->
	<xs:complexType name="Bus" abstract="true">
		<xs:annotation>
			<xs:documentation>Abstract type for identifying the bus used to communicate with the instrument</xs:documentation>
		</xs:annotation>
		<xs:attribute name="defaultAddress" type="c:NonBlankString"/>
	</xs:complexType>
	<xs:complexType name="VXI">
		<xs:annotation>
			<xs:documentation>VXI Bus</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Bus">
				<xs:sequence>
					<xs:element name="DynamicCurrent" type="VXIBackplaneVoltages">
						<xs:annotation>
							<xs:documentation>The amount of dynamic current in
amps consumed by the device on each of the VXI backplane voltage lines.</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="PeakCurrent" type="VXIBackplaneVoltages">
						<xs:annotation>
							<xs:documentation>The amount of peak current in amps consumed by the device on each of the VXI backplane voltage lines.</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="ECLTrigger" type="VXITriggerLines">
						<xs:annotation>
							<xs:documentation>The number of ECL trigger lines concurrently input or sensed.</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="TTLTrigger" type="VXITriggerLines">
						<xs:annotation>
							<xs:documentation>The number of TTL trigger lines concurrently input or sensed.</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="Keying">
						<xs:annotation>
							<xs:documentation>Identifies the keying class (1-6) defined by the VXI specification. Classes 7, 8,
and 9 are defined as follows:
Class 7 – No local bus
Class 8 – Sensor +/-16V
Class 9 – Sensor +/-42V
Top Key supports C size modules.
Bottom Key supports D size
modules (Bottom Key on C size
modules is always 7).</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:attribute name="bottomRight" use="required">
								<xs:simpleType>
									<xs:restriction base="xs:int">
										<xs:minInclusive value="1"/>
										<xs:maxInclusive value="9"/>
									</xs:restriction>
								</xs:simpleType>
							</xs:attribute>
							<xs:attribute name="bottomLeft" use="required">
								<xs:simpleType>
									<xs:restriction base="xs:int">
										<xs:minInclusive value="1"/>
										<xs:maxInclusive value="9"/>
									</xs:restriction>
								</xs:simpleType>
							</xs:attribute>
							<xs:attribute name="topRight" use="required">
								<xs:simpleType>
									<xs:restriction base="xs:int">
										<xs:minInclusive value="1"/>
										<xs:maxInclusive value="9"/>
									</xs:restriction>
								</xs:simpleType>
							</xs:attribute>
							<xs:attribute name="topLeft" use="required">
								<xs:simpleType>
									<xs:restriction base="xs:int">
										<xs:minInclusive value="1"/>
										<xs:maxInclusive value="9"/>
									</xs:restriction>
								</xs:simpleType>
							</xs:attribute>
						</xs:complexType>
					</xs:element>
					<xs:element name="ModuleCooling">
						<xs:complexType>
							<xs:attribute name="backPressure" type="xs:double" use="required">
								<xs:annotation>
									<xs:documentation>The module cooling as back pressure in mm/H2O</xs:documentation>
								</xs:annotation>
							</xs:attribute>
							<xs:attribute name="airFlow" type="xs:double" use="required">
								<xs:annotation>
									<xs:documentation>Represents Module Cooling as air flow in liters/sec.</xs:documentation>
								</xs:annotation>
							</xs:attribute>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
				<xs:attribute name="addressSpace" use="required">
					<xs:annotation>
						<xs:documentation>Identifies the type of VXI address space needed by the instrument or module in addition to A16.</xs:documentation>
					</xs:annotation>
					<xs:simpleType>
						<xs:restriction base="xs:string">
							<xs:enumeration value="A16"/>
							<xs:enumeration value="A24"/>
							<xs:enumeration value="A32"/>
							<xs:enumeration value="A64"/>
						</xs:restriction>
					</xs:simpleType>
				</xs:attribute>
				<xs:attribute name="deviceCategory" use="required">
					<xs:simpleType>
						<xs:restriction base="xs:string">
							<xs:enumeration value="Message"/>
							<xs:enumeration value="Register"/>
						</xs:restriction>
					</xs:simpleType>
				</xs:attribute>
				<xs:attribute name="dynamicallyConfigured" type="xs:boolean" use="required"/>
				<xs:attribute name="interruptLines" type="xs:int" use="required">
					<xs:annotation>
						<xs:documentation>The number of interrupt lines utilized by a device.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="manufacturerID" type="c:HexValue" use="required"/>
				<xs:attribute name="modelCode" type="c:HexValue" use="required"/>
				<xs:attribute name="requiredMemory" type="c:HexValue" use="required"/>
				<xs:attribute name="slotSize" use="required">
					<xs:simpleType>
						<xs:restriction base="xs:string">
							<xs:enumeration value="A"/>
							<xs:enumeration value="B"/>
							<xs:enumeration value="C"/>
							<xs:enumeration value="D"/>
						</xs:restriction>
					</xs:simpleType>
				</xs:attribute>
				<xs:attribute name="slotWeight" type="xs:double" use="required">
					<xs:annotation>
						<xs:documentation>The weight of the module in kilograms per slot occupied.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="slots" type="xs:int" use="required">
					<xs:annotation>
						<xs:documentation>The number of slots consumed.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="VXIBackplaneVoltages">
		<xs:annotation>
			<xs:documentation>This type is used to store the amount of current in amps consumed by the device for each of the VXI backplane voltages.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="plus_12" type="xs:double" use="required"/>
		<xs:attribute name="plus_24" type="xs:double" use="required"/>
		<xs:attribute name="plus_5_standby" type="xs:double" use="required"/>
		<xs:attribute name="plus_5" type="xs:double" use="required"/>
		<xs:attribute name="minus_12" type="xs:double" use="required"/>
		<xs:attribute name="minus_24" type="xs:double" use="required"/>
		<xs:attribute name="minus_2" type="xs:double" use="required"/>
		<xs:attribute name="minus_5.2" type="xs:double" use="required"/>
	</xs:complexType>
	<xs:complexType name="VXITriggerLines">
		<xs:annotation>
			<xs:documentation>Used to specify the number of triggers concurrently input or sensed.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="source" type="xs:int" use="optional"/>
		<xs:attribute name="sense" type="xs:int" use="optional"/>
	</xs:complexType>
	<xs:complexType name="IEEE-488">
		<xs:annotation>
			<xs:documentation>IEEE-488 bus</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Bus"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="VME">
		<xs:annotation>
			<xs:documentation>VME Bus</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Bus"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Ethernet">
		<xs:annotation>
			<xs:documentation>Ethernet</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Bus">
				<xs:attribute name="supportsDHCP" type="xs:boolean" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="EIA-232">
		<xs:annotation>
			<xs:documentation>RS-232</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Bus"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="USB">
		<xs:annotation>
			<xs:documentation>USB</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Bus">
				<xs:sequence>
					<xs:element name="Version" type="hw:VersionIdentifier">
						<xs:annotation>
							<xs:documentation>Used to identify the version of USB supported.</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="IEEE-1394">
		<xs:annotation>
			<xs:documentation>IEEE--1394</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Bus"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="LXI">
		<xs:annotation>
			<xs:documentation>LXI</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Ethernet">
				<xs:attribute name="LXIVersion" type="c:NonBlankString" use="required"/>
				<xs:attribute name="class" use="required">
					<xs:simpleType>
						<xs:restriction base="c:NonBlankString">
							<xs:enumeration value="A"/>
							<xs:enumeration value="B"/>
							<xs:enumeration value="C"/>
						</xs:restriction>
					</xs:simpleType>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="PCI">
		<xs:annotation>
			<xs:documentation>PCI</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Bus">
				<xs:attribute name="manufacturerID" type="xs:string"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="PCIExpress">
		<xs:annotation>
			<xs:documentation>PCI Express</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Bus">
				<xs:attribute name="manufacturerID" type="xs:string"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="PXI">
		<xs:annotation>
			<xs:documentation>PXI</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Bus"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="PXIe">
		<xs:annotation>
			<xs:documentation>PXI Express</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="PXI"/>
		</xs:complexContent>
	</xs:complexType>
	<!--Types used to capture specifications-->
	<xs:complexType name="Specifications">
		<xs:sequence>
			<xs:element name="Conditions" type="SpecificationConditions" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Conditions under which the specifications are measured.  These conditions apply to all specifications.  Each individual specification can add additional conditions, or override/replace the any of these conditions.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Certifications" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Specifies traceability information for all specs</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Certification" type="c:NonBlankString" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:choice maxOccurs="unbounded">
				<xs:element name="Specification" type="Specification"/>
				<xs:element name="Group">
					<xs:annotation>
						<xs:documentation>A grouping of specifications that share a set of conditions.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="Conditions" type="SpecificationConditions" minOccurs="0">
								<xs:annotation>
									<xs:documentation>Conditions under which the grouped specifications are measured.  Each individual specification can add additional conditions, or override/replace any of these conditions.</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element name="Specification" type="Specification" maxOccurs="unbounded"/>
						</xs:sequence>
						<xs:attribute name="name" type="xs:string"/>
					</xs:complexType>
				</xs:element>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="Specification" abstract="true">
		<xs:sequence>
			<xs:element name="Description" type="c:NonBlankString">
				<xs:annotation>
					<xs:documentation>A short (one or two sentence) textual description of the specification</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Definition">
				<xs:complexType>
					<xs:choice>
						<xs:element name="Text" type="c:NonBlankString">
							<xs:annotation>
								<xs:documentation>A rigorous (mathematical) description of how the specification is defined and measured</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="Document" type="c:Document"/>
					</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:element name="Conditions" type="SpecificationConditions" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Conditions under which this specification is measured. </xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Limits" type="c:Limit" minOccurs="0">
				<xs:annotation>
					<xs:documentation>The limits for the  specification.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Graph" minOccurs="0">
				<xs:complexType>
					<xs:choice>
						<xs:element name="GraphData" type="xs:base64Binary" maxOccurs="unbounded">
							<xs:annotation>
								<xs:documentation>Supplies graphical data for specifications that vary with other parameters.  Some specs are only available in graphical format.  Supplying a bitmap of the graph is one way to satisfy this requirement; the other is to ask the vendor to include all the data, but that would lose important annotations from the graph itself.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="URL" type="c:NonBlankURI"/>
					</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:element name="SupplementalInformation" type="xs:string" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Any additional information that is necessary to clarify the specification.  This includes information that is contained in footnotes of the datasheet</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="RequiredOptions" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Instrument options that are required for this spec to be valid</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Option" type="c:NonBlankString" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="ExclusiveOptions" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Instrument options that make this spec invalid</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Option" type="c:NonBlankString" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="name" type="c:NonBlankString" use="required"/>
	</xs:complexType>
	<xs:complexType name="SpecificationConditions">
		<xs:sequence>
			<xs:element name="Condition" type="c:NonBlankString" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="Guaranteed">
		<xs:annotation>
			<xs:documentation>Guaranteed: If the instrument does not meet this spec, it is considered broken and will be repaired under warranty</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Specification"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Typical">
		<xs:annotation>
			<xs:documentation>Typical: Most instruments would be expected to meet this spec, but it is not guaranteed</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Specification">
				<xs:attribute name="ExpectedSuccessRange" type="xs:double">
					<xs:annotation>
						<xs:documentation>States the expected percentage of instruments that will meet the spec</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Nominal">
		<xs:annotation>
			<xs:documentation>Nominal: Characteristics that are true by design, but not measured or tested.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Specification"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Characteristic">
		<xs:annotation>
			<xs:documentation>Characteristic: A ball-park figure that describes the type of performance that may be expected, but not verified with rigorous statistical analysis or measurements</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Specification"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Feature">
		<xs:annotation>
			<xs:documentation>Feature: A description of a feature, which is not actually an instrument spec but is the sort of thing that is often included in the spec sheet</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Specification"/>
		</xs:complexContent>
	</xs:complexType>
</xs:schema>
