﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="iwanQuery"
					 targetNamespace="http://schemas.webs.idu.de/iwan/Query"
					 elementFormDefault="qualified"
					 xmlns="http://schemas.webs.idu.de/iwan/Query"
					 xmlns:mstns="http://schemas.webs.idu.de/iwan/Query"
					 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
					 xmlns:xslt="http://www.w3.org/1999/XSL/Transform"
					 xmlns:xs="http://www.w3.org/2001/XMLSchema"
					 xmlns:dt="urn:schemas-microsoft-com:datatypes"
					 >
	<!--
//////////////////////////////////////////////////////////////////////////////////
Einige allgemeine einfache Typen
//////////////////////////////////////////////////////////////////////////////////
-->
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		Value_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="Value_Type">
		<xs:choice>
			<xs:element name="String" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
			<xs:element name="Int" type="xs:int" minOccurs="1" maxOccurs="unbounded"/>
			<xs:element name="Long" type="xs:long" minOccurs="1" maxOccurs="unbounded"/>
			<xs:element name="Double" type="xs:double" minOccurs="1" maxOccurs="unbounded"/>
			<xs:element name="DateTime" type="xs:dateTime" minOccurs="1" maxOccurs="unbounded"/>
			<xs:element name="Decimal" type="xs:decimal" minOccurs="1" maxOccurs="unbounded"/>
			<xs:element name="Bool" type="xs:boolean" />
		</xs:choice>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		unsignedLongGe0					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="unsignedLongGe0">
		<xs:restriction base="xs:unsignedLong">
			<xs:minInclusive value="0" />
		</xs:restriction>
	</xs:simpleType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		unsignedLongGe1					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="unsignedLongGe1">
		<xs:restriction base="xs:unsignedLong">
			<xs:minInclusive value="1" />
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ColumnName_Type">
		<xs:restriction base="xs:string">
			<xs:minLength value="1"/>
		</xs:restriction>
	</xs:simpleType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		CompareBehaviorType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="CompareBehaviorType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Default">
				<xs:annotation>
					<xs:documentation>
						Standard-Suche, Case Vergleich von String's, OR Vergleich, wenn mehrere Werte übergeben wurden
					</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="CompareStringsCaseInSensitiv">
				<xs:annotation>
					<xs:documentation>
						String-Vergleich ohne Beachtung der Groß / Kleinschreibung durchführen
					</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="CompareCollectionsWithAnd">
				<xs:annotation>
					<xs:documentation>
						Wenn bei einer Abfrage eine Auflistung übergeben wird, werden die Werte per Default mit OR verglichen, wenn diese Flag gesetzt ist, wird statt dessen "And" verwendet
					</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
		</xs:restriction>
	</xs:simpleType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		OperatorType					
		Hinweis: Identisch mit IDU.DB.QueryBuilder.CompareOperator
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="OperatorType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Equal" />
			<xs:enumeration value="NotEqual" />
			<xs:enumeration value="Greater" />
			<xs:enumeration value="GreaterEqual" />
			<xs:enumeration value="Less" />
			<xs:enumeration value="LessEqual" />
			<xs:enumeration value="Like" />
			<xs:enumeration value="NotLike" />
			<xs:enumeration value="In" />
			<xs:enumeration value="NotIn" />
			<xs:enumeration value="Between" />
			<xs:enumeration value="IsNull" />
			<xs:enumeration value="IsNotNull" />
		</xs:restriction>
	</xs:simpleType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		GeomOperatorType					
		Hinweis: Identisch mit IDU.DB.QueryBuilder.GeomCompareOperator
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="GeomOperatorType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="DefaultRelateT8Stars">
				<xs:annotation>
					<xs:documentation>
						ein Relate mit der Maske T*******
					</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="BBoxCompare">

			</xs:enumeration>
		</xs:restriction>
	</xs:simpleType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		SortOrder					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="SortOrder">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Ascend"></xs:enumeration>
			<xs:enumeration value="Descend"></xs:enumeration>
		</xs:restriction>
	</xs:simpleType>
	<!--
//////////////////////////////////////////////////////////////////////////////////
Datenausführungsplan
//////////////////////////////////////////////////////////////////////////////////
-->
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		QueryElementBase_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType abstract="true" name="QueryElementBase_Type">
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		PlanExecution_OutputHint					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType abstract="false" name="Query_OutputHint">
		<xs:annotation>
			<xs:documentation>
				Weitere Parameter, die das Abrufen der Daten beeinflussen (Sortierung, Limit, Distinct)
			</xs:documentation>
		</xs:annotation>
		<xs:choice>
			<xs:element name="CountOnly" minOccurs="1" maxOccurs="1">
				<xs:annotation>
					<xs:documentation>Gibt nur die Zeilenzahl zurück</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Records" minOccurs="1" maxOccurs="1">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Columns" minOccurs="0" maxOccurs="1">
							<xs:annotation>
								<xs:documentation>Optionale Liste der Ausgabespalten, ist das Element nicht vorhanden, werden alle Spalten zurückgegeben, wenn vorhanden dann nur die angegebenen.</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Col" type="ColumnName_Type" minOccurs="0" maxOccurs="unbounded"/>
								</xs:sequence>
								<xs:attribute name="embedPrimaryGeometry" default="true" type="xs:boolean"/>
							</xs:complexType>
						</xs:element>
						<xs:element name="Order" minOccurs="0" maxOccurs="1" nillable="false">
							<xs:annotation>
								<xs:documentation>
									Spalten, nach der eine Sortierung erfolgen soll.
								</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Column" minOccurs="1" maxOccurs="unbounded">
										<xs:annotation>
											<xs:documentation>Der Name der Spalte nach der die Sortierung vorgenommen werden soll.</xs:documentation>
										</xs:annotation>
										<xs:complexType>
											<xs:simpleContent>
												<xs:extension base="ColumnName_Type">
													<xs:attribute name="direction" default="Ascend" type="SortOrder">
														<xs:annotation>
															<xs:documentation>Sortierrichtung, Aufsteigen (Ascend, Standard) ober Absteigen (Descend)</xs:documentation>
														</xs:annotation>
													</xs:attribute>
												</xs:extension>
											</xs:simpleContent>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="Limit" minOccurs="0" maxOccurs="1" type="unsignedLongGe0">
							<xs:annotation>
								<xs:documentation>
									Beschränkung der Anzahl der abzurufenden Zeilen.
								</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
					<xs:attribute name="distinct" default="false" type="xs:boolean"/>
				</xs:complexType>
			</xs:element>
		</xs:choice>
	</xs:complexType>

	<!--
//////////////////////////////////////////////////////////////////////////////////
  Alles rund um Aggregate
//////////////////////////////////////////////////////////////////////////////////
-->
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		AggregateFunction_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="AggregateFunction_Type">
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		AggregateFunctionWithColumn_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="AggregateFunctionWithColumn_Type">
		<xs:complexContent>
			<xs:extension base="AggregateFunction_Type">
				<xs:sequence>
					<xs:element name="ColumnName" type="ColumnName_Type">
						<xs:annotation>
							<xs:documentation>
								Der Name der Spalte aus der vorhergenden Operation.
								Für die Weiterverarbeitung sollte ein alias vergeben werden, wenn nicht, wird automatisch {Function}_{ColName} genommen (Bsp.: MIN_MeineSpalte)
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		Aggregate_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="Aggregate_Type">
		<xs:annotation>
			<xs:documentation>
				Definiert Spaltenbezogenen Aggregatfunktionen und Gruppierungen.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="QueryElementBase_Type">
				<xs:sequence>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="Min" type="AggregateFunctionWithColumn_Type"/>
						<xs:element name="Max" type="AggregateFunctionWithColumn_Type"/>
						<xs:element name="Avg" type="AggregateFunctionWithColumn_Type"/>
						<xs:element name="Sum" type="AggregateFunctionWithColumn_Type"/>
						<xs:element name="Count" type="AggregateFunctionWithColumn_Type"/>
						<xs:element name="GeomUnion" type="AggregateFunctionWithColumn_Type"/>
					</xs:choice>
					<xs:element name="GroupBy" type="ColumnName_Type" minOccurs="0" maxOccurs="unbounded">
						<xs:annotation>
							<xs:documentation>
								Spaltenweise Gruppierungen
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		AnyComparisonBaseType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="AnyComparisonBaseType" abstract="true">
		<xs:attribute name="negateExpression" type="xs:boolean" default="false">
			<xs:annotation>
				<xs:documentation>Gibt an, ob der Ausdruck "verneint" werden soll.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ComparisonBaseType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ComparisonBaseType" abstract="true">
		<xs:complexContent>
			<xs:extension base="AnyComparisonBaseType"></xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		StringValue					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="StringValue">
		<xs:simpleContent>
			<xs:extension base="xs:string">
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		SingleComparisonType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="SingleComparisonType" abstract="false" final="#all">
		<xs:annotation>
			<xs:documentation>
				Erlaubt die Defintion eines Vergleichsausdruck. Kann als Bestandteil einer CombinedComparisonBaseType für die Formulierung komplexen Ausdrücke verwendet werden.
			</xs:documentation>
			<xs:documentation>
				Für Geomtrievergleiche steht der Typ SingleGeomComparisonType zur Verfügung.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ComparisonBaseType">
				<xs:sequence>
					<xs:choice>
						<xs:annotation>
							<xs:documentation>Die Datenquelle für die linke Seite des Vergleichs</xs:documentation>
						</xs:annotation>
						<xs:element name="ColumnName" type="ColumnName_Type" nillable="false"/>
					</xs:choice>
					<xs:element name="Is" type="OperatorType" minOccurs="1" maxOccurs="1">
						<xs:annotation>
							<xs:documentation>
								Die Art des Vergleichs / Vergleichsoperator
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:choice>
						<xs:annotation>
							<xs:documentation>Die Datenquelle für die rechte Seite des Vergleichs</xs:documentation>
						</xs:annotation>
						<xs:element name="Value" maxOccurs="1" minOccurs="1" type="Value_Type" nillable="true" />
						<xs:element name="CompareColumn" type="ColumnName_Type" nillable="false" maxOccurs="1" minOccurs="1" />
					</xs:choice>
				</xs:sequence>
				<xs:attribute name="compareBehavior" default="Default">
					<xs:simpleType>
						<xs:list itemType="CompareBehaviorType"/>
					</xs:simpleType>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		SingleGeomComparisonType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="SingleGeomComparisonType" abstract="false" final="#all">
		<xs:annotation>
			<xs:documentation>
				Erlaubt die Defintion eines Vergleichsausdruck für Geometrien. Kann als Bestandteil einer CombinedComparisonBaseType für die Formulierung komplexen Ausdrücke verwendet werden.
			</xs:documentation>
			<xs:documentation>
				Für alle anderen Datentypen steht der Typ SingleComparisonType zur Verfügung.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ComparisonBaseType">
				<xs:sequence>
					<xs:element name="ColumnName" type="xs:string" nillable="false"/>
					<xs:element name="Is" type="GeomOperatorType" minOccurs="1" maxOccurs="1" />
					<xs:choice>
						<xs:element name="Value" minOccurs="1" maxOccurs="unbounded" type="xs:string" nillable="false">
							<xs:annotation>
								<xs:documentation>
									Eine Geometrie Konstante (WKT,WKB, Iwan).
								</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="CompareColumn" type="ColumnName_Type" nillable="false" maxOccurs="1" minOccurs="1" />
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		CombinedComparisonBaseType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="CombinedComparisonBaseType" abstract="true">
		<xs:annotation>
			<xs:documentation>
				Erlaubt die Defintion eines komplexen Vergleichsausdruck. Das Blatt des Ausdrucksbaumes muss in einer Single(Geom)Comparison enden.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ComparisonBaseType">
				<xs:sequence>
					<xs:choice minOccurs="2" maxOccurs="unbounded">
						<xs:element name="SingleComparison" type="SingleComparisonType" />
						<xs:element name="SingleGeomComparison" type="SingleGeomComparisonType" />
						<xs:element name="And" type="CombinedComparisonAndType" />
						<xs:element name="Or" type="CombinedComparisonOrType" />
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		CombinedComparisonAndType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="CombinedComparisonAndType" final="#all">
		<xs:complexContent>
			<xs:extension base="CombinedComparisonBaseType">
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		CombinedComparisonOrType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="CombinedComparisonOrType" final="#all">
		<xs:complexContent>
			<xs:extension base="CombinedComparisonBaseType">
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		Filter_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="Filter_Type">
		<xs:complexContent>
			<xs:extension base="QueryElementBase_Type">
				<xs:sequence>
					<xs:choice minOccurs="1" maxOccurs="1">
						<xs:element name="SingleComparison" type="SingleComparisonType" />
						<xs:element name="SingleGeomComparison" type="SingleGeomComparisonType" />
						<xs:element name="And" type="CombinedComparisonAndType" />
						<xs:element name="Or" type="CombinedComparisonOrType" />
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ComputeColumnFunctionBase_Type" abstract="true">
		<xs:attribute name="targetColumnName" type="ColumnName_Type">
			<xs:annotation>
				<xs:documentation>
					Name der Ausgabespalte
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<!-- WIP ! -->
	<xs:complexType name="Processor_Type">
		<xs:complexContent>
			<xs:extension base="QueryElementBase_Type">
				<xs:choice maxOccurs="unbounded" minOccurs="1">
					<xs:element name="ST_Area">
					</xs:element>
				</xs:choice>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		QueryType_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="QueryType_Type">
		<xs:annotation>
			<xs:documentation>Der Plan für eine Datenbeschaffung. Im Ergebnis wird immer ein IDataReader dem Aufrufer zur Verfügung gestellt.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Compute" minOccurs="0" maxOccurs="1"  nillable="false" type="Processor_Type">
			</xs:element>
			<xs:element name="Aggregate" minOccurs="0" maxOccurs="1" nillable="false" type="Aggregate_Type">
			</xs:element>
			<xs:element name="Filter" minOccurs="0" maxOccurs="1" nillable="false" type="Filter_Type">
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		QueryTypeWithOutputHint_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="QueryTypeWithOutputHint_Type">
		<xs:complexContent>
			<xs:extension base="QueryType_Type">
				<xs:sequence>
					<xs:element name="Return" type="Query_OutputHint" minOccurs="1" maxOccurs="1" nillable="false" >
						<xs:annotation>
							<xs:documentation>
								Hinweis für die Einschränkung und Sortierung.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		Query					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:element name="Query" type="QueryTypeWithOutputHint_Type">
		<xs:annotation>
			<xs:documentation>
				Beschreibt eine Abfrage
			</xs:documentation>
		</xs:annotation>
	</xs:element>
</xs:schema>