<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.ieee.org/ATML/2007/02/InstrumentDescription" xmlns:hw="http://www.ieee.org/ATML/2007/HardwareCommon" xmlns:c="http://www.ieee.org/ATML/2007/Common" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ieee.org/ATML/2007/02/InstrumentDescription" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.22">
	<xs:import namespace="http://www.ieee.org/ATML/2007/HardwareCommon" schemaLocation="HardwareCommon.xsd"/>
	<xs:import namespace="http://www.ieee.org/ATML/2007/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="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="Switching" type="hw:Switching" minOccurs="0"/>
						<xs:element name="Capabilities" type="hw:Capabilities" minOccurs="0"/>
					</xs:sequence>
					<xs:attributeGroup ref="c:DocumentRootAttributes"/>
					<xs:attribute name="type" use="required">
						<xs:simpleType>
							<xs:restriction base="xs:string">
								<xs:enumeration value="Instrument"/>
								<xs:enumeration value="Module"/>
								<xs:enumeration value="Option"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
				</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="c:NonBlankString"/>
			</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="c:NonBlankString"/>
			</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:sequence>
					<xs:element name="DynamicCurrent" type="PXIBackplaneVoltages">
						<xs:annotation>
							<xs:documentation>The amount of dynamic current in
amps consumed by the device on each of the PXI backplane voltage lines.</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="PeakCurrent" type="PXIBackplaneVoltages">
						<xs:annotation>
							<xs:documentation>The amount of peak current in amps consumed by the device on each of the PXI backplane voltage lines.</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="PXIBackplaneVoltages">
		<xs:annotation>
			<xs:documentation>This type is used to store the amount of current in amps consumed by the device</xs:documentation>
		</xs:annotation>
		<xs:attribute name="plus_5" type="xs:double" use="required"/>
		<xs:attribute name="plus_3.3" type="xs:double" use="required"/>
		<xs:attribute name="plus_12" type="xs:double" use="required"/>
		<xs:attribute name="minus_12" type="xs:double" use="required"/>
	</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" type="SpecificationGroup">
					<xs:annotation>
						<xs:documentation>A grouping of specifications that share a set of conditions.</xs:documentation>
					</xs:annotation>
				</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" minOccurs="0">
				<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:annotation>
					<xs:documentation>The data for the graph can be specified by proving the URL of the file containg the data or image of the graph, or by specifying the data using an extension.  For example, using the XML standard for describing graphis or perhaps the XML representation of a PDF file.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:choice>
						<xs:element name="URL" type="c:NonBlankURI"/>
						<xs:element name="Extension" type="c:Extension"/>
					</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:element name="SupplementalInformation" type="c:NonBlankString" 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="SpecificationGroup">
		<xs:sequence>
			<xs:element name="Description" type="c:NonBlankString" minOccurs="0">
				<xs:annotation>
					<xs:documentation>A short (one or two sentence) textual description of the specification group</xs:documentation>
				</xs:annotation>
			</xs:element>
			<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:choice maxOccurs="unbounded">
				<xs:element name="Specification" type="Specification"/>
				<xs:element name="Group" type="SpecificationGroup"/>
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="name" type="c:NonBlankString"/>
	</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>
