<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
	xmlns="http://www.opengis.net/wcps/1.1"
	targetNamespace="http://www.opengis.net/wcps/1.1"
	xmlns:xs="http://www.w3.org/2001/XMLSchema"
	elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1.0" xml:lang="en">
	<xs:annotation>
		<xs:appinfo>wcpsProcessCoverages.xsd</xs:appinfo>
		<xs:documentation>
			This schema defines the WCPS 1.1 ProcessCoverages operation request elements and types, used by an OGC Web Coverage Service (WCS) Processing Extension, see OGC 08-059r3.
			A WCPS query can be sent either as XML tree or as a string encoded in the Abstract Syntax defined in OGC Web Coverage Processing Service (WCPS).
			Copyright (c) 2020 Open Geospatial Consortium.
			To obtain additional rights of use, visit http://www.opengeospatial.org/legal/.
	</xs:documentation>
	</xs:annotation>
	<!-- =============================================================
	includes and imports
	============================================================== -->

	<!-- ==============================================================
	elements and types
	=============================================================== -->
	<xs:element name="ProcessCoveragesRequest" type="ProcessCoveragesRequestType">
		<xs:annotation>
			<xs:documentation>Encoding of a WCPS request in XML, to be used, for example, in a WCS Processing POST request.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:complexType name="ProcessCoveragesRequestType">
		<xs:choice>
			<xs:element name="xmlSyntax" type="ProcessCoveragesXmlRequestType"/>
			<xs:element name="abstractSyntax" type="xs:string"/>
		</xs:choice>
	</xs:complexType>

	<!-- xWCPS extensions -->
	<xs:complexType name="ProcessCoveragesXmlRequestType">
		<xs:annotation>
			<xs:documentation>ProcessCoverages XML query structure.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="coverageIterator" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="iteratorVar" type="VariableNameType"/>
						<xs:element name="coverageName" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="letExpr" type="LetExprType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="where" type="BooleanScalarExprType" minOccurs="0"/>
			<xs:group ref="ProcessingExprType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="LetExprType">
		<xs:sequence>
			<xs:element name="variableName" type="xs:string"/>
			<xs:group ref="ProcessingExprType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="xWcpsCoverageXontructorExprType">
		<xs:sequence>
			<xs:element name="name" type="xs:string"/>
			<xs:element name="coverageType" type="xs:string"/>
			<xs:element name="domainSetExpr" type="DomainSetExprType" minOccurs="0"/>
			<xs:element name="rangeTypeExpr" type="RangeTypeExprType" minOccurs="0"/>
			<xs:element name="rangeSetExpr" type="ScalarExprType"/>
			<xs:element name="metadataExpr" type="xs:string" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="DomainSetExprType">
		<xs:sequence>
			<xs:element name="crs" type="xs:string"/>
			<xs:element name="axis" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="axisName" type="xs:string"/>
						<xs:element name="axisDef" type="AxisDefType"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="interpolationMethod" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="AxisDefType">
		<xs:choice>
			<xs:element name="indexAxis" type="IndexAxisType"/>
			<xs:element name="RegularAxis" type="RegularAxisType"/>
			<xs:element name="IrregularAxis" type="IrregularAxisType"/>
		</xs:choice>
	</xs:complexType>
	<xs:complexType name="IndexAxisType">
		<xs:sequence>
			<xs:element name="lo" type="xs:integer"/>
			<xs:element name="hi" type="xs:integer"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="RegularAxisType">
		<xs:sequence>
			<xs:element name="lo" type="xs:string"/>
			<xs:element name="hi" type="xs:string"/>
			<xs:element name="resolution" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="IrregularAxisType">
		<xs:sequence>
			<xs:element name="pos" type="xs:string" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="RangeTypeExprType">
		<xs:sequence>
			<xs:element name="rangeComponent" type="RangeComponentType" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="RangeComponentType">
		<xs:sequence>
			<xs:element name="fieldName" type="xs:string"/>
			<xs:element name="type" type="xs:string"/>
			<xs:element name="nil" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- xWCPS extensions -->

	<xs:group name="ProcessingExprType">
		<xs:choice>
			<xs:element name="encode" type="EncodeDataExprType"/>
			<xs:group ref="ScalarExprType"/>
		</xs:choice>
	</xs:group>
	<xs:complexType name="EncodeDataExprType">
		<xs:sequence>
			<xs:element name="coverage" type="CoverageExprType"/>
			<xs:element name="format" type="xs:string"/>
			<xs:element name="extraParameters" type="xs:string" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:group name="ScalarExprType">
		<xs:choice>
			<xs:group ref="MetadataScalarExprType"/>
			<xs:group ref="BooleanScalarExprType"/>
			<xs:group ref="NumericScalarExprType"/>
			<xs:group ref="ReduceScalarExprType"/>
			<xs:group ref="StringScalarExprType"/>
			<xs:element name="XpathExprType" type="xs:string"/> <!-- constraint: contains valid XPath expression -->
		</xs:choice>
	</xs:group>
	<xs:complexType name="ScalarExprType">
		<xs:group ref="ScalarExprType"/>
	</xs:complexType>
	<xs:group name="MetadataScalarExprType">
		<xs:choice>
			<xs:element name="identifier" type="CoverageExprType"/>
			<xs:element name="crs" type="CoverageExprType"/>
			<xs:group ref="DomainMetadataExprType"/>
			<xs:element name="indexCrs" type="CoverageExprType"/>
			<xs:element name="indexDomain">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="coverage" type="CoverageExprType"/>
						<xs:element name="axis" type="AxisNameType" minOccurs="0"/>
						<xs:element name="limit" type="xs:string" minOccurs="0"/> <!-- lo or hi admissible -->
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="nullSet" type="CoverageExprType"/>
			<xs:element name="interpolationSet">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="coverage" type="CoverageExprType"/>
						<xs:group ref="FieldNameType"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="metadata" type="CoverageExprType"/>
			<xs:element name="setIdentifier">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="coverage" type="CoverageExprType"/>
						<xs:element name="newName" type="xs:string"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="setNull">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="coverage" type="CoverageExprType"/>
						<xs:element name="nil" type="RangeExprType" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="setInterpolation">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="coverage" type="CoverageExprType"/>
                                                <xs:element name="interpolationMethod" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="setMetadata">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="coverage" type="CoverageExprType"/>
						<xs:element name="metadata" type="xs:string"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:choice>
	</xs:group>
	<xs:complexType name="DomainMetadataExprType">
		<xs:sequence>
			<xs:group ref="DomainMetadataExprType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:group name="DomainMetadataExprType">
		<xs:sequence>
			<xs:element name="coverage" type="CoverageExprType"/>
			<xs:element name="axis" type="AxisNameType"/>
			<xs:group ref="CrsDefType"/>
		</xs:sequence>
	</xs:group>
	<xs:group name="BooleanScalarExprType">
		<xs:choice>
			<xs:element name="booleanConstant" type="xs:boolean"/>
			<xs:element name="booleanNot" type="BooleanScalarExprType"/>
			<xs:element name="booleanAnd" type="BooleanScalarExprPairType"/>
			<xs:element name="booleanOr" type="BooleanScalarExprPairType"/>
			<xs:element name="booleanXor" type="BooleanScalarExprPairType"/>
			<xs:element name="booleanLessThan" type="NumericScalarExprPairType"/>
			<xs:element name="booleanLessOrEqual" type="NumericScalarExprPairType"/>
			<xs:element name="booleanGreaterThan" type="NumericScalarExprPairType"/>
			<xs:element name="booleanGreaterOrEqual" type="NumericScalarExprPairType"/>
			<xs:element name="booleanEqualNumeric" type="NumericScalarExprPairType"/>
			<xs:element name="booleanNotEqualNumeric" type="NumericScalarExprPairType"/>
			<xs:element name="booleanEqualString" type="StringScalarExprPairType"/>
			<xs:element name="booleanNotEqualString" type="StringScalarExprPairType"/>
		</xs:choice>
	</xs:group>
	<xs:complexType name="BooleanScalarExprType">
		<xs:group ref="BooleanScalarExprType"/>
	</xs:complexType>
	<xs:complexType name="BooleanScalarExprPairType">
		<xs:sequence>
			<xs:group ref="BooleanScalarExprType"/>
			<xs:group ref="BooleanScalarExprType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="NumericScalarExprPairType">
		<xs:sequence>
			<xs:group ref="NumericScalarExprType"/>
			<xs:group ref="NumericScalarExprType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="StringScalarExprPairType">
		<xs:sequence>
			<xs:group ref="StringScalarExprType"/>
			<xs:group ref="StringScalarExprType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:group name="NumericScalarExprType">
		<xs:choice>
			<xs:element name="numericConstant" type="xs:double"/>
			<xs:element name="complexConstant" type="ComplexConstantType"/>
			<xs:element name="numericUnaryMinus">
				<xs:complexType>
					<xs:sequence>
						<xs:group ref="NumericScalarExprType"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="numericAdd" type="NumericScalarExprPairType"/>
			<xs:element name="numericMinus" type="NumericScalarExprPairType"/>
			<xs:element name="numericMult" type="NumericScalarExprPairType"/>
			<xs:element name="numericDiv" type="NumericScalarExprPairType"/>
			<xs:element name="condense" type="CondenseScalarExprType"/>
			<xs:element name="reduce" type="ReduceScalarExprType"/>
		</xs:choice>
	</xs:group>
	<xs:group name="StringScalarExprType">
		<xs:choice>
			<xs:element name="stringIdentifier" type="CoverageExprType"/>
			<xs:element name="stringConstant" type="xs:string"/>
		</xs:choice>
	</xs:group>
	<xs:group name="SetMetadataCoverageExprType">
		<xs:choice>
			<xs:element name="setIdentifier">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="coverage" type="CoverageExprType"/>
						<xs:element name="identifier" type="xs:string"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="setNull">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="coverage" type="CoverageExprType"/>
						<xs:element name="null" type="RangeExprType" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="setInterpolation">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="coverage" type="CoverageExprType"/>
						<xs:element name="interpolationMethod" type="xs:string"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:choice>
	</xs:group>
	<xs:complexType name="RangeExprType">
		<xs:sequence>
			<xs:element name="component" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="field" type="FieldNameType"/>
						<xs:group ref="ScalarExprType"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="CoverageExprType">
		<xs:choice>
			<xs:element name="coverage" type="xs:string"/>
			<xs:group ref="SetMetadataCoverageExprType"/>
			<xs:group ref="InducedOperationCoverageExprType"/>
			<xs:group ref="SubsetOperationCoverageExprType"/>
			<xs:element name="crsTransform" type="CrsTransformCoverageExprType"/>
			<xs:element name="scale" type="ScaleCoverageExprType"/>
			<xs:element name="construct" type="ConstructCoverageExprType"/>
			<xs:element name="const" type="ConstantCoverageExprType"/>
		</xs:choice>
	</xs:complexType>
	<xs:group name="InducedOperationCoverageExprType">
		<xs:choice>
			<xs:group ref="UnaryOperationCoverageExprType"/>
			<xs:group ref="BinaryOperationCoverageExprType"/>
			<xs:element name="rangeConstructor" type="RangeCoverageExprType"/>
		</xs:choice>
	</xs:group>
	<xs:group name="UnaryOperationCoverageExprType">
		<xs:choice>
			<xs:element name="unaryPlus" type="CoverageExprType"/>
			<xs:element name="unaryMinus" type="CoverageExprType"/>
			<xs:element name="sqrt" type="CoverageExprType"/>
			<xs:element name="abs" type="CoverageExprType"/>
			<xs:element name="exp" type="CoverageExprType"/>
			<xs:element name="log" type="CoverageExprType"/>
			<xs:element name="ln" type="CoverageExprType"/>
			<xs:element name="sin" type="CoverageExprType"/>
			<xs:element name="cos" type="CoverageExprType"/>
			<xs:element name="tan" type="CoverageExprType"/>
			<xs:element name="sinh" type="CoverageExprType"/>
			<xs:element name="cosh" type="CoverageExprType"/>
			<xs:element name="tanh" type="CoverageExprType"/>
			<xs:element name="arcsin" type="CoverageExprType"/>
			<xs:element name="arccos" type="CoverageExprType"/>
			<xs:element name="arctan" type="CoverageExprType"/>
			<xs:element name="not" type="CoverageExprType"/>
			<xs:element name="re" type="CoverageExprType"/>
			<xs:element name="im" type="CoverageExprType"/>
			<xs:element name="bit">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="coverage" type="CoverageExprType"/>
						<xs:element name="bitIndex" type="xs:integer"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="cast">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="coverage" type="CoverageExprType"/>
						<xs:element name="type" type="RangeFieldType"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="fieldSelect">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="coverage" type="CoverageExprType"/>
						<xs:element name="field" type="FieldNameType"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:choice>
	</xs:group>
	<xs:simpleType name="RangeFieldType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="bool"/>
			<xs:enumeration value="char"/>
			<xs:enumeration value="unsigned char"/>
			<xs:enumeration value="short"/>
			<xs:enumeration value="unsigned short"/>
			<xs:enumeration value="long"/>
			<xs:enumeration value="unsigned long"/>
			<xs:enumeration value="float"/>
			<xs:enumeration value="double"/>
			<xs:enumeration value="complex"/>
			<xs:enumeration value="complex2"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:group name="BinaryOperationCoverageExprType">
		<xs:choice>
			<xs:element name="plus" type="CoverageExprPairType"/>
			<xs:element name="minus" type="CoverageExprPairType"/>
			<xs:element name="mult" type="CoverageExprPairType"/>
			<xs:element name="div" type="CoverageExprPairType"/>
			<xs:element name="and" type="CoverageExprPairType"/>
			<xs:element name="or" type="CoverageExprPairType"/>
			<xs:element name="xor" type="CoverageExprPairType"/>
			<xs:element name="equals" type="CoverageExprPairType"/>
			<xs:element name="lessThan" type="CoverageExprPairType"/>
			<xs:element name="greaterThan" type="CoverageExprPairType"/>
			<xs:element name="lessOrEqual" type="CoverageExprPairType"/>
			<xs:element name="greaterOrEqual" type="CoverageExprPairType"/>
			<xs:element name="notEqual" type="CoverageExprPairType"/>
			<xs:element name="overlay" type="CoverageExprPairType"/>
		</xs:choice>
	</xs:group>
	<xs:complexType name="CoverageExprPairType">
		<xs:choice>
			<xs:sequence>
				<xs:element name="op1Cov" type="CoverageExprType"/>
				<xs:element name="op2Cov" type="CoverageExprType"/>
			</xs:sequence>
			<xs:sequence>
				<xs:element name="op1" type="CoverageExprType"/>
				<xs:group ref="ScalarExprType"/>
			</xs:sequence>
			<xs:sequence>
				<xs:group ref="ScalarExprType"/>
				<xs:element name="op2" type="CoverageExprType"/>
			</xs:sequence>
		</xs:choice>
	</xs:complexType>
	<xs:complexType name="RangeCoverageExprType">
		<xs:sequence>
			<xs:element name="component" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="field" type="FieldNameType"/>
						<xs:element name="coverage" type="CoverageExprType"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:group name="SubsetOperationCoverageExprType">
		<xs:choice>
			<xs:element name="trim" type="TrimCoverageExprType"/>
			<xs:element name="slice" type="SliceCoverageExprType"/>
			<xs:element name="extend" type="ExtendCoverageExprType"/>
		</xs:choice>
	</xs:group>
	<xs:complexType name="TrimCoverageExprType">
		<xs:sequence>
			<xs:element name="coverage" type="CoverageExprType"/>
			<xs:group ref="DimensionIntervalType" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="SliceCoverageExprType">
		<xs:sequence>
			<xs:element name="coverage" type="CoverageExprType"/>
			<xs:group ref="DimensionPointType" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ExtendCoverageExprType">
		<xs:sequence>
			<xs:element name="coverage" type="CoverageExprType"/>
			<xs:group ref="DimensionIntervalType" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ScaleCoverageExprType">
		<xs:sequence>
			<xs:element name="coverage" type="CoverageExprType"/>
			<xs:group ref="DimensionIntervalType" maxOccurs="unbounded"/>
			<xs:element name="interpolationMethod" type="xs:string" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="CrsTransformCoverageExprType">
		<xs:sequence>
			<xs:element name="coverage" type="CoverageExprType"/>
			<xs:group ref="DimensionIntervalType" maxOccurs="unbounded"/>
			<xs:element name="interpolationMethod" type="xs:string" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:group name="DimensionIntervalType">
		<xs:sequence>
			<xs:element name="axis" type="AxisNameType"/>
			<xs:group ref="CrsDefType" minOccurs="0"/>
			<xs:choice>
				<xs:sequence>
					<xs:element name="lowerBound" type="ScalarExprType"/>
					<xs:element name="upperBound" type="ScalarExprType"/>
				</xs:sequence>
				<xs:group ref="DomainMetadataExprType"/>
			</xs:choice>
		</xs:sequence>
	</xs:group>
	<xs:group name="DimensionPointType">
		<xs:sequence>
			<xs:element name="axis" type="AxisNameType"/>
			<xs:group ref="CrsDefType" minOccurs="0"/>
			<xs:element name="slicingPosition" type="ScalarExprType"/>
		</xs:sequence>
	</xs:group>
	<xs:complexType name="ConstructCoverageExprType">
		<xs:sequence>
			<xs:group ref="CoverageNameType"/>
			<xs:element name="axisIterator" type="AxisIteratorType" maxOccurs="unbounded"/>
			<xs:group ref="ScalarExprType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ConstantCoverageExprType">
		<xs:sequence>
			<xs:group ref="CoverageNameType"/>
			<xs:element name="axisIterator" type="AxisIteratorType" maxOccurs="unbounded"/>
			<xs:element name="value" type="ConstantType" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="AxisIteratorType">
		<xs:sequence>
			<xs:element name="iteratorVar" type="VariableNameType"/>
			<xs:element name="axis" type="AxisNameType"/>
			<xs:choice>
				<xs:sequence>
					<xs:group ref="NumericScalarExprType"/>
					<xs:group ref="NumericScalarExprType"/>
				</xs:sequence>
				<xs:group ref="ImageCrsDomainMetadataExprType"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:group name="ImageCrsDomainMetadataExprType">
		<xs:sequence>
			<xs:element name="coverage" type="CoverageExprType"/>
			<xs:element name="axis" type="AxisNameType"/>
		</xs:sequence>
	</xs:group>
	<xs:group name="ReduceScalarExprType">
		<xs:choice>
			<xs:element name="all" type="CoverageExprType"/>
			<xs:element name="some" type="CoverageExprType"/>
			<xs:element name="count" type="CoverageExprType"/>
			<xs:element name="add" type="CoverageExprType"/>
			<xs:element name="avg" type="CoverageExprType"/>
			<xs:element name="min" type="CoverageExprType"/>
			<xs:element name="max" type="CoverageExprType"/>
		</xs:choice>
	</xs:group>
	<xs:complexType name="ReduceScalarExprType">
		<xs:group ref="ReduceScalarExprType"/>
	</xs:complexType>
	<xs:complexType name="CondenseScalarExprType">
		<xs:choice>
			<xs:group ref="ReduceScalarExprType"/>
			<xs:group ref="GeneralCondenseExprType"/>
		</xs:choice>
	</xs:complexType>
	<xs:group name="GeneralCondenseExprType">
		<xs:sequence>
			<xs:group ref="CondenseOperationType"/>
			<xs:element name="iterator" type="AxisIteratorType" maxOccurs="unbounded"/>
			<xs:element name="where" type="BooleanScalarExprType" minOccurs="0"/>
			<xs:group ref="ScalarExprType"/>
		</xs:sequence>
	</xs:group>
	<xs:group name="CondenseOperationType">
		<xs:choice>
			<xs:element name="opPlus"/>
			<xs:element name="opMult"/>
			<xs:element name="opMax"/>
			<xs:element name="opMin"/>
			<xs:element name="opAnd"/>
			<xs:element name="opOr"/>
		</xs:choice>
	</xs:group>
	<xs:simpleType name="VariableNameType">
		<xs:restriction base="xs:string">
			<xs:pattern value="[$a-zA-Z_][0-9a-zA-Z_]*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:group name="CoverageNameType">
		<xs:choice>
			<xs:element name="name" type="xs:string"/>
		</xs:choice>
	</xs:group>
	<xs:simpleType name="AxisNameType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="x"/>
			<xs:enumeration value="y"/>
			<xs:enumeration value="z"/>
			<xs:enumeration value="t"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:group name="CrsDefType">
		<xs:sequence>
			<xs:element name="crsDef" type="xs:string"/>
		</xs:sequence>
	</xs:group>
	<xs:group name="FieldNameType">
		<xs:sequence>
			<xs:element name="name" type="xs:string"/>
		</xs:sequence>
	</xs:group>
	<xs:complexType name="FieldNameType">
		<xs:group ref="FieldNameType"/>
	</xs:complexType>
	<xs:complexType name="ConstantType">
		<xs:sequence>
			<xs:group ref="ConstantType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:group name="ConstantType">
		<xs:choice>
			<xs:element name="stringConstant" type="xs:string"/>
			<xs:element name="booleanConstant" type="xs:boolean"/>
			<xs:element name="integerConstant" type="xs:integer"/>
			<xs:element name="floatConstant" type="xs:double"/>
			<xs:element name="complexConstant" type="ComplexConstantType"/>
		</xs:choice>
	</xs:group>
	<xs:complexType name="ComplexConstantType">
		<xs:sequence>
			<xs:element name="re" type="xs:double"/>
			<xs:element name="im" type="xs:double"/>
		</xs:sequence>
	</xs:complexType>
</xs:schema>
