<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v4.4 (http://www.xmlspy.com) by Ed Shaya (NASA) -->
<xs:schema targetNamespace="http://xml.gsfc.nasa.gov/XDF" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://xml.gsfc.nasa.gov/XDF" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:annotation>
		<xs:documentation> XDF_019.xsd - eXtensible Data Format - version 0.19
        Date:June 12, 2002
        XML lanaguage schema definition.

        An XDF document contains arrays and data structures.  It  is
        designed to be both an interchange format for scientific data 
        and to be of archival quality.
        Multidimensional tables and scalar or vector fields are represented
        in a consistent way and become self describing.
        Axial information can be included so that the space in which 
         the data reside is fully described.  
        Thus, XDF provides a consistent way to hold spectra 
        with their wavelength scales, images with coordinate axes, 
        vector fields with unitDirection, data cubes in complicated 
        spaces, tables with complex column headers, and series of table 
       sections  with each section having a unique name. </xs:documentation>
	</xs:annotation>
	<xs:simpleType name="anyTypeList">
		<xs:annotation>
			<xs:documentation>space delimited list of any datatype</xs:documentation>
		</xs:annotation>
		<xs:list itemType="xs:anySimpleType"/>
	</xs:simpleType>
	<xs:attributeGroup name="axisAttributes">
		<xs:annotation>
			<xs:documentation>Attributes common to axis, colAxis, and rowAxis</xs:documentation>
		</xs:annotation>
		<xs:attribute name="name" type="xs:string">
			<xs:annotation>
				<xs:documentation>Title on the axis, eg "X Axis"</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="description" type="xs:string"/>
		<xs:attribute name="align" type="xs:IDREF">
			<xs:annotation>
				<xs:documentation>Indicate axis is same as one in another array.  Use axisID to make connection.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="axisDatatype">
			<xs:annotation>
				<xs:documentation>Datatype in axis/valueList</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:NMTOKEN">
					<xs:enumeration value="integer"/>
					<xs:enumeration value="float"/>
					<xs:enumeration value="exponential"/>
					<xs:enumeration value="xs:string"/>
					<xs:enumeration value="xs:anyURI"/>
					<xs:enumeration value="xs:date"/>
					<xs:enumeration value="xs:dateTime"/>
					<xs:enumeration value="xs:time"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="size" type="xs:unsignedByte" use="required">
			<xs:annotation>
				<xs:documentation>Number of data elements along this axis, as in the dimension of the datacube. </xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:attributeGroup>
	<xs:complexType name="noteType">
		<xs:annotation>
			<xs:documentation>additional text information on a datum, field or an array etc.</xs:documentation>
		</xs:annotation>
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="mark" type="xs:string">
					<xs:annotation>
						<xs:documentation>If a datum matches this, then the note applies.  Usually in field. </xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="noteId" type="xs:ID">
					<xs:annotation>
						<xs:documentation>If the PCDATA is the same as in another note, use noteIdRef rather than repeat text.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="noteIdRef" type="xs:IDREF">
					<xs:annotation>
						<xs:documentation>See noteId</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="location">
					<xs:annotation>
						<xs:documentation>A list of indices, one for each axis,  to identify datum in array/data that note applies.  The order is set by notes/ locationOrder.</xs:documentation>
					</xs:annotation>
					<xs:simpleType>
						<xs:list itemType="xs:unsignedLong"/>
					</xs:simpleType>
				</xs:attribute>
				<xs:attribute name="inequality">
					<xs:annotation>
						<xs:documentation>Often a field has an adjacent field with just inequality chars.  Use this with @mark to indicate a special character used for inequality statements in a field or array. Pairs of fields with these should be within a fieldGroup and field/@relation used as well.   Note should be nill.</xs:documentation>
					</xs:annotation>
					<xs:simpleType>
						<xs:restriction base="xs:NMTOKEN">
							<xs:enumeration value="lessThan"/>
							<xs:enumeration value="lessThanOrEqual"/>
							<xs:enumeration value="greaterThan"/>
							<xs:enumeration value="greaterThanOrEqual"/>
						</xs:restriction>
					</xs:simpleType>
				</xs:attribute>
				<xs:attribute name="href" type="xs:anyURI">
					<xs:annotation>
						<xs:documentation>Additonal information on note at this URL</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="binaryFloatType">
		<xs:annotation>
			<xs:documentation>Binary float info for I/O for a field</xs:documentation>
		</xs:annotation>
		<xs:attribute name="bits" use="required">
			<xs:annotation>
				<xs:documentation>Only accept 32 bit (single) and 64 bit (double) floats.  Here use IEE.  Extensions may contain more possibilities.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:unsignedByte">
					<xs:enumeration value="32"/>
					<xs:enumeration value="64"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="binaryIntegerType">
		<xs:annotation>
			<xs:documentation>Binary integer info for I/O of a field.  Any number of bits are allowed.  This is also used for bitfields of any length.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="signed" default="true">
			<xs:simpleType>
				<xs:restriction base="xs:boolean">
					<xs:enumeration value="true"/>
					<xs:enumeration value="false"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="bits" use="required">
			<xs:annotation>
				<xs:documentation>width of integer/bitfield in bits</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:unsignedByte">
					<xs:minInclusive value="1"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="dataFormatType">
		<xs:annotation>
			<xs:documentation> I/O specification for a datum.</xs:documentation>
		</xs:annotation>
		<xs:choice minOccurs="0">
			<xs:element ref="float"/>
			<xs:element ref="integer"/>
			<xs:element ref="string"/>
			<xs:element name="binaryInteger" type="binaryIntegerType"/>
			<xs:element name="binaryFloat" type="binaryFloatType"/>
			<xs:element ref="arrayRef"/>
		</xs:choice>
	</xs:complexType>
	<xs:complexType name="specialValuesType">
		<xs:annotation>
			<xs:documentation>Explicity state the datum value used to represent each special circumstance.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="infiniteValue" type="xs:float">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="infiniteNegativeValue" type="xs:float">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="noDataValue" type="xs:float">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="notANumberValue" type="xs:float">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="underflowValue" type="xs:float">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="overflowValue" type="xs:float">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="padValue" type="xs:float">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="fieldType">
		<xs:annotation>
			<xs:documentation>Like columns in  tables, this holds header info (name, units, dataFromat) of a single data type.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:sequence>
				<xs:choice>
					<xs:element ref="units"/>
					<xs:element ref="unitless"/>
				</xs:choice>
				<xs:element name="dataFormat" type="dataFormatType"/>
				<xs:element name="specialValues" type="specialValuesType" minOccurs="0"/>
			</xs:sequence>
			<xs:element ref="relation" minOccurs="0"/>
			<xs:element name="note" type="noteType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string"/>
		<xs:attribute name="description" type="xs:string"/>
		<xs:attribute name="fieldId" type="xs:ID">
			<xs:annotation>
				<xs:documentation>Unique identifier for field.  Start with a character.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="fieldIdRef" type="xs:IDREF">
			<xs:annotation>
				<xs:documentation>Allow clone of field metadata from another array.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="class" type="xs:NMTOKENS">
			<xs:annotation>
				<xs:documentation>Each discipline should define enumeration of field/types.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="complexComponent">
			<xs:annotation>
				<xs:documentation>If complex numbers are needed, simply add a fieldAxis with 2 fields, a real one and an imaginary one</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:NMTOKEN">
					<xs:enumeration value="real"/>
					<xs:enumeration value="imaginary"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="unitDirectionAxisRef" type="xs:IDREF">
			<xs:annotation>
				<xs:documentation>N-d vector fields are handled by N unitDirection fields. If the components are along the axes use ref to refer to axisIdRef. </xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="appendToFieldGroup" type="xs:IDREF"/>
	</xs:complexType>
	<xs:complexType name="arrayType">
		<xs:annotation>
			<xs:documentation>datacubes, tables, images, etc with axes and read/write info</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="parameter"/>
				<xs:element ref="parameterGroup"/>
			</xs:choice>
			<xs:choice>
				<xs:sequence>
					<xs:element name="fieldAxis" type="fieldAxisType"/>
					<xs:element ref="axis" minOccurs="0" maxOccurs="unbounded"/>
					<xs:element ref="dataStyle"/>
				</xs:sequence>
				<xs:sequence>
					<xs:element name="fieldAxis" type="fieldAxisType"/>
					<xs:choice>
						<xs:element ref="rowAxis"/>
						<xs:element ref="colAxis"/>
					</xs:choice>
				</xs:sequence>
				<xs:sequence>
					<xs:choice>
						<xs:element ref="units"/>
						<xs:element ref="unitless"/>
					</xs:choice>
					<xs:element name="dataFormat" type="dataFormatType"/>
					<xs:element name="specialValues" type="specialValuesType" minOccurs="0"/>
					<xs:choice>
						<xs:sequence>
							<xs:element ref="axis" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="dataStyle"/>
						</xs:sequence>
						<xs:sequence>
							<xs:element ref="colAxis"/>
							<xs:element ref="rowAxis"/>
						</xs:sequence>
						<xs:sequence>
							<xs:element ref="rowAxis"/>
							<xs:element ref="colAxis"/>
						</xs:sequence>
					</xs:choice>
				</xs:sequence>
			</xs:choice>
			<xs:element ref="data"/>
			<xs:element ref="notes" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string"/>
		<xs:attribute name="description" type="xs:string"/>
		<xs:attribute name="arrayId" type="xs:ID">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="appendTo" type="xs:IDREF">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="class" type="xs:NMTOKENS">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:element name="XDF" type="structureType">
		<xs:annotation>
			<xs:documentation>Root element for basic XDF</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:complexType name="structureType">
		<xs:annotation>
			<xs:documentation>container for sets of parameters, arrays and other structures</xs:documentation>
		</xs:annotation>
		<xs:choice maxOccurs="unbounded">
			<xs:element name="array" type="arrayType"/>
			<xs:element ref="parameter"/>
			<xs:element ref="parameterGroup"/>
			<xs:element name="note" type="noteType"/>
			<xs:element name="structure" type="structureType"/>
		</xs:choice>
		<xs:attribute name="name" type="xs:string"/>
		<xs:attribute name="description" type="xs:string"/>
	</xs:complexType>
	<xs:element name="axis">
		<xs:annotation>
			<xs:documentation>Info on a dimension of a N-dim data cube.  Gives size and may provide name values for each index along the axis.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:choice>
					<xs:element ref="units"/>
					<xs:element ref="unitless"/>
				</xs:choice>
				<xs:choice minOccurs="0">
					<xs:element ref="value"/>
					<xs:element ref="valueList"/>
					<xs:element ref="valueGroup"/>
				</xs:choice>
			</xs:sequence>
			<xs:attribute name="axisId" type="xs:ID" use="required">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="axisIdRef" type="xs:IDREF">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
			<xs:attributeGroup ref="axisAttributes"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="dataStyle">
		<xs:annotation>
			<xs:documentation>Specifies general style of data layout.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice>
				<xs:element ref="fixedWidth"/>
				<xs:element ref="tagged"/>
				<xs:element ref="delimited"/>
			</xs:choice>
			<xs:attribute name="encoding" default="ISO-8859-1">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="ANSI"/>
						<xs:enumeration value="ISO-8859-1"/>
						<xs:enumeration value="UTF-8"/>
						<xs:enumeration value="UTF-16"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="byteOrder">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="BigEndian"/>
						<xs:enumeration value="LittleEndian"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="bitOrder">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="BigEndian"/>
						<xs:enumeration value="LittleEndian"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="dataStyleId" type="xs:ID">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="dataStyleIdRef" type="xs:IDREF">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="data">
		<xs:annotation>
			<xs:documentation>Either conatainer for an array's data or a reference to data file.</xs:documentation>
		</xs:annotation>
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="data"/>
				<xs:element ref="d0"/>
				<xs:element ref="row"/>
				<xs:element ref="column"/>
			</xs:choice>
			<xs:attribute name="startBit" type="xs:unsignedLong" default="0">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="endBit" type="xs:unsignedLong">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="href" type="xs:anyURI">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="checksum" type="xs:string">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="encoding">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="uuencoded"/>
						<xs:enumeration value="base64"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="compression">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="zip"/>
						<xs:enumeration value="gzip"/>
						<xs:enumeration value="bzip2"/>
						<xs:enumeration value="compress"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="parameter">
		<xs:annotation>
			<xs:documentation>a single value of some parameter</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:choice>
					<xs:element ref="units"/>
					<xs:element ref="unitless"/>
				</xs:choice>
				<xs:choice maxOccurs="unbounded">
					<xs:element ref="value"/>
					<xs:element ref="valueList"/>
					<xs:element ref="valueGroup"/>
				</xs:choice>
				<xs:element name="note" type="noteType" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string"/>
			<xs:attribute name="description" type="xs:string"/>
			<xs:attribute name="paramId" type="xs:ID">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="paramIdRef" type="xs:IDREF">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="datatype">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="integer"/>
						<xs:enumeration value="float"/>
						<xs:enumeration value="exponential"/>
						<xs:enumeration value="xs:string"/>
						<xs:enumeration value="xs:anyURI"/>
						<xs:enumeration value="xs:date"/>
						<xs:enumeration value="xs:time"/>
						<xs:enumeration value="xs:dateTime"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="fieldAxisType">
		<xs:annotation>
			<xs:documentation>axis of a data cube with fields for axis values.</xs:documentation>
		</xs:annotation>
		<xs:choice maxOccurs="unbounded">
			<xs:element name="field" type="fieldType"/>
			<xs:element ref="fieldGroup"/>
		</xs:choice>
		<xs:attribute name="name" type="xs:string">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="description" type="xs:string">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="axisId" type="xs:ID" use="required">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="axisIdRef" type="xs:IDREF">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="size" type="xs:unsignedByte" use="required">
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:element name="arrayRef">
		<xs:annotation>
			<xs:documentation>datatype for arrayIdRefs held in data.  This allow arrays logically within an array, but data for arrays are external.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="length" use="required">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:unsignedByte">
						<xs:minInclusive value="1"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="chars">
		<xs:annotation>
			<xs:documentation>specifies a string of characters.  As a child of skip, only the length of chars/@value is important while reading, but when writing,  chars/@value is output.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="value" use="optional" default=" ">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:minLength value="1"/>
						<xs:whiteSpace value="preserve"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="bits" type="xs:nonNegativeInteger">
		<xs:annotation>
			<xs:documentation>number of bits to skip over when reading or writing.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="colAxis">
		<xs:annotation>
			<xs:documentation>An axis object for simple table.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:choice minOccurs="0">
					<xs:element ref="units"/>
					<xs:element ref="unitless"/>
				</xs:choice>
				<xs:choice minOccurs="0">
					<xs:element ref="value"/>
					<xs:element ref="valueList"/>
					<xs:element ref="valueGroup"/>
				</xs:choice>
			</xs:sequence>
			<xs:attributeGroup ref="axisAttributes"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="column" type="anyTypeList">
		<xs:annotation>
			<xs:documentation>For data held column-wise in a simple table.  A white space delimited list.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="d0">
		<xs:annotation>
			<xs:documentation>Like tr, this comes first in tagged data when not using simple table format.</xs:documentation>
		</xs:annotation>
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="d1"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="d1">
		<xs:annotation>
			<xs:documentation>Like td, this comes second in tagged data when not using simple table format.</xs:documentation>
		</xs:annotation>
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="d2"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="d2">
		<xs:annotation>
			<xs:documentation>For third dimension, use after d2.</xs:documentation>
		</xs:annotation>
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="d3"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="d3">
		<xs:annotation>
			<xs:documentation>d3 to d7 hold higher dimensions of tagged data.</xs:documentation>
		</xs:annotation>
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="d4"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="d4">
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="d5"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="d5">
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="d6"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="d6">
		<xs:complexType mixed="true">
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="d7"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="delimited">
		<xs:annotation>
			<xs:documentation>Instructions for data that uses a delimiter string between datum.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="delimitedInstruction"/>
				<xs:element ref="for"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="delimitedInstruction">
		<xs:annotation>
			<xs:documentation>Info on I/O when data is delimited</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="delimiter"/>
				<xs:element ref="recordTerminator"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="delimiter">
		<xs:annotation>
			<xs:documentation>The string used for delimiter.  For newLine or CR use newLine element.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="chars"/>
				<xs:element ref="newLine"/>
				<xs:element ref="whiteSpace"/>
				<xs:element ref="tab"/>
			</xs:choice>
			<xs:attribute name="repeatable" default="true">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:boolean">
						<xs:enumeration value="true"/>
						<xs:enumeration value="false"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="doInstruction">
		<xs:annotation>
			<xs:documentation>Just an empty tag for now.  In future versions it will indicate which I/O instruction to perform</xs:documentation>
		</xs:annotation>
		<xs:complexType/>
	</xs:element>
	<xs:element name="fieldGroup">
		<xs:annotation>
			<xs:documentation>Groups together fields so they can be address by a common name.  Like colGroup in XHTML</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice maxOccurs="unbounded">
				<xs:element name="field" type="fieldType"/>
				<xs:element ref="fieldGroup"/>
			</xs:choice>
			<xs:attribute name="name" type="xs:string"/>
			<xs:attribute name="description" type="xs:string"/>
			<xs:attribute name="class" type="xs:NMTOKENS">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="fixedWidth">
		<xs:annotation>
			<xs:documentation>For data with fixed width fields and spacing between fields</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="fixedWidthInstruction"/>
				<xs:element ref="for"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="fixedWidthInstruction">
		<xs:annotation>
			<xs:documentation>I/O instruction for each record (1-d slice).  Gives info on spacing between fields for inner most axis</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice maxOccurs="unbounded">
				<xs:element ref="repeat"/>
				<xs:element ref="readCell"/>
				<xs:element ref="skip"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="float">
		<xs:annotation>
			<xs:documentation>ASCII representation of floating point number specification</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="length" use="required">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:unsignedByte">
						<xs:minInclusive value="1"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="precision" use="required">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:unsignedByte">
						<xs:minInclusive value="1"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="exponent">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:unsignedByte">
						<xs:minInclusive value="2"/>
						<xs:maxInclusive value="4"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="for">
		<xs:annotation>
			<xs:documentation>Provides  order of  looping instructions for data I/'O.  </xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice>
				<xs:element ref="for"/>
				<xs:element ref="doInstruction"/>
			</xs:choice>
			<xs:attribute name="axisIdRef" type="xs:IDREF" use="required">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="index">
		<xs:annotation>
			<xs:documentation>Each index refers to an axis.  The order of indices gives meaning to the note/@location list of index values.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="axisIdRef" type="xs:IDREF" use="required">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="integer">
		<xs:annotation>
			<xs:documentation>ASCII representation of an integer type  number  specification</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="type" default="decimal">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="decimal"/>
						<xs:enumeration value="octal"/>
						<xs:enumeration value="hexadecimal"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="length" type="xs:unsignedByte" use="required">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="signed" default="true">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:boolean">
						<xs:enumeration value="true"/>
						<xs:enumeration value="false"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="locationOrder">
		<xs:annotation>
			<xs:documentation>Specifies the axis order in note/@location list of index values.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="index" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="newLine">
		<xs:annotation>
			<xs:documentation>resolves to any OS dependent EOL character or pair of characters.</xs:documentation>
		</xs:annotation>
		<xs:complexType/>
	</xs:element>
	<xs:element name="notes">
		<xs:annotation>
			<xs:documentation>holds a series of note elements</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="locationOrder" minOccurs="0"/>
				<xs:element name="note" type="noteType" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="parameterGroup">
		<xs:annotation>
			<xs:documentation>groups parameters under a common name</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice maxOccurs="unbounded">
				<xs:element ref="parameter"/>
				<xs:element ref="parameterGroup"/>
			</xs:choice>
			<xs:attribute name="name" type="xs:string"/>
			<xs:attribute name="description" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="readCell">
		<xs:annotation>
			<xs:documentation>I/O directive  to read/write next appropriate datum (use its dataFormat).</xs:documentation>
		</xs:annotation>
		<xs:complexType/>
	</xs:element>
	<xs:element name="recordTerminator">
		<xs:annotation>
			<xs:documentation>string to be used as recordTerminator</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="chars"/>
				<xs:element ref="newLine"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="relation">
		<xs:annotation>
			<xs:documentation>states relationship of parent field to one of its siblings.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="description" type="xs:string"/>
			<xs:attribute name="fieldIdRefs" type="xs:IDREFS" use="required">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="role" type="xs:NMTOKENS" use="required">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="d7" type="xs:string"/>
	<xs:element name="repeat">
		<xs:annotation>
			<xs:documentation>number of times to repeat contained I/O instructions</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice maxOccurs="unbounded">
				<xs:element ref="readCell"/>
				<xs:element ref="skip"/>
				<xs:element ref="repeat"/>
			</xs:choice>
			<xs:attribute name="count" use="required">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:unsignedByte">
						<xs:minInclusive value="2"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="row" type="anyTypeList">
		<xs:annotation>
			<xs:documentation>A white space delimited row of data for simple tables.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="rowAxis">
		<xs:annotation>
			<xs:documentation>An axis for simple 2-d arrays  that corresponds to the rows</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:choice minOccurs="0">
					<xs:element ref="units"/>
					<xs:element ref="unitless"/>
				</xs:choice>
				<xs:choice minOccurs="0">
					<xs:element ref="value"/>
					<xs:element ref="valueList"/>
					<xs:element ref="valueGroup"/>
				</xs:choice>
			</xs:sequence>
			<xs:attributeGroup ref="axisAttributes"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="skip">
		<xs:annotation>
			<xs:documentation>I/O instruction to ski number of chars on input and print certain chars on output.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice maxOccurs="unbounded">
				<xs:element ref="chars"/>
				<xs:element ref="newLine"/>
				<xs:element ref="whiteSpace"/>
				<xs:element ref="tab"/>
				<xs:element ref="bits"/>
			</xs:choice>
		</xs:complexType>
	</xs:element>
	<xs:element name="string">
		<xs:annotation>
			<xs:documentation>info on ASCII string data format </xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="length" type="xs:unsignedByte" use="required">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="tagToAxisMap">
		<xs:annotation>
			<xs:documentation>indicates which axis index to increment when a given tag is encoutered in the data.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="tag" use="required">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="d0"/>
						<xs:enumeration value="d1"/>
						<xs:enumeration value="d2"/>
						<xs:enumeration value="d3"/>
						<xs:enumeration value="d4"/>
						<xs:enumeration value="d5"/>
						<xs:enumeration value="d6"/>
						<xs:enumeration value="d7"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="axisIdRef" type="xs:IDREF" use="required">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="tagged">
		<xs:annotation>
			<xs:documentation>indicates data will be tagged (with d0-d7 or row or column tags).</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="tagToAxisMap" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="unit">
		<xs:annotation>
			<xs:documentation>a physical unit to be multiplies with others to create fully parsed units.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:annotation>
				<xs:documentation/>
			</xs:annotation>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:attribute name="power" type="xs:decimal"/>
					<xs:attribute name="description" type="xs:string"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="unitless">
		<xs:annotation>
			<xs:documentation>indicates that the quantity has no units</xs:documentation>
		</xs:annotation>
		<xs:complexType/>
	</xs:element>
	<xs:element name="units">
		<xs:annotation>
			<xs:documentation>holds a set of unit elements</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="unit" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="factor" type="xs:float">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="name" type="xs:string">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="description" type="xs:string">
				<xs:annotation>
					<xs:documentation/>
				</xs:annotation>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="value">
		<xs:annotation>
			<xs:documentation>container for a parameter value</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:attribute name="valueId" type="xs:ID">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="valueRef" type="xs:IDREF">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="special">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
						<xs:simpleType>
							<xs:restriction base="xs:NMTOKEN">
								<xs:enumeration value="infinite"/>
								<xs:enumeration value="infiniteNegative"/>
								<xs:enumeration value="noData"/>
								<xs:enumeration value="notANumber"/>
								<xs:enumeration value="underflow"/>
								<xs:enumeration value="overflow"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
					<xs:attribute name="inequality">
						<xs:annotation>
							<xs:documentation>Use with @mark to indicate a special meaning to a value in a field or array.  Note should be nill.</xs:documentation>
						</xs:annotation>
						<xs:simpleType>
							<xs:restriction base="xs:NMTOKEN">
								<xs:enumeration value="lessThan"/>
								<xs:enumeration value="lessThanOrEqual"/>
								<xs:enumeration value="greaterThan"/>
								<xs:enumeration value="greaterThanOrEqual"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
					<xs:attribute name="positiveErrorValue" type="xs:NMTOKEN">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="negativeErrorValue" type="xs:NMTOKEN">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="valueGroup">
		<xs:annotation>
			<xs:documentation>groups together a set of value and valueList under a common name</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:choice maxOccurs="unbounded">
				<xs:element ref="value"/>
				<xs:element ref="valueList"/>
				<xs:element ref="valueGroup"/>
			</xs:choice>
			<xs:attribute name="name" type="xs:string"/>
			<xs:attribute name="description" type="xs:string"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="valueList">
		<xs:annotation>
			<xs:documentation>a delimited set of values.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:attribute name="size" type="xs:NMTOKEN">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="delimiter" default=" ">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
						<xs:simpleType>
							<xs:restriction base="xs:string">
								<xs:whiteSpace value="preserve"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
					<xs:attribute name="repeatable" default="false">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
						<xs:simpleType>
							<xs:restriction base="xs:boolean">
								<xs:enumeration value="true"/>
								<xs:enumeration value="false"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
					<xs:attribute name="start" type="xs:float">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="step" type="xs:float">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="valueListId" type="xs:ID">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="valueListIdRef" type="xs:IDREF">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="infiniteValue" type="xs:string">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="infiniteNegativeValue" type="xs:string">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="noDataValue" type="xs:string">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="notANumberValue" type="xs:string">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="underflowValue" type="xs:string">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="overflowValue" type="xs:string">
						<xs:annotation>
							<xs:documentation/>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="whiteSpace">
		<xs:annotation>
			<xs:documentation>Any white space character (tab, space, form feed, CR, NL)</xs:documentation>
		</xs:annotation>
		<xs:complexType/>
	</xs:element>
	<xs:element name="tab">
		<xs:annotation>
			<xs:documentation>the tab character</xs:documentation>
		</xs:annotation>
		<xs:complexType/>
	</xs:element>
</xs:schema>
