﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="cardoButton"
					 targetNamespace="http://schemas.webs.idu.de/cardo3/Button"
					 elementFormDefault="qualified"
					 xmlns="http://schemas.webs.idu.de/cardo3/Button"
					 xmlns:mstns="http://schemas.webs.idu.de/cardo3/Button"
					 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:iXRH="http://schemas.webs.idu.de/iwan/iXRH"
					 >
<xs:import namespace="http://schemas.webs.idu.de/iwan/iXRH"/>
<!-- 
	Hinweis: Angabe der schemaLocation macht Probleme beim Validieren, das Schema wird als Ressource eingebunden
	schemaLocation="file://D:\Dev\cardoSystem\coreLibs\XmlRelated\Schemas\Iwan\iXRH.xsd">
-->
	<!--
//////////////////////////////////////////////////////////////////////////////////
Einige allgemeine einfache Typen
//////////////////////////////////////////////////////////////////////////////////
-->
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		dbobjectNameString					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="dbobjectNameString">
		<xs:restriction base="xs:string">
			<xs:whiteSpace value="collapse">
			</xs:whiteSpace>
			<xs:maxLength value="255">
			</xs:maxLength>
			<xs:minLength value="1">
			</xs:minLength>
			<xs:pattern value="\$GEOM|([A-Z]([A-Z\._0-9])*)">
			</xs:pattern>
		</xs:restriction>
	</xs:simpleType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		IwanLayerName					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="IwanLayerName">
		<xs:restriction base="xs:token"></xs:restriction>
	</xs:simpleType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		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>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		buttonMatchMode					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="buttonMatchMode">
		<xs:restriction base="xs:string">
			<xs:enumeration value="All">
				<xs:annotation>
					<xs:documentation>
						Alle Datensätze müssen die Bedingung erfüllen.
					</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="Any">
				<xs:annotation>
					<xs:documentation>Einer der Datensätze muss die Bedingung erfüllen.</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
		</xs:restriction>
	</xs:simpleType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		QualifiedColumnName_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="QualifiedColumnName_Type">
		<xs:simpleContent>
			<xs:extension base="dbobjectNameString">
				<xs:attribute name="tableName" use="optional" type="dbobjectNameString">
					<xs:annotation>
						<xs:documentation>
							Der optionale Tabellenname, auf den sich diese Spalte bezieht.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="alias" use="optional" type="dbobjectNameString">
					<xs:annotation>
						<xs:documentation>
							Der optionale Aliasname für diese Spalte, wie er in übergeordneten Prozessen verwendet werden soll.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		NetDataTypes_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="NetDataTypes_Type">
		<xs:restriction base="xs:string">
			<xs:enumeration value="System.String"/>
			<xs:enumeration value="System.Int32"/>
			<xs:enumeration value="System.DateTime" />
			<xs:enumeration value="System.Decimal"/>
			<xs:enumeration value="IDU.GeoLib.Geometry"/>
		</xs:restriction>
	</xs:simpleType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		Value_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="Value_Type" final="#all">
		<xs:annotation>
			<xs:documentation>
				Ein typisierter, konstanter Wert.
			</xs:documentation>
		</xs:annotation>
		<xs:union>
			<xs:simpleType>
				<xs:restriction base="xs:string" />
			</xs:simpleType>
			<xs:simpleType>
				<xs:restriction base="xs:decimal" />
			</xs:simpleType>
			<xs:simpleType>
				<xs:restriction base="xs:float" />
			</xs:simpleType>
			<xs:simpleType>
				<xs:restriction base="xs:boolean" />
			</xs:simpleType>
			<xs:simpleType>
				<xs:restriction base="xs:date" />
			</xs:simpleType>
			<xs:simpleType>
				<xs:restriction base="xs:dateTime"/>
			</xs:simpleType>
			<xs:simpleType>
				<xs:restriction base="xs:base64Binary"></xs:restriction>
			</xs:simpleType>
		</xs:union>
	</xs:simpleType>
	<!--
//////////////////////////////////////////////////////////////////////////////////
Datenausführungsplan
//////////////////////////////////////////////////////////////////////////////////
-->
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		PlanMemberElementBase_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType abstract="true" name="PlanMemberElementBase_Type">
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		PlanExecution_OutputHint					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType abstract="false" name="PlanExecution_OutputHint">
		<xs:annotation>
			<xs:documentation>
				Weitere Parameter, die das Abrufen der Daten beeinflussen (Sortierung, Limit).
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<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="QualifiedColumnName_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:complexType>
	<!--
//////////////////////////////////////////////////////////////////////////////////
Datenquellen
//////////////////////////////////////////////////////////////////////////////////
-->
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonDatasourceBase_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType abstract="true" name="ButtonDatasourceBase_Type">
		<xs:annotation>
			<xs:documentation>
				Basisklasse für alle physischen Datenquellen.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="PlanMemberElementBase_Type">
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonLayerDatasource_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonLayerDatasource_Type">
		<xs:complexContent>
			<xs:extension base="ButtonDatasourceBase_Type">
				<xs:sequence>
					<xs:choice>
						<xs:element name="InternalLayerName" type="IwanLayerName" nillable="false" maxOccurs="1" minOccurs="1">
							<xs:annotation>
								<xs:documentation>
									Der interne Name einer in der aktuellen Mapserver Instanz geladenen Ebene.
								</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="LayerAlias" type="xs:normalizedString" nillable="false" maxOccurs="1" minOccurs="1">
							<xs:annotation>
								<xs:documentation>
									Der "Anwendungsspezifische Name" einer Ebene im cardo3.
								</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonCardoWellknownDatabase_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonCardoWellknownDatabase_Type">
		<xs:complexContent>
			<xs:extension base="ButtonDatasourceBase_Type">
				<xs:sequence>
					<xs:element name="InternalId" type="xs:int" nillable="false" maxOccurs="1" minOccurs="1">
						<xs:annotation>
							<xs:documentation>
								Die ID der in cardo eingestellten Datenbankverbindung. Für diese Datenbankverbindung muss das Attribut "ButtonDataStore" definiert werden.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="BaseQuery" type="xs:string" nillable="false" minOccurs="1" maxOccurs="1">
						<xs:annotation>
							<xs:documentation>
								Ein SQL Statement, welches in der Form SELECT * FROM (..) angegeben werden muss.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
//////////////////////////////////////////////////////////////////////////////////
  Alles rund um Aggregate
//////////////////////////////////////////////////////////////////////////////////
-->
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonAggregateFunction_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonAggregateFunction_Type">
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonAggregateFunctionWithColumn_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonAggregateFunctionWithColumn_Type">
		<xs:complexContent>
			<xs:extension base="ButtonAggregateFunction_Type">
				<xs:sequence>
					<xs:element name="ColumnName" type="QualifiedColumnName_Type">
						<xs:annotation>
							<xs:documentation>
								Der Name der Spalte aus der vorhergehenden 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>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonAggregate_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonAggregate_Type">
		<xs:annotation>
			<xs:documentation>
				Definiert spaltenbezogene Aggregatfunktionen und Gruppierungen.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="PlanMemberElementBase_Type">
				<xs:sequence>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="Min" type="ButtonAggregateFunctionWithColumn_Type"/>
						<xs:element name="Max" type="ButtonAggregateFunctionWithColumn_Type"/>
						<xs:element name="Avg" type="ButtonAggregateFunctionWithColumn_Type"/>
						<xs:element name="Sum" type="ButtonAggregateFunctionWithColumn_Type"/>
						<xs:element name="Count" type="ButtonAggregateFunctionWithColumn_Type"/>
						<xs:element name="CountAll">
							<xs:complexType>
								<xs:complexContent>
									<xs:extension base="ButtonAggregateFunction_Type">
										<xs:attribute name="alias" use="optional" type="dbobjectNameString">
											<xs:annotation>
												<xs:documentation>
													Der optionale Aliasname für diese Spalte, wie er in übergeordneten Prozessen verwendet werden soll. Der Standard ist "CountTotal".
												</xs:documentation>
											</xs:annotation>
										</xs:attribute>
									</xs:extension>
								</xs:complexContent>
							</xs:complexType>
						</xs:element>
						<xs:element name="GeomUnion" type="ButtonAggregateFunctionWithColumn_Type"/>
					</xs:choice>
					<xs:element name="GroupBy" type="QualifiedColumnName_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>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		CompareBehaviorType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="CompareBehaviorType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Default">
				<xs:annotation>
					<xs:documentation>
						Standard-Suche, Vergleich von Strings unter Beachtung der Groß-/Kleinschreibung, 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 stattdessen "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: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>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		FunctionTypes					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="FunctionTypes">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Min" />
			<xs:enumeration value="Max" />
			<xs:enumeration value="Avg" />
			<xs:enumeration value="Count" />
			<xs:enumeration value="CountAll" />
		</xs:restriction>
	</xs:simpleType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		GeomFunctionTypes					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="GeomFunctionTypes">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Union"/>
			<xs:enumeration value="Area"/>
			<xs:enumeration value="Length"/>
			<xs:enumeration value="Centroid"/>
			<xs:enumeration value="Buffer"/>
		</xs:restriction>
	</xs:simpleType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		JoinType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:simpleType name="JoinType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="And">
			</xs:enumeration>
			<xs:enumeration value="Or">
			</xs:enumeration>
		</xs:restriction>
	</xs:simpleType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		AnyComparisonBaseType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="AnyComparisonBaseType" abstract="true">
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonComparisonBaseType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonComparisonBaseType" 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>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		Variable_Reference					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="Variable_Reference">
		<xs:annotation>
			<xs:documentation>
				Zugriff auf den Wert einer vorhandenen Variable.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ButtonScriptFunctions_BaseType">
				<xs:attribute name="storeKey" type="xs:string" default="Default">
					<xs:annotation>
						<xs:documentation>
							Der Schlüssel das Variablenspeichers.
							Vordefinierte Read-Only Stores sind:
							AttachmentStore -> hier kann das Attachment (sofern Textinhalt vorhanden ist) über den Dateinamen abgerufen werden.
							CurrentPlanStore -> nur wenn ein Ausführungsplan vorhanden ist. In diesem Fall sind folgende Variablen vorhanden.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="key" type="xs:string"></xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		SingleComparisonType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="SingleComparisonType" abstract="false" final="#all">
		<xs:annotation>
			<xs:documentation>
				Erlaubt die Definition eines Vergleichsausdruckes. Kann als Bestandteil einer CombinedComparisonBaseType für die Formulierung komplexer 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="ButtonComparisonBaseType">
				<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="dbobjectNameString" nillable="false"/>
						<xs:element name="ValueRef" type="Variable_Reference" nillable="false" />
						<xs:element name="ResultValue" type="ButtonScriptFunctions_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 minOccurs="0">
						<xs:annotation>
							<xs:documentation>Die Datenquelle für die rechte Seite des Vergleichs.</xs:documentation>
						</xs:annotation>
						<xs:element name="Value" maxOccurs="unbounded" minOccurs="1" type="Value_Type" nillable="true" />
						<xs:element name="CompareColumn" type="QualifiedColumnName_Type" nillable="false" maxOccurs="1" minOccurs="1" />
						<xs:element name="ValueRef" type="Variable_Reference" maxOccurs="unbounded" minOccurs="1" />
						<xs:element name="ResultValue" type="ButtonScriptFunctions_Type" maxOccurs="unbounded" 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 Definition eines Vergleichsausdruckes für Geometrien. Kann als Bestandteil einer CombinedComparisonBaseType für die Formulierung komplexer 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="ButtonComparisonBaseType">
				<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" maxOccurs="1" minOccurs="1" type="xs:string" nillable="false">
							<xs:annotation>
								<xs:documentation>
									Eine Geometriekonstante (WKT,WKB, Iwan).
								</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="ValueRef" type="Variable_Reference" maxOccurs="1" minOccurs="1" />
						<xs:element name="ResultValue" type="ButtonScriptFunctions_Type" 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 Definition eines komplexen Vergleichsausdruckes. Das Blatt des Ausdrucksbaumes muss in einer Single(Geom)Comparison enden.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ButtonComparisonBaseType">
				<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>
	<!--
//////////////////////////////////////////////////////////////////////////////////
Prozessoren
//////////////////////////////////////////////////////////////////////////////////
-->
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ColumnProcessorBase_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ColumnProcessorBase_Type" abstract="true">
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ColumnProcessorFunctionWithColumn_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ColumnProcessorFunctionWithColumn_Type">
		<xs:complexContent>
			<xs:extension base="ColumnProcessorBase_Type">
				<xs:sequence>
					<xs:element name="ColumnName" type="QualifiedColumnName_Type">
						<xs:annotation>
							<xs:documentation>
								Der Name der Spalte aus der vorhergehenden Operation.
								Für die Weiterverarbeitung muss 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>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonProcessor_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonProcessor_Type">
		<xs:annotation>
			<xs:documentation>
				Ein Prozessor fügt weitere Spalten in die Ausgabe des eingehenden Datenstromes an.
				Es werden die Spalten der Quelle weitergereicht und um die berechneten Spalten ergänzt.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="PlanMemberElementBase_Type">
				<xs:sequence>
					<xs:choice minOccurs="1" maxOccurs="unbounded">
						<xs:element name="Area" type="ColumnProcessorFunctionWithColumn_Type"></xs:element>
						<xs:element name="Length" type="ColumnProcessorFunctionWithColumn_Type"></xs:element>
						<xs:element name="Centroid" type="ColumnProcessorFunctionWithColumn_Type"></xs:element>
						<xs:element name="Buffer">
							<xs:complexType>
								<xs:complexContent>
									<xs:extension base="ColumnProcessorFunctionWithColumn_Type">
										<xs:sequence>
											<xs:element name="Distance" type="ButtonScriptFunctions_Type" maxOccurs="1" minOccurs="1">
												<xs:annotation>
													<xs:documentation>
														Der Abstand (als Double Wert).
													</xs:documentation>
												</xs:annotation>
											</xs:element>
										</xs:sequence>
									</xs:extension>
								</xs:complexContent>
							</xs:complexType>
						</xs:element>
						<xs:element name="Distance">
							<xs:complexType>
								<xs:complexContent>
									<xs:extension base="ColumnProcessorFunctionWithColumn_Type">
										<xs:sequence>
											<xs:element name="To" type="ButtonScriptFunctions_Type" maxOccurs="1" minOccurs="1">
												<xs:annotation>
													<xs:documentation>
														Die 2. Geometrie, zu der der Abstand ermittelt werden soll.
													</xs:documentation>
												</xs:annotation>
											</xs:element>
										</xs:sequence>
									</xs:extension>
								</xs:complexContent>
							</xs:complexType>
						</xs:element>
						<xs:element name="Intersection">
							<xs:complexType>
								<xs:complexContent>
									<xs:extension base="ColumnProcessorFunctionWithColumn_Type">
										<xs:sequence>
											<xs:element name="With" type="ButtonScriptFunctions_Type" maxOccurs="1" minOccurs="1">
												<xs:annotation>
													<xs:documentation>
														Die 2. Geometrie, zu der die Schnittmenge ermittelt werden soll.
													</xs:documentation>
												</xs:annotation>
											</xs:element>
										</xs:sequence>
									</xs:extension>
								</xs:complexContent>
							</xs:complexType>
						</xs:element>
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonFilter_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonFilter_Type">
		<xs:complexContent>
			<xs:extension base="PlanMemberElementBase_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>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		DataExecutionPlan_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="DataExecutionPlan_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:choice>
				<xs:element name="Processor" maxOccurs="1" minOccurs="1" nillable="false" type="ButtonProcessor_Type">
				</xs:element>
				<xs:element name="Filter" minOccurs="1" maxOccurs="1" nillable="false" type="ButtonFilter_Type">
				</xs:element>
				<xs:element name="Aggregate" minOccurs="1" maxOccurs="1" nillable="false" type="ButtonAggregate_Type">
				</xs:element>
				<xs:element name="LayerDatasource" type="ButtonLayerDatasource_Type">
				</xs:element>
				<xs:element name="DatabaseDatasource" type="ButtonCardoWellknownDatabase_Type">
				</xs:element>
			</xs:choice>
			<xs:element name="OperatesOn" type="DataExecutionPlan_Type" maxOccurs="1" minOccurs="0" nillable="false">
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		DataExecutionPlanWithOutputHint_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="DataExecutionPlanWithOutputHint_Type">
		<xs:complexContent>
			<xs:extension base="DataExecutionPlan_Type">
				<xs:sequence>
					<xs:element name="OutputHint" type="PlanExecution_OutputHint" minOccurs="0" maxOccurs="1" >
						<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>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		DataExcecutionPlan					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:element name="DataExcecutionPlan" type="DataExecutionPlanWithOutputHint_Type">
		<xs:annotation>
			<xs:documentation>
				Beschreibt einen Datenbeschaffungsplan. Ergebnis ist immer ein System.Data.IDataReader.
			</xs:documentation>
		</xs:annotation>
	</xs:element>
	<!-- 
//////////////////////////////////////////////////////////////////////////////////
	Conditions
//////////////////////////////////////////////////////////////////////////////////
-->
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonDataResultAccessor_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonDataResultAccessor_Type">
		<xs:annotation>
			<xs:documentation>
				Zugriff auf die Spalte der Ergebnismenge einer Datenausführung.
				Wird keine Spalte (columnIndex,columnName) definiert, wird die aktuelle, bzw. die Erste verwendet.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ButtonScriptFunctions_BaseType">
				<xs:attribute name="columnName" use="optional" type="xs:normalizedString">
					<xs:annotation>
						<xs:documentation>
							Der Spaltenname, wird kein Spaltenname angegeben, wird columnIndex verwendet.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="columnIndex" use="optional" type="xs:unsignedShort">
					<xs:annotation>
						<xs:documentation>
							Der 0 basierte Spaltenindex, wird nur verwendet, wenn kein columnName angegeben ist.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonCondition_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonCondition_Type">
		<xs:complexContent>
			<xs:extension base="ButtonFilter_Type"></xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!-- 
//////////////////////////////////////////////////////////////////////////////////
  ButtonScript 
//////////////////////////////////////////////////////////////////////////////////
  -->
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonScriptFunctions_BaseType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonScriptFunctions_BaseType" abstract="true">
		<xs:annotation>
			<xs:documentation>
				Basistyp für alle Funktionen im Buttonscript.
			</xs:documentation>
		</xs:annotation>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonScriptFunctions0_BaseType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonScriptFunctions0_BaseType" abstract="true">
		<xs:annotation>
			<xs:documentation>
				Basistyp für alle Funktionen ohne Parameter.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ButtonScriptFunctions_BaseType"/>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonScriptFunctions1_BaseType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonScriptFunctions1_BaseType" abstract="true">
		<xs:annotation>
			<xs:documentation>
				Basistyp für alle Funktionen mit genau 1 Parameter.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ButtonScriptFunctions_Type"/>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonScriptFunctions2_BaseType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonScriptFunctions2_BaseType" abstract="true">
		<xs:annotation>
			<xs:documentation>
				Basistyp für alle Funktionen mit genau 2 Parametern.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ButtonScriptFunctions_BaseType">
				<xs:sequence>
					<xs:element name="A" type="ButtonScriptFunctions_Type">
						<xs:annotation>
							<xs:documentation>Erstes Argument der aktuellen Methode.</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="B" type="ButtonScriptFunctions_Type">
						<xs:annotation>
							<xs:documentation>Zweites Argument der aktuellen Methode.</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ButtonMathScriptFunctions2_BaseType" abstract="true">
		<xs:complexContent>
			<xs:extension base="ButtonScriptFunctions2_BaseType"></xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ButtonMathScriptFunctions1_BaseType" abstract="true">
		<xs:complexContent>
			<xs:extension base="ButtonScriptFunctions1_BaseType"></xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonScriptFunctionsLiteral_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonScriptFunctionsLiteral_Type" abstract="false">
		<xs:annotation>
			<xs:documentation>
				Literalkonstante.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ButtonScriptFunctions_BaseType">
				<xs:choice>
					<xs:element name="String" type="xs:string"></xs:element>
					<xs:element name="Date" type="xs:date"></xs:element>
					<xs:element name="DateTime" type="xs:dateTime"></xs:element>
					<xs:element name="Integer" type="xs:int"></xs:element>
					<xs:element name="Double" type="xs:double" />
					<xs:element name="Geometry" type="xs:normalizedString"></xs:element>
					<xs:element name="Bool" type="xs:boolean"></xs:element>
				</xs:choice>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonScriptFunctions1N_ListType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonScriptFunctions1N_ListType" abstract="true">
		<xs:annotation>
			<xs:documentation>
				Argumentliste.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ButtonScriptFunctions_BaseType">
				<xs:sequence>
					<xs:element name="Value" type="ButtonScriptFunctions_Type" minOccurs="1" maxOccurs="unbounded" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonScriptFunctions_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonScriptFunctions_Type">
		<xs:annotation>
			<xs:documentation>
				Zugriff innerhalb von Button auf Werte. Dieser Typ kapselt Funktionen und den Zugriff auf Felder.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ButtonScriptFunctions_BaseType">
				<xs:choice>
					<xs:element name="Var" type="Variable_Reference">
						<!-- dok siehe ButtonDataResultAccessor_Type -->
					</xs:element>
					<xs:element name="Result" type="ButtonDataResultAccessor_Type">
						<!-- dok siehe ButtonDataResultAccessor_Type -->
					</xs:element>
					<xs:element name="Literal" type="ButtonScriptFunctionsLiteral_Type" >
						<!-- dok siehe ButtonDataResultAccessor_Type -->
					</xs:element>

					<xs:element name="Now">
						<xs:annotation>
							<xs:documentation>
								Gibt ein Date Objekt mit dem aktuellen Datum und der aktuellen Uhrzeit zurück.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonScriptFunctions0_BaseType"></xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="Add">
						<xs:annotation>
							<xs:documentation>
								Addiert zwei Werte. Beide Werte werden in den Datentyp Decimal konvertiert, das Ergebnis ist ebenfalls ein Wert vom Typ Decimal.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonMathScriptFunctions2_BaseType"></xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="Divide">
						<xs:annotation>
							<xs:documentation>
								Dividiert zwei Werte. Beide Werte werden in den Datentyp Decimal konvertiert, das Ergebnis ist ebenfalls ein Wert vom Typ Decimal.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonMathScriptFunctions2_BaseType"></xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="Subtract">
						<xs:annotation>
							<xs:documentation>
								Subtrahiert zwei Werte. Beide Werte werden in den Datentyp Decimal konvertiert, das Ergebnis ist ebenfalls ein Wert vom Typ Decimal.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonMathScriptFunctions2_BaseType"></xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="Multiply">
						<xs:annotation>
							<xs:documentation>
								Multipliziert zwei Werte. Beide Werte werden in den Datentyp Decimal konvertiert, das Ergebnis ist ebenfalls ein Wert vom Typ Decimal.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonMathScriptFunctions2_BaseType"></xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="Power">
						<xs:annotation>
							<xs:documentation>
								Potenz zweier Werte (a hoch b). Beide Werte werden in den Datentyp Decimal konvertiert, das Ergebnis ist ebenfalls ein Wert vom Typ Decimal.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonMathScriptFunctions2_BaseType"></xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="Round">
						<xs:annotation>
							<xs:documentation>
								Rundet a auf b Nachkommastellen. A-Wert wird in den Datentyp Decimal konvertiert, das Ergebnis ist ebenfalls ein Wert vom Typ Decimal.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonMathScriptFunctions2_BaseType"></xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="MinNum">
						<xs:annotation>
							<xs:documentation>
								Min von a und b.  Beide Werte werden in den Datentyp Decimal konvertiert, das Ergebnis ist ebenfalls ein Wert vom Typ Decimal.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonMathScriptFunctions2_BaseType"></xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="MaxNum">
						<xs:annotation>
							<xs:documentation>
								Max von a und b.  Beide Werte werden in den Datentyp Decimal konvertiert, das Ergebnis ist ebenfalls ein Wert vom Typ Decimal.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonMathScriptFunctions2_BaseType"></xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="Sqrt">
						<xs:annotation>
							<xs:documentation>
								Wurzel. Der Wert wird in den Datentyp Decimal konvertiert, das Ergebnis ist ebenfalls ein Wert vom Typ Decimal.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonMathScriptFunctions1_BaseType"></xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="Sin">
						<xs:annotation>
							<xs:documentation>
								Sinus (winkelInGrad). Der Wert wird in den Datentyp Decimal konvertiert, das Ergebnis ist ebenfalls ein Wert vom Typ Decimal.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonMathScriptFunctions1_BaseType"></xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="Cos">
						<xs:annotation>
							<xs:documentation>
								Cosinus (winkelInGrad). Der Wert wird in den Datentyp Decimal konvertiert, das Ergebnis ist ebenfalls ein Wert vom Typ Decimal.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonMathScriptFunctions1_BaseType"></xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="Encode">
						<xs:annotation>
							<xs:documentation>
								Kodiert eine Zeichenfolge via HTML oder URL Encode (z.B. zum Erstellen von URLs oder anderen HTML Elementen).
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonScriptFunctions_Type">
									<xs:attribute name="type">
										<xs:simpleType>
											<xs:restriction base="xs:string">
												<xs:enumeration value="htmlEncode"/>
												<xs:enumeration value="urlEncode"/>
											</xs:restriction>
										</xs:simpleType>
									</xs:attribute>
								</xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="StringFormat">
						<xs:annotation>
							<xs:documentation>
								Erstellt eine formatierte Zeichenfolge auf Basis eines Format-Strings und einer beliebigen Anzahl von Eingangsdaten.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonScriptFunctions_BaseType">
									<xs:sequence>
										<xs:element name="Format" type="xs:string">
											<xs:annotation>
												<xs:documentation>
													Die Formatzeichenfolge in der die Werte aus "Args" eingesetzt werden.
													Die Syntax entspricht der in .Net für String.Formate verwendeten Form. Weitere Details sind z.B. in der MSDN (http://msdn.microsoft.com/de-de/library/txafckwd.aspx) zu finden.
												</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:choice>
											<xs:element name="Arg" type="ButtonScriptFunctions_Type"/>
											<xs:element name="Args">
												<xs:complexType>
													<xs:complexContent>
														<xs:extension base="ButtonScriptFunctions1N_ListType"></xs:extension>
													</xs:complexContent>
												</xs:complexType>
											</xs:element>
										</xs:choice>
									</xs:sequence>
								</xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="StringConcat">
						<xs:annotation>
							<xs:documentation>
								Fügt mehrere Argumente zu einer Zeichenfolge zusammen.
							</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonScriptFunctions1N_ListType">
									<xs:attribute name="separator" type="xs:string" default=", ">
									</xs:attribute>
								</xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="GeomBuffer">
						<xs:annotation>
							<xs:documentation>Erstellt eine neue Geometrie als Ergebnis der Pufferbildung einer Eingangsgeometrie.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonScriptFunctions1_BaseType">
									<xs:attribute name="distance" type="xs:double" use="required"/>
								</xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="GeomArea">
						<xs:annotation>
							<xs:documentation>Flächengröße einer Geometrie.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonScriptFunctions1_BaseType" />
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="GeomLength">
						<xs:annotation>
							<xs:documentation>Länge einer Geometrie.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonScriptFunctions1_BaseType" />
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="GeomCenterPoint">
						<xs:annotation>
							<xs:documentation>Ermittelt den Schwerpunkt einer Geometrie (Rückgabe ist Geometrie).</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonScriptFunctions1_BaseType">
									<xs:attribute name="useInteriorPoint" type="xs:boolean" default="true"/>
								</xs:extension>
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="GeomIntersection">
						<xs:annotation>
							<xs:documentation>Schnittmenge zweier Geometrien.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonScriptFunctions2_BaseType" />
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="GeomDifference">
						<xs:annotation>
							<xs:documentation>Differenz zweier Geometrien.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonScriptFunctions2_BaseType" />
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="GeomSymDifference">
						<xs:annotation>
							<xs:documentation>Symmetrische Differenz zweier Geometrien.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonScriptFunctions2_BaseType" />
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="GeomDistance">
						<xs:annotation>
							<xs:documentation>Abstand zweier Geometrien.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonScriptFunctions2_BaseType" />
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
					<xs:element name="GeomUnion">
						<xs:annotation>
							<xs:documentation>Union (mind. zweier) Geometrien.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:complexContent>
								<xs:extension base="ButtonScriptFunctions1N_ListType" />
							</xs:complexContent>
						</xs:complexType>
					</xs:element>
				</xs:choice>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ResultValue					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:element name="ResultValue">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="ButtonScriptFunctions_Type">
					<xs:attribute name="netFormatString" use="optional">
						<xs:annotation>
							<xs:documentation>
								Ein Formatstring, der Standardwert ist "{0}".
								Die Syntax entspricht der in .Net für String.Formate verwendeten Form. Weitere Details sind z.B. in der MSDN (http://msdn.microsoft.com/de-de/library/txafckwd.aspx) zu finden.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="nullValue" use="optional">
						<xs:annotation>
							<xs:documentation>
								Optionaler Wert, der für Null eingesetzt wird.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="disableOutputEscaping" type="xs:boolean" default="false">
						<xs:annotation>
							<xs:documentation>
								Gibt an, ob die Ausgabe als xml/xhtml behandelt werden soll. Standardmäßig werden alle Ausgaben Xml encoded behandelt.
							</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ResultEachRow					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:element name="ResultEachRow">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element name="FirstRow" minOccurs="0" maxOccurs="1">
					<xs:complexType>
						<xs:sequence>
							<xs:any minOccurs="0" maxOccurs="1" processContents="lax"/>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="EveryEvenRow" minOccurs="0" maxOccurs="1">
					<xs:complexType>
						<xs:sequence>
							<xs:any minOccurs="1" maxOccurs="1" processContents="lax"/>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="EveryOddRow" minOccurs="0" maxOccurs="1">
					<xs:complexType>
						<xs:sequence>
							<xs:any minOccurs="1" maxOccurs="1" processContents="lax"/>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="EveryRow" minOccurs="0" maxOccurs="1">
					<xs:complexType>
						<xs:sequence>
							<xs:any minOccurs="0" maxOccurs="1" processContents="lax"/>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="LastRow" minOccurs="0" maxOccurs="1">
					<xs:complexType>
						<xs:sequence>
							<xs:any minOccurs="0" maxOccurs="1" processContents="lax"/>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="rowLimit" type="unsignedLongGe1" use="optional">
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<!-- 
//////////////////////////////////////////////////////////////////////////////////
  Aktionen 
//////////////////////////////////////////////////////////////////////////////////
  -->
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonAction_BaseType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonAction_BaseType">
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonActionWithCondition_BaseType					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonActionWithCondition_BaseType">
		<xs:complexContent>
			<xs:extension base="ButtonAction_BaseType">
				<xs:sequence>
					<xs:element name="Condition" type="ButtonCondition_Type" minOccurs="0" maxOccurs="1" nillable="false">
						<xs:annotation>
							<xs:documentation>
								Mit diesem optionalen Element kann eine Bedingung für die Ausführung definiert werden.
								Hinweis: Zugriff auf Spalten ist an dieser Stelle i.d.R. nicht möglich.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonAction_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonAction_Type">
		<xs:choice minOccurs="1" maxOccurs="unbounded">
			<xs:element name="NoAction">
				<xs:complexType>
					<xs:complexContent>
						<xs:restriction base="ButtonAction_BaseType">
						</xs:restriction>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="CreateAttachment">
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="ButtonAction_BaseType">
							<xs:choice>
								<xs:element name="XlsExporter">
									<xs:annotation>
										<xs:documentation>
											Erstellt aus dem aktiven Dataset einen im MS Excel lesbaren Anhang.
										</xs:documentation>
									</xs:annotation>
									<xs:complexType>
										<xs:attribute name="format" use="required">
											<xs:simpleType>
												<xs:restriction base="xs:string">
													<!--
													Hinweis: Siehe Enum IDU.DataConversion.Writer.Xls.XlsExportFormat
													-->
													<xs:enumeration value="CommaSeparatedValues"/>
													<xs:enumeration value="MsExcelNativeXml"/>
													<xs:enumeration value="SemicolonSeparatedValues"/>
													<xs:enumeration value="TabSeparatedValues"/>
												</xs:restriction>
											</xs:simpleType>
										</xs:attribute>
									</xs:complexType>
								</xs:element>
							</xs:choice>
							<xs:attribute name="name" type="xs:normalizedString" use="required">
								<xs:annotation>
									<xs:documentation>
										Der Dateiname (ohne Pfad), vom System wird noch eine Erweiterung angehangen (z.B. .csv, je nach Typ).
										Der Ergebnisname ist eindeutig, ist bereits ein Attachment mit gleichem Namen vorhanden, wird dieses ersetzt.
									</xs:documentation>
								</xs:annotation>
							</xs:attribute>
							<xs:attribute name="zipOutput" type="xs:boolean" default="false"></xs:attribute>
						</xs:extension>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="Say">
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="ButtonAction_BaseType">
							<xs:sequence>
								<xs:any minOccurs="0" maxOccurs="1" processContents="lax"/>
							</xs:sequence>
						</xs:extension>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="Store">
				<xs:annotation>
					<xs:documentation>
						Definiert eine (neue) Variable und legt diese im Store des Ausführungskontextes ab.
					</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="ButtonAction_BaseType">
							<xs:sequence>
								<xs:element name="Add" minOccurs="1" maxOccurs="unbounded">
									<xs:complexType>
										<xs:complexContent>
											<xs:extension base="ButtonScriptFunctions_Type">
												<xs:attribute name="storeKey" default="Default">
													<xs:annotation>
														<xs:documentation>
															Der Schlüssel des Variablenspeichers.
															Vordefiniert ist: AttachmentStore.
														</xs:documentation>
													</xs:annotation>
												</xs:attribute>
												<xs:attribute name="key" use="required" type="xs:normalizedString"></xs:attribute>
											</xs:extension>
										</xs:complexContent>
									</xs:complexType>
								</xs:element>
							</xs:sequence>
							<xs:attribute name="eachRow" type="xs:boolean" use="required"></xs:attribute>
						</xs:extension>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="AbortPlan">
				<xs:annotation>
					<xs:documentation>
						Beendet die Abarbeitung des Plans an dieser Stelle, Postprocess wird ausgeführt.
						Alternativ kann via Throw auch ein Fehler gemeldet werden.
						Die Variable "Aborted" und "AbortMessage" im Store "System" wird mit true belegt.
					</xs:documentation>
					<xs:documentation>
						Bsp.:
						<![CDATA[
						<xsl:choose>
							<xsl:when test="Root/Variables/Var[@name='Aborted' and @store = 'System'] = 'true'">
								<h2>Hinweis</h2>
								<p class="btnResult error">
									<xsl:value-of select="Root/Variables/Var[@name='AbortMessage']"/>
								</p>
							</xsl:when>
							<xsl:otherwise>
						]]>
					</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="ButtonAction_BaseType">
							<xs:sequence>
								<xs:element name="Message" type="xs:string" minOccurs="0" maxOccurs="1">
									<xs:annotation>
										<xs:documentation>
											Ein optionaler Text.
										</xs:documentation>
									</xs:annotation>
								</xs:element>
							</xs:sequence>
						</xs:extension>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="Throw">
				<xs:annotation>
					<xs:documentation>
						Wirft eine Ausnahme, die einen Fehler darstellt und beendet die Abarbeitung des Plans.
					</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="ButtonAction_BaseType">
							<xs:sequence>
								<xs:element name="Message" type="xs:normalizedString">
									<xs:annotation>
										<xs:documentation>
											Der Fehlertext.
										</xs:documentation>
									</xs:annotation>
								</xs:element>
							</xs:sequence>
						</xs:extension>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="Fork" type="ButtonExcecutionPlanStep_Type">
				<xs:annotation>
					<xs:documentation>
						Verzweigt zu einem weiteren Planschritt.
					</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:choice>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonExcecutionPlanStep_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonExcecutionPlanStep_Type">
		<xs:complexContent>
			<xs:extension base="ButtonAction_BaseType">
				<xs:sequence>
					<xs:element name="Condition" type="ButtonCondition_Type" minOccurs="0" maxOccurs="1" nillable="false">
						<xs:annotation>
							<xs:documentation>
								Mit diesem optionalen Element kann eine Bedingung für die Ausführung definiert werden.
								Hinweis: Zugriff auf Spalten ist an dieser Stelle i.d.R. nicht möglich.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="Step">
						<xs:complexType>
							<xs:sequence>
								<xs:choice>
									<xs:element ref="DataExcecutionPlan">
										<xs:annotation>
											<xs:documentation>
												Der Ausführungspfad für die Datenbeschaffung.
											</xs:documentation>
										</xs:annotation>
									</xs:element>
									<xs:element name="DataExcecutionPlanRef" type="xs:IDREF">
										<xs:annotation>
											<xs:documentation>
												Der Ausführungspfad für die Datenbeschaffung. Ist nur innerhalb eines "ExcecutionPlan" anwendbar.
											</xs:documentation>
										</xs:annotation>
									</xs:element>
								</xs:choice>
								<xs:element name="Always" type="ButtonAction_Type" minOccurs="0" maxOccurs="1">
									<xs:annotation>
										<xs:documentation>
											Dieser Schritt wird immer aufgerufen. Es steht im Store "CurrentPlan" die Variable "IsEmpty" bzw. "IsNotEmpty" zur Verfügung.
											Der Zugriff auf Daten aus dem Plan sollte nicht durchgeführt werden.
										</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element name="OnEmpty" type="ButtonAction_Type" minOccurs="0" maxOccurs="1">
									<xs:annotation>
										<xs:documentation>
											Wird als einziges Element ausgeführt, wenn die Datenmenge leer ist.
										</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element name="OnNotEmpty" minOccurs="0" maxOccurs="1" type="ButtonAction_Type">
									<xs:annotation>
										<xs:documentation>
											Wird ausgeführt, wenn die Datenmenge nicht leer ist. Weitere Elemente werden zusätzlich betrachtet.
										</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element name="OnCondition" minOccurs="0" maxOccurs="unbounded">
									<xs:complexType>
										<xs:complexContent>
											<xs:extension base="ButtonCondition_Type">
												<xs:sequence>
													<xs:element name="Then" type="ButtonAction_Type"></xs:element>
													<xs:element name="Else" type="ButtonAction_Type" minOccurs="0"></xs:element>
												</xs:sequence>
												<xs:attribute name="match" type="buttonMatchMode" use="required"></xs:attribute>
											</xs:extension>
										</xs:complexContent>
									</xs:complexType>
								</xs:element>
								<xs:element name="ForEachRow" minOccurs="0" maxOccurs="1">
									<xs:annotation>
										<xs:documentation>
											Führt eine Aktion für jede Zeile der Ergebnismenge durch.
										</xs:documentation>
									</xs:annotation>
									<xs:complexType>
										<xs:sequence>
											<xs:element name="Where" type="ButtonCondition_Type" minOccurs="0">
												<xs:annotation>
													<xs:documentation>
														Optionale Bedingung die pro Zeile geprüft wird. Ergibt die Bedingung false, wird diese Zeile übersprungen ("Do" wird nicht ausgeführt).
													</xs:documentation>
												</xs:annotation>
											</xs:element>
											<xs:element name="Do" type="ButtonAction_Type">
												<xs:annotation>
													<xs:documentation>
														Die auszuführende Aktion.
													</xs:documentation>
												</xs:annotation>
											</xs:element>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		PlanCapabilities_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="PlanCapabilities_Type">
		<xs:sequence>
			<xs:element name="Author" type="xs:normalizedString" minOccurs="0" maxOccurs="1" >
				<xs:annotation>
					<xs:documentation>Der optionale Name des Autors.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Title" type="xs:normalizedString" minOccurs="0" maxOccurs="1">
				<xs:annotation>
					<xs:documentation>
						Der optionale Titel dieses Plans.
					</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1">
				<xs:annotation>
					<xs:documentation>
						Eine verbale Beschreibung.
						Darf HTML Code enthalten, wird z.B. bei der Dienstegenerierung verwendet.
					</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Arguments" minOccurs="0" maxOccurs="1">
				<xs:annotation>
					<xs:documentation>
						Argumente, die diesem Plan übergeben werden müssen.
					</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Argument" minOccurs="1" maxOccurs="unbounded">
							<xs:annotation>
								<xs:documentation>
									Ein Argument, welches für diesen Plan erforderlich ist.
									Titel und Beschreibung dürfen HTML Code enthalten, wird z.B. bei der Dienstegenerierung verwendet.
								</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:simpleContent>
									<xs:extension base="xs:string">
										<xs:attribute name="name" type="xs:Name" use="required">
											<xs:annotation>
												<xs:documentation>Der Name des Argumentes.</xs:documentation>
											</xs:annotation>
										</xs:attribute>
										<xs:attribute name="netTypeName" type="NetDataTypes_Type" default="System.String">
											<xs:annotation>
												<xs:documentation>Der Name eines .Net Datentypes (System.String, System.DateTime, IDU.GeoLib.Geometry).</xs:documentation>
											</xs:annotation>
										</xs:attribute>
										<xs:attribute name="array" type="xs:boolean" default="false">
											<xs:annotation>
												<xs:documentation>Gibt an, dass dieses Argument als Array zu übergeben ist.</xs:documentation>
											</xs:annotation>
										</xs:attribute>
										<xs:attribute name="nullable" type="xs:boolean" default="false">
											<xs:annotation>
												<xs:documentation>Gibt an, dass dieses Argument optional ist.</xs:documentation>
											</xs:annotation>
										</xs:attribute>
										<xs:attribute name="restriction" type="xs:string" use="optional">
											<xs:annotation>
												<xs:documentation>
													Eine leerzeichengetrennte Liste ausschließlich zulässiger Werte.
												</xs:documentation>
											</xs:annotation>
										</xs:attribute>
									</xs:extension>
								</xs:simpleContent>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="WebService" minOccurs="0" maxOccurs="1">
				<xs:annotation>
					<xs:documentation>
						Wenn dieses Element vorhanden ist, dann wird eine Webservice-Methode für diesen Datenausführungsplan mit erstellt.
						Die Methoden werden in dem Dienst /net3/services/ButtonServices.asmx (bzw./net3/public/services/ButtonServices.asmx) veröffentlicht.
					</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="MethodeName" type="xs:normalizedString">
							<xs:annotation>
								<xs:documentation>
									Der (systemweit (!)) eindeutige Methodenname.
								</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="EnablePublic" type="xs:boolean" default="false">
							<xs:annotation>
								<xs:documentation>
									Gibt an, ob diese Methode auch in dem Public - Diensteverzeichnis mit erstellt werden soll (Standartwert ist false).
								</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="EnableSession" type="xs:boolean" default="false"></xs:element>
						<xs:element name="BufferResponse" type="xs:boolean" default="true"></xs:element>
						<xs:element name="AsmxCodeGeneratorVersion" type="xs:byte" default="1">
							<xs:annotation>
								<xs:documentation>Version für die Code-Erstellung der Dienste. Z.Z. ist nur 1 oder 2 implementiert.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonDocumentSource_Type					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonDocumentSourceBase_Type" abstract="true">
		<xs:complexContent>
			<xs:extension base="ButtonCardoWellknownDatabase_Type">
				<xs:annotation>
					<xs:documentation>Definiert eine Abfrage gegen eine SQL Datenquelle.</xs:documentation>
				</xs:annotation>
				<xs:attribute name="xmlElementName" type="xs:Name">
					<xs:annotation>
						<xs:documentation>Der Name, der als Element-Name im Xml für alle Datensätze dieser Quelle verwendet wird.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ButtonDocumentSource_Type">
		<xs:complexContent>
			<xs:extension base="ButtonDocumentSourceBase_Type">

			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ButtonDocumentDetailRecordSource_Type">
		<xs:complexContent>
			<xs:extension base="ButtonDocumentSource_Type">
				<xs:attribute name="parentColumnName" use="required" type="xs:NCName">
					<xs:annotation>
						<xs:documentation>Der Name der Spalte aus dem Parent zur Verknüpfung. Der Wert steht auch als %PARENT_ID_VALUE% dem BaseSql zur Verfügung.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="referenceColumnName" use="optional" type="xs:NCName">
					<xs:annotation>
						<xs:documentation>
							Der Name der Spalte in dieser Datenquelle, die auf den Wert in parentColumnName gefiltert wird. Wird als Filter an den Ausdruck angefügt.
							Wird das Attribut nicht angegeben, muss im Base-Sql wenigstens einmal %PARENT_ID_VALUE% verwendet werden.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ButtonDocumenMasterRecordSource_Type">
		<xs:annotation>
			<xs:documentation>Stellt ein komplexes Dokument in der Form Master =&gt; Detail dar.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ButtonDocumentSource_Type">
				<xs:sequence>
					<xs:element name="Detail" minOccurs="0"  maxOccurs="unbounded">
						<xs:complexType>
							<xs:choice minOccurs="1" maxOccurs="1">
								<xs:element name="Complex" type="ButtonDocumenMasterRecordSource_Type">
									<xs:annotation>
										<xs:documentation>Verbindet eine komplexe Datenmenge mit dem Master-Record.</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element name="Dependend" type="ButtonDocumentDetailRecordSource_Type">
									<xs:annotation>
										<xs:documentation>Verbindet eine verknüpfte Menge mit diesem Master-Record.</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element name="Independend" type="ButtonDocumentSource_Type">
									<xs:annotation>
										<xs:documentation>Verbindet eine ungefilterte Datenmenge mit diesem Master-Record.</xs:documentation>
									</xs:annotation>
								</xs:element>
							</xs:choice>
							<xs:attribute name="xmlElementCollectionName" use="optional" type="xs:Name">
								<xs:annotation>
									<xs:documentation>Der Name des xml Elementes für Container der Detail-Datensätze.</xs:documentation>
								</xs:annotation>
							</xs:attribute>
						</xs:complexType>
					</xs:element>
					<xs:element name="Filter" minOccurs="0" maxOccurs="1">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="FilterCondition" type="ButtonCondition_Type" minOccurs="0" maxOccurs="1">
									<xs:annotation>
										<xs:documentation>Bedingung, ob dieser Filter ausgeführt wird. An dieser Stelle ist noch kein Zugriff auf die Spalten möglich.</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element name="Filter" type="ButtonFilter_Type">
									<xs:annotation>
										<xs:documentation>Der Filter, der auf die Datenquelle angewandt werden soll.</xs:documentation>
									</xs:annotation>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonAttachmentWithConditionBase_Type
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:complexType name="ButtonAttachmentWithConditionBase_Type" abstract="true">
		<xs:complexContent>
			<xs:extension base="ButtonActionWithCondition_BaseType">
				<xs:sequence>
					<xs:element name="DocumentNameFormater" type="ButtonScriptFunctions_Type" minOccurs="0" maxOccurs="1">
						<xs:annotation>
							<xs:documentation>Ein Methode, die den Dateinamen generiert. Zur Verfügung steht der Datensatz des aktuellen Master-Records. Der Platzhalter {0} kann eingesetzt werden. Hier ist die mit 1 beginnende Dokumentnummer hinterlegt.</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ButtonAttachmentHTMLOutputSettings_Type">
		<xs:complexContent>
			<xs:extension base="ButtonAttachmentWithConditionBase_Type"></xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ButtonAttachmentPdfOutputSettings_Type">
		<xs:complexContent>
			<xs:extension base="ButtonAttachmentWithConditionBase_Type">
				<xs:sequence>
					<xs:choice minOccurs="1" maxOccurs="1">
						<xs:element name="WellknownPageSize">
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:enumeration value="A0"/>
									<xs:enumeration value="A1"/>
									<xs:enumeration value="A2"/>
									<xs:enumeration value="A3"/>
									<xs:enumeration value="A4"/>
									<xs:enumeration value="A5"/>
									<xs:enumeration value="A7"/>
									<xs:enumeration value="A8"/>
									<xs:enumeration value="A9"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:element>
						<xs:element name="PageSize">
							<xs:complexType>
								<xs:attribute name="heightMm" type="xs:int" use="required">
									<xs:annotation>
										<xs:documentation>Breite in mm.</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="widhtMm" type="xs:int" use="required">
									<xs:annotation>
										<xs:documentation>Höhe in mm.</xs:documentation>
									</xs:annotation>
								</xs:attribute>
							</xs:complexType>
						</xs:element>
					</xs:choice>
					<xs:choice>
						<xs:element name="MarginMm" type="xs:int">
							<xs:annotation>
								<xs:documentation>Rand an allen Seiten in mm.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="Margins">
							<xs:complexType>
								<xs:attribute name="topMm" type="xs:int" use="required">
									<xs:annotation>
										<xs:documentation>Oberer Rand in mm.</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="bottomMm" type="xs:int" use="required">
									<xs:annotation>
										<xs:documentation>Unterer Rand in mm.</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="leftMm" type="xs:int" use="required">
									<xs:annotation>
										<xs:documentation>Linker Rand in mm.</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="rightMm" type="xs:int" use="required">
									<xs:annotation>
										<xs:documentation>Rechter Rand in mm.</xs:documentation>
									</xs:annotation>
								</xs:attribute>
							</xs:complexType>
						</xs:element>
					</xs:choice>
				</xs:sequence>
				<xs:attribute name="marginInch" type="xs:float"/>
				<xs:attribute name="Orientation">
					<xs:simpleType>
						<xs:restriction base="xs:string">
							<xs:enumeration value="Portrait"/>
							<xs:enumeration value="Landscape"/>
						</xs:restriction>
					</xs:simpleType>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
	########################################################################
	Elementdefinitionen
	########################################################################
-->
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		DataExcecutionPlanDefinitions					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:element name="DataExcecutionPlanDefinitions">
		<xs:annotation>
			<xs:documentation>
				An dieser Stelle können optional Datenpläne vordefiniert werden, die dann in einem Schritt via "DataExcecutionPlanRef" referenziert werden können.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="DataExcecutionPlan" minOccurs="1" maxOccurs="unbounded">
					<xs:complexType>
						<xs:complexContent>
							<xs:extension base="DataExecutionPlanWithOutputHint_Type">
								<xs:attribute name="uuid" type="xs:ID" use="required"/>
							</xs:extension>
						</xs:complexContent>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ExcecutionPlan					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:element name="ExcecutionPlan">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Capabilities" minOccurs="0" maxOccurs="1" type="PlanCapabilities_Type"/>
				<xs:element name="AddVar" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>
							Stellt Variablen für den Plan zur Verfügung. Die Werte können auch via Programmschnittstelle übergeben werden.
						</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="ResultValue" type="ButtonScriptFunctions_Type" minOccurs="0" maxOccurs="1" >
								<!-- Kommentar des Typs verwenden -->
							</xs:element>
						</xs:sequence>
						<xs:attribute name="storeKey" default="Default">
							<xs:annotation>
								<xs:documentation>
									Der Schlüssel des Variablenspeichers. Der Standardwert ist "Default".
								</xs:documentation>
							</xs:annotation>
						</xs:attribute>
						<xs:attribute name="key" use="required" type="xs:normalizedString"></xs:attribute>
						<xs:attribute name="value" use="optional" type="Value_Type">
							<xs:annotation>
								<xs:documentation>Der zuzuweisende Wert, alternativ kann Element ResultValue verwendet werden.</xs:documentation>
							</xs:annotation>
						</xs:attribute>
					</xs:complexType>
				</xs:element>
				<xs:element name="Options" minOccurs="0" maxOccurs="1">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="Option" minOccurs="1" maxOccurs="unbounded">
								<xs:complexType>
									<xs:choice minOccurs="1" maxOccurs="1">
										<!--
										<xs:element ref="iXRH:RenderMap"/>
										-->
										<xs:any maxOccurs="1" minOccurs="1" namespace="http://schemas.webs.idu.de/iwan/iXRH" processContents="strict" />
									</xs:choice>
									<xs:attribute name="optionId" type="xs:ID"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<!-- MasterDetail oder wie gehabt Pläne -->
				<xs:choice minOccurs="1" maxOccurs="1">
					<xs:sequence minOccurs="1" maxOccurs="1">
						<xs:element ref="ButtonMasterDetailDocument" minOccurs="1" maxOccurs="1"/>
						<xs:element name="PerRowProcess" minOccurs="0" maxOccurs="1" nillable="false">
							<xs:annotation>
								<xs:documentation>
									Transformiert jeden Datensatz. Wird kein PerRowProcess definiert, dann wird das xml ausgegeben.
									Die Planausgabe wird intern in der Struktur:
									<![CDATA[
<ButtonRow>
  <ButtonOptions>
    <ExcecutionPlanOptions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Option optionId="RenderOverViewMap" xmlns="http://schemas.webs.idu.de/cardo3/Button">
        <RenderMap imageHeight="500" imageWidth="500" epsgCode="-1" targetImageType="Png" backgroundColor="0xFFFFFF" transparentColor="0xFFFFFF" makeTransparent="false" printMode="false" collectDrawStat="true" drawSelection="true" xmlns="http://schemas.webs.idu.de/iwan/iXRH">
          <BBox epsgCode="31468" xmin="5435174" ymin="5631205" xmax="5529046" ymax="5718787" />
          <Layer layerName="L1" />
        </RenderMap>
      </Option>
    </ExcecutionPlanOptions>
    <ButtonEnv>
      <Attachments />
      <Variables>
        <Var name="nummernFilter" store="Default">
        </Var>
        <Var name="targetFormat" store="Default">Pdf</Var>
        <Var name="ExecuteFilter" store="Default">true</Var>
      </Variables>
    </ButtonEnv>
  </ButtonOptions>
  <MASTER_RECORD_WIE_DEFINIERT>
	....
							]]> bereitgestellt.
								</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:sequence>
									<xs:choice minOccurs="1" maxOccurs="unbounded">
										<xs:annotation>
											<xs:documentation>
												Definiert die Ausgabetransformation für diese Elemente.
												Es wird immer nur das 1. Element verwendet. Für die Auswahl kann eine Condition definiert werden.
											</xs:documentation>
										</xs:annotation>
										<xs:element name="Pdf" type="ButtonAttachmentPdfOutputSettings_Type">
											<xs:annotation>
												<xs:documentation>Jeden Record als ein PDF Dokument erstellen. Die Dokumente werden als Attachment im Ergebnis abgelegt.</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element name="Html" type="ButtonAttachmentHTMLOutputSettings_Type">
											<xs:annotation>
												<xs:documentation>Jeden Record als ein HTML Dokument erstellen. Die Dokumente werden als Attachment im Ergebnis abgelegt.</xs:documentation>
											</xs:annotation>
										</xs:element>
									</xs:choice>
									<xs:choice>
										<xs:element name="XsltFileName" type="ButtonScriptFunctions_Type">
											<xs:annotation>
												<xs:documentation>
													Der vollständige Pfadname zu einer XSLT Datei. Hinweis: Es können cardo Variablen im Pfad verwendet werden.
												</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element name="Xslt">
											<xs:complexType>
												<xs:sequence>
													<xs:any maxOccurs="1" minOccurs="1" namespace="http://www.w3.org/1999/XSL/Transform" processContents="strict" />
												</xs:sequence>
											</xs:complexType>
										</xs:element>
									</xs:choice>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
					<xs:sequence minOccurs="1" maxOccurs="1">
						<xs:element ref="DataExcecutionPlanDefinitions" minOccurs="0" maxOccurs="1">
							<xs:annotation>
								<xs:documentation>
									An dieser Stelle können optional Datenpläne vordefiniert werden, die dann in einem Schritt via "DataExcecutionPlanRef" referenziert werden können.
								</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="Member" minOccurs="1" maxOccurs="unbounded">
							<xs:complexType>
								<xs:complexContent>
									<xs:extension base="ButtonExcecutionPlanStep_Type">
										<xs:attribute name="parallel" type="xs:boolean" default="false">
											<xs:annotation>
												<xs:documentation>
													Wird z.Z. nicht verwendet.
												</xs:documentation>
											</xs:annotation>
										</xs:attribute>
										<xs:attribute name="id" type="xs:ID" use="required">
											<xs:annotation>
												<xs:documentation>Der eindeutige Bezeichner dieses Ausführungsschrittes.</xs:documentation>
											</xs:annotation>
										</xs:attribute>
									</xs:extension>
								</xs:complexContent>
							</xs:complexType>
						</xs:element>
						<xs:element name="PostProcess" minOccurs="0" maxOccurs="1" nillable="false">
							<xs:annotation>
								<xs:documentation>
									Erlaubt es, die Ausgabe mittels XSLT weiter zu transformieren.
									Die Planausgabe wird intern in der Struktur:
									<![CDATA[
							-Root
								-Member @id / {output von say}
								-Member @id  / {output von say}
								-Attachments
									-Attachment @fileName
									-Attachment @fileName
								-Variables
									-Var @name / {value}
									-Var @name / {value}
							]]> bereitgestellt.
								</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:sequence>
									<xs:any maxOccurs="1" minOccurs="1" namespace="http://www.w3.org/1999/XSL/Transform" processContents="strict" />
								</xs:sequence>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:choice>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonComparision					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:element name="ButtonComparision" type="ButtonFilter_Type">
		<xs:annotation>
			<xs:documentation>Kann mit IDU.cardo3.CoreModules.Button.Utils.Query.ButtonQueryUtil verwendet werden.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonFunction					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:element name="ButtonFunction" type="ButtonScriptFunctions_Type">
		<xs:annotation>
			<xs:documentation>Kann mit IDU.cardo3.CoreModules.Button.Utils.Script.ButtonScriptFunctionUtil verwendet werden.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<!--
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ButtonMasterDetailDocument					
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	-->
	<xs:element name="ButtonMasterDetailDocument" type="ButtonDocumenMasterRecordSource_Type">
		<xs:annotation>
			<xs:documentation>Kann mit IDU.cardo3.CoreModules.Button.MasterDetailDocumentReader verwendet werden.</xs:documentation>
		</xs:annotation>
	</xs:element>
</xs:schema>