<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.ieee.org/ATML/2005/06/InstrumentDescription" xmlns:c="http://www.ieee.org/ATML/2005/08/Common" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ieee.org/ATML/2005/06/InstrumentDescription" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.8">
	<xs:import namespace="http://www.ieee.org/ATML/2005/08/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="c:ItemDescription">
					<xs:sequence>
						<xs:element name="Interface" type="c:Interface"/>
						<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="name" type="c:NonBlankString" use="required"/>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
								<xs:attribute name="type">
									<xs:simpleType>
										<xs:restriction base="xs:NMTOKENS">
											<xs:enumeration value="Module"/>
											<xs:enumeration value="Option"/>
										</xs:restriction>
									</xs:simpleType>
								</xs:attribute>
							</xs:complexType>
						</xs:element>
						<xs:element name="Control" minOccurs="0">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Firmware" minOccurs="0" maxOccurs="unbounded">
										<xs:complexType>
											<xs:attribute name="version" type="c:NonBlankString"/>
											<xs:attribute name="qualifier">
												<xs:annotation>
													<xs:documentation>Used to indicate whether the version speciifed is the minum or maximum version supported.</xs:documentation>
												</xs:annotation>
												<xs:simpleType>
													<xs:restriction base="xs:NMTOKENS">
														<xs:enumeration value="Min"/>
														<xs:enumeration value="Max"/>
													</xs:restriction>
												</xs:simpleType>
											</xs:attribute>
										</xs:complexType>
									</xs:element>
									<xs:element name="Drivers" minOccurs="0">
										<xs:complexType>
											<xs:sequence>
												<xs:element name="Driver" maxOccurs="unbounded">
													<xs:complexType>
														<xs:sequence>
															<xs:element name="Type" type="Driver">
																<xs:annotation>
																	<xs:documentation>The driver type is specified by providing a type that derives from the "Driver" abstract type.  The derived type includes any informaiton that is specific to that driver type.  The schema includes derived types for serveral different driver types. </xs:documentation>
																</xs:annotation>
															</xs:element>
															<xs:element name="Dependencies" minOccurs="0">
																<xs:annotation>
																	<xs:documentation>Identifies any dependencies.</xs:documentation>
																</xs:annotation>
																<xs:complexType>
																	<xs:sequence>
																		<xs:element name="Firmware" minOccurs="0" maxOccurs="unbounded">
																			<xs:complexType>
																				<xs:attribute name="version" type="c:NonBlankString" use="required"/>
																				<xs:attribute name="qualifier" type="c:ComparisonOperator" use="required"/>
																			</xs:complexType>
																		</xs:element>
																		<xs:element name="Software" minOccurs="0" maxOccurs="unbounded">
																			<xs:complexType>
																				<xs:attribute name="name" type="c:NonBlankString" use="required"/>
																				<xs:attribute name="version" type="c:NonBlankString" use="required"/>
																				<xs:attribute name="qualifier" type="c:ComparisonOperator" use="required"/>
																			</xs:complexType>
																		</xs:element>
																	</xs:sequence>
																</xs:complexType>
															</xs:element>
															<xs:element name="Platform">
																<xs:annotation>
																	<xs:documentation>Identifies the platform requirements for using this driver.</xs:documentation>
																</xs:annotation>
																<xs:complexType>
																	<xs:sequence>
																		<xs:element name="OperatingSystem" maxOccurs="unbounded">
																			<xs:complexType>
																				<xs:attribute name="name" type="c:NonBlankString" use="required"/>
																				<xs:attribute name="version" type="c:NonBlankString"/>
																				<xs:attribute name="servicePack" type="c:NonBlankString"/>
																			</xs:complexType>
																		</xs:element>
																		<xs:element name="Processor" minOccurs="0">
																			<xs:complexType>
																				<xs:attribute name="speed" type="c:NonBlankString"/>
																			</xs:complexType>
																		</xs:element>
																		<xs:element name="PhysicalMemory" minOccurs="0">
																			<xs:complexType>
																				<xs:attribute name="minimum" type="c:NonBlankString"/>
																			</xs:complexType>
																		</xs:element>
																		<xs:element name="HardDisk" minOccurs="0">
																			<xs:complexType>
																				<xs:attribute name="minimum" type="c:NonBlankString"/>
																			</xs:complexType>
																		</xs:element>
																	</xs:sequence>
																</xs:complexType>
															</xs:element>
															<xs:element name="Extension" type="c:Extension" minOccurs="0"/>
														</xs:sequence>
														<xs:attribute name="version" type="c:NonBlankString" use="required"/>
														<xs:attribute name="qualifier">
															<xs:simpleType>
																<xs:restriction base="xs:NMTOKENS">
																	<xs:enumeration value="Min"/>
																	<xs:enumeration value="Max"/>
																</xs:restriction>
															</xs:simpleType>
														</xs:attribute>
													</xs:complexType>
												</xs:element>
											</xs:sequence>
										</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="ControlLanguages" minOccurs="0">
										<xs:complexType>
											<xs:sequence>
												<xs:element name="ControlLanguage" type="ControlLanguage" maxOccurs="unbounded">
													<xs:annotation>
														<xs:documentation>The control language is specified by provideing a type that derives from the "ControlLanguage" abstract type.</xs:documentation>
													</xs:annotation>
												</xs:element>
											</xs:sequence>
										</xs:complexType>
									</xs:element>
									<xs:element name="Tools" minOccurs="0">
										<xs:annotation>
											<xs:documentation>Any software tool that comes with the Instrument, e.g., Calibration Utility, Soft Front Panel, etc.</xs:documentation>
										</xs:annotation>
										<xs:complexType>
											<xs:sequence>
												<xs:element name="Tool" maxOccurs="unbounded">
													<xs:complexType>
														<xs:sequence>
															<xs:element name="Dependencies" minOccurs="0">
																<xs:annotation>
																	<xs:documentation>Identifies any dependencies.</xs:documentation>
																</xs:annotation>
																<xs:complexType>
																	<xs:sequence>
																		<xs:element name="Driver" minOccurs="0" maxOccurs="unbounded">
																			<xs:complexType>
																				<xs:attribute name="name" type="c:NonBlankString" use="required"/>
																				<xs:attribute name="version" type="c:NonBlankString" use="required"/>
																				<xs:attribute name="qualifier" type="c:ComparisonOperator" use="required"/>
																			</xs:complexType>
																		</xs:element>
																		<xs:element name="Software" minOccurs="0" maxOccurs="unbounded">
																			<xs:complexType>
																				<xs:attribute name="name" type="c:NonBlankString" use="required"/>
																				<xs:attribute name="version" type="c:NonBlankString" use="required"/>
																				<xs:attribute name="qualifier" type="c:ComparisonOperator" use="required"/>
																			</xs:complexType>
																		</xs:element>
																	</xs:sequence>
																</xs:complexType>
															</xs:element>
														</xs:sequence>
														<xs:attribute name="name" use="required"/>
														<xs:attribute name="version"/>
														<xs:attribute name="filePath"/>
													</xs:complexType>
												</xs:element>
											</xs:sequence>
										</xs:complexType>
									</xs:element>
									<xs:element name="Extension" type="c:Extension" minOccurs="0"/>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="Documentation" minOccurs="0">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Document" type="c:Document" maxOccurs="unbounded"/>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="ConfigurationOptions" minOccurs="0">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Option" maxOccurs="unbounded">
										<xs:annotation>
											<xs:documentation>Name of the configuration option. Configuration options are values the user can modify that persist after a power-cycle.</xs:documentation>
										</xs:annotation>
										<xs:complexType>
											<xs:attribute name="name" type="c:NonBlankString" use="required"/>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="FactoryDefaults" minOccurs="0">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Default" type="c:NamedValue" maxOccurs="unbounded">
										<xs:annotation>
											<xs:documentation>Keyword-value pair for identifying manufacturer instrument defaults.</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" minOccurs="0">
							<xs:complexType>
								<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:element>
						<xs:element name="CalibrationRequirements" minOccurs="0">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="CalibrationRequirement" maxOccurs="unbounded">
										<xs:complexType>
											<xs:sequence>
												<xs:element name="SupportEquipment" type="c:NonBlankString" minOccurs="0" maxOccurs="unbounded">
													<xs:annotation>
														<xs:documentation>Identifies the support equipment needed for running calibration.</xs:documentation>
													</xs:annotation>
												</xs:element>
												<xs:element name="Procedure" type="c:Document">
													<xs:annotation>
														<xs:documentation>The calibration procedure.</xs:documentation>
													</xs:annotation>
												</xs:element>
											</xs:sequence>
											<xs:attribute name="frequency" type="xs:duration" use="required">
												<xs:annotation>
													<xs:documentation>Specifies how often calibration needs to be executed.</xs:documentation>
												</xs:annotation>
											</xs:attribute>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="OperationalRequirements" minOccurs="0">
							<xs:complexType>
								<xs:complexContent>
									<xs:extension base="c:OperationalRequirements">
										<xs:sequence>
											<xs:element name="OperationalRequirement" maxOccurs="unbounded">
												<xs:complexType>
													<xs:complexContent>
														<xs:extension base="c:NamedValue">
															<xs:sequence>
																<xs:element name="Description" type="xs:string" minOccurs="0"/>
															</xs:sequence>
														</xs:extension>
													</xs:complexContent>
												</xs:complexType>
											</xs:element>
										</xs:sequence>
									</xs:extension>
								</xs:complexContent>
							</xs:complexType>
						</xs:element>
						<xs:element name="EnvironmentalRequirements" type="c:EnvironmentalRequirements" minOccurs="0"/>
						<xs:element name="PowerRequirements" type="c:PowerSpecifications" minOccurs="0"/>
						<xs:element name="Errors" minOccurs="0">
							<xs:annotation>
								<xs:documentation>List of errors associated with the instrument.</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Error" maxOccurs="unbounded">
										<xs:complexType>
											<xs:sequence>
												<xs:element name="Description" type="c:NonBlankString"/>
											</xs:sequence>
											<xs:attribute name="type" type="ErrorType">
												<xs:annotation>
													<xs:documentation>Warning, error fatal</xs:documentation>
												</xs:annotation>
											</xs:attribute>
											<xs:attribute name="source" type="xs:string">
												<xs:annotation>
													<xs:documentation>instrument, driver</xs:documentation>
												</xs:annotation>
											</xs:attribute>
											<xs:attribute name="id" type="c:NonBlankString" use="required"/>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="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:complexType>
								<xs:sequence>
									<xs:element name="Resource" type="Resource" maxOccurs="unbounded"/>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="Switching" minOccurs="0">
							<xs:complexType>
								<xs:sequence>
									<xs:choice maxOccurs="unbounded">
										<xs:element name="Switch" type="Switch"/>
										<xs:element name="CrossPointSwitch" type="CrossPointSwitch"/>
										<xs:element name="MatrixSwitch" type="MatrixSwitch"/>
									</xs:choice>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="Triggers" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Need to figure out how to represent triggers. TBD</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="NetworkList" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Netlist describing how all the ports in the instrument are wired together.  In the simplest scenario, the capability ports get wired to Resource ports and the resource ports get wired to the Instrument ports.</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Network" type="Network" maxOccurs="unbounded"/>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="PhysicalCharacteristics" type="c:PhysicalCharacteristics" minOccurs="0"/>
						<xs:element name="Legalease" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Section for capturing the legal "stuff".</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:all>
									<xs:element name="Warranty" type="xs:string" minOccurs="0"/>
									<xs:element name="License" type="xs:string" minOccurs="0"/>
									<xs:element name="Exportability" type="xs:string" minOccurs="0"/>
									<xs:element name="Conformance" type="xs:string" minOccurs="0"/>
									<xs:element name="Safety" type="xs:string" minOccurs="0"/>
								</xs:all>
							</xs:complexType>
						</xs:element>
					</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="Driver" abstract="true">
		<xs:annotation>
			<xs:documentation>Abstract type for instrument drivers.  </xs:documentation>
		</xs:annotation>
		<xs:attribute name="fileName" type="c:NonBlankString" use="required"/>
		<xs:attribute name="filePath" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="VPP">
		<xs:annotation>
			<xs:documentation>VXI plug and play driver</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Driver">
				<xs:attribute name="prefix" type="c:NonBlankString" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="IVI" abstract="true">
		<xs:annotation>
			<xs:documentation>IVI driver - includes structure for specifying whether the driver is an IVI-C or IVI-COM driver</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Driver">
				<xs:sequence>
					<xs:element name="Class" type="c:NonBlankString" minOccurs="0" maxOccurs="unbounded">
						<xs:annotation>
							<xs:documentation>Name of IVI class(es) provided by this driver</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="ComplianceDocument" type="c:Document" minOccurs="0"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="IVI-C">
		<xs:complexContent>
			<xs:extension base="IVI">
				<xs:attribute name="prefix" type="c:NonBlankString" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="IVI-COM">
		<xs:complexContent>
			<xs:extension base="IVI">
				<xs:attribute name="progID" type="c:NonBlankString" use="required">
					<xs:annotation>
						<xs:documentation>ProgID used to instantiate the driver class.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="COM">
		<xs:annotation>
			<xs:documentation>COM driver</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Driver">
				<xs:attribute name="progID" type="c:NonBlankString" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Win32">
		<xs:annotation>
			<xs:documentation>Windows DLL based driver</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Driver"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Composite">
		<xs:complexContent>
			<xs:extension base="Driver"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="LabView">
		<xs:complexContent>
			<xs:extension base="Driver"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ControlLanguage">
		<xs:annotation>
			<xs:documentation>Abstract type for control language identification</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Documentation" type="c:Document" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="SCPI">
		<xs:annotation>
			<xs:documentation>Specifies that the instrument can be controlled using SCPI commands</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ControlLanguage"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Register">
		<xs:annotation>
			<xs:documentation>Specifies that the instrument is a register based instrument</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ControlLanguage"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Generic">
		<xs:annotation>
			<xs:documentation>Specifies that the instrument can be control using some generic control language</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ControlLanguage"/>
		</xs:complexContent>
	</xs:complexType>
	<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:complexType>
	<xs:complexType name="VXI">
		<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:NMTOKENS">
							<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:NMTOKENS">
							<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:NMTOKENS">
							<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 trigger 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:complexContent>
			<xs:extension base="Bus">
				<xs:attribute name="defaultAddress" type="xs:int" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="VME">
		<xs:complexContent>
			<xs:extension base="Bus"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Ethernet">
		<xs:complexContent>
			<xs:extension base="Bus">
				<xs:attribute name="defaultAddress" type="c:NonBlankString" use="required"/>
				<xs:attribute name="supportsDHCP" type="xs:boolean" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="EIA-232">
		<xs:complexContent>
			<xs:extension base="Bus"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="USB">
		<xs:complexContent>
			<xs:extension base="Bus"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="IEEE-1394">
		<xs:complexContent>
			<xs:extension base="Bus"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="LXI">
		<xs:complexContent>
			<xs:extension base="Ethernet">
				<xs:attribute name="LXIVersion" type="c:NonBlankString" use="required"/>
				<xs:attribute name="class" type="LXIClass" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:simpleType name="LXIClass">
		<xs:restriction base="xs:NMTOKENS">
			<xs:enumeration value="A"/>
			<xs:enumeration value="B"/>
			<xs:enumeration value="C"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="PCI">
		<xs:complexContent>
			<xs:extension base="Bus">
				<xs:attribute name="manufacturerID" type="xs:string"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="PCIExpress">
		<xs:complexContent>
			<xs:extension base="Bus">
				<xs:attribute name="manufacturerID" type="xs:string"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="PXI">
		<xs:complexContent>
			<xs:extension base="Bus"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Item">
		<xs:sequence>
			<xs:element name="Description" type="xs:string" minOccurs="0"/>
			<xs:element name="Extension" type="c:Extension" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="name" type="c:NonBlankString" use="required"/>
	</xs:complexType>
	<xs:complexType name="RepeatedItem">
		<xs:annotation>
			<xs:documentation>Allows multiple identical items to be described with a single element in an instance document.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="Item">
				<xs:attribute name="baseIndex" type="xs:int">
					<xs:annotation>
						<xs:documentation>Starting index for the items.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="count" type="xs:int">
					<xs:annotation>
						<xs:documentation>Number fo identical items</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="incrementBy" type="xs:int" default="1">
					<xs:annotation>
						<xs:documentation>Specifies the value to increment by when calculating the value with which the replacement character is replaced.  Allows for defining items where paired items have different characteristics.  Defaults to 1.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="replacementCharacter" type="xs:string" use="optional" default="#">
					<xs:annotation>
						<xs:documentation>Character replaced with calculated index when repeated items are expanded. </xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Port">
		<xs:complexContent>
			<xs:extension base="Item"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Resource">
		<xs:complexContent>
			<xs:extension base="RepeatedItem">
				<xs:sequence>
					<xs:element name="Interface" type="c:Interface"/>
				</xs:sequence>
				<xs:attribute name="index" type="xs:int">
					<xs:annotation>
						<xs:documentation>Index used to identify the resource.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Switch">
		<xs:complexContent>
			<xs:extension base="RepeatedItem">
				<xs:sequence>
					<xs:element name="Interface" type="c:Interface"/>
					<xs:element name="Connections">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="RelaySetting" maxOccurs="unbounded">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="RelayConnection" minOccurs="0">
												<xs:complexType>
													<xs:attribute name="from" type="c:NonBlankString" use="required"/>
													<xs:attribute name="to" type="c:NonBlankString" use="required"/>
												</xs:complexType>
											</xs:element>
										</xs:sequence>
										<xs:attribute name="name" type="xs:string"/>
									</xs:complexType>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="CrossPointSwitch">
		<xs:complexContent>
			<xs:extension base="Item">
				<xs:sequence>
					<xs:element name="Columns">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Port" type="SwitchPort" maxOccurs="unbounded"/>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="Rows">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Port" type="SwitchPort" maxOccurs="unbounded"/>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
				<xs:attribute name="lineCount" type="xs:int" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="SwitchPort">
		<xs:complexContent>
			<xs:extension base="RepeatedItem">
				<xs:sequence>
					<xs:element name="Pin" maxOccurs="unbounded">
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="Port">
									<xs:attribute name="line" type="xs:int" use="required"/>
								</xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="MatrixSwitch">
		<xs:complexContent>
			<xs:extension base="Item">
				<xs:sequence>
					<xs:element name="Columns">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Pin" type="MatrixPort" maxOccurs="unbounded"/>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="Rows">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Pin" type="MatrixPort" maxOccurs="unbounded"/>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="MatrixPort">
		<xs:complexContent>
			<xs:extension base="RepeatedItem"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="Network">
		<xs:annotation>
			<xs:documentation>Describes how the various instrument entities are connected.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="RepeatedItem">
				<xs:sequence>
					<xs:element name="Node" type="NetworkNode" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="NetworkNode">
		<xs:complexContent>
			<xs:extension base="Item">
				<xs:attribute name="parent" type="xs:string"/>
			</xs:extension>
		</xs:complexContent>
	</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="ExpectedSuccessRage" 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:simpleType name="ErrorType">
		<xs:restriction base="xs:NMTOKENS">
			<xs:enumeration value="Warning"/>
			<xs:enumeration value="Error"/>
			<xs:enumeration value="Fatal"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>
