<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://schemas.webs.idu.de/db/sqlUpdate" elementFormDefault="qualified" xmlns="http://schemas.webs.idu.de/db/sqlUpdate" xmlns:mstns="http://schemas.webs.idu.de/db/sqlUpdate" xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:simpleType name="TargetDatabase">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Postgres" />
			<xs:enumeration value="SQLServer" />
			<xs:enumeration value="Oracle" />
			<xs:enumeration value="Independent" />
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ColumnDataType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Varchar" />
			<xs:enumeration value="Boolean" />
			<xs:enumeration value="Bit" />
			<xs:enumeration value="Int2" />
			<xs:enumeration value="Int4" />
			<xs:enumeration value="Int8" />
			<xs:enumeration value="Double" />
			<xs:enumeration value="Numeric" />
			<xs:enumeration value="Date" />
			<xs:enumeration value="DateTime" />
			<xs:enumeration value="CLob" />
			<xs:enumeration value="BLob" />
			<xs:enumeration value="Geometry" />
			<xs:enumeration value="Identity">
				<xs:annotation>
					<xs:documentation>Autowert (Trigger o.ä. werden automatisch mit angelegt).</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="IdentityColumnDataType">
				<xs:annotation>
					<xs:documentation>Der Typ, den eine Autowertspalte annimmt, wenn mit dem Tool erstellt. Ist anzuwenden für Spalten, die Autowert referenzieren.</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ObjectDataType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Table" />
			<xs:enumeration value="Index" />
			<xs:enumeration value="Trigger" />
			<xs:enumeration value="Function" />
			<xs:enumeration value="Type" />
			<xs:enumeration value="Constraint" />
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="DatabaseFunctions">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Now">
				<xs:annotation>
					<xs:documentation>Aktueller Zeitpunkt.</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="UserName">
				<xs:annotation>
					<xs:documentation>Name des z.Z. an der DB angemeldeten Benutzers.</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ForeignKeyConstraintBehavior">
		<xs:restriction base="xs:string">
			<xs:enumeration value="OnDeleteCascade">
				<xs:annotation>
					<xs:documentation>Löschweitergabe auf den FK - ganz normal.</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="OnDeleteCascadeMSSQLByTrigger">
				<xs:annotation>
					<xs:documentation>Löschweitergabe auf den FK - im SQLServer per Trigger und ohne richtigen FK gelöst.</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="Default">
				<xs:annotation>
					<xs:documentation>Ganz einfache Referenz ohne ein cascade.</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="OnDeleteSetNull">
				<xs:annotation>
					<xs:documentation>Setzt beim Löschen des referenzierten Datensatzes den Wert in der SouceColumn auf NULL.</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="OnUpdateCascade">
				<xs:annotation>
					<xs:documentation>Updateweitergabe auf den FK - d.h. der Wert im Datensatz wird angepaßt, wenn sich der Schlüssel im referenzierten Datensatz ändert.</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="VariantType">
		<xs:sequence>
			<xs:choice>
				<xs:element name="StringValue" type="xs:string" />
				<xs:element name="IntValue" type="xs:int" />
				<xs:element name="FloatValue" type="xs:double" />
				<xs:element name="BoolValue" type="xs:boolean" />
				<xs:element name="DateValue" type="xs:date" />
				<xs:element name="DateTimeValue" type="xs:dateTime" />
				<xs:element name="Function" type="DatabaseFunctions" />
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="_OperationBaseType" abstract="true">
		<xs:sequence>
			<xs:element name="Description" type="xs:string" maxOccurs="1" minOccurs="0" nillable="true" />
		</xs:sequence>
		<xs:attribute name="name" type="xs:string" use="required" />
		<xs:attribute name="dropPriorCreate" default="false" type="xs:boolean" />
	</xs:complexType>
	<xs:complexType name="_DbTypeDependendOperationBaseType" abstract="true">
		<xs:complexContent>
			<xs:extension base="_OperationBaseType">
				<xs:attribute name="targetDataBase" default="Independent">
					<xs:simpleType>
						<xs:list itemType="TargetDatabase">
						</xs:list>
					</xs:simpleType>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="_DataBaseObjectCreationType" abstract="true">
		<xs:complexContent>
			<xs:extension base="_DbTypeDependendOperationBaseType">
				<xs:sequence>
					<xs:element name="Body" type="AnySqlStatementType" maxOccurs="unbounded" minOccurs="1" nillable="false" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="_DatabaseTableContraintBase" abstract="true">
		<xs:complexContent>
			<xs:extension base="_DbTypeDependendOperationBaseType">
				<xs:attribute name="tableName" type="xs:string" use="optional" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="_DatabaseIndexBase" abstract="true">
		<xs:complexContent>
			<xs:extension base="_DbTypeDependendOperationBaseType">
				<xs:attribute name="tableName" type="xs:string" use="optional">
					<xs:annotation>
						<xs:documentation>
							Der Tabellenname, muss angegeben werden, wenn nicht in einem CreateTable.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="columnNames" type="xs:string" use="required" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DatabaseColumnDescription">
		<xs:complexContent>
			<xs:extension base="_OperationBaseType">
				<xs:sequence>
					<xs:element name="DefaultValue" type="VariantType" maxOccurs="1" minOccurs="0" />
				</xs:sequence>
				<xs:attribute name="columnDataType" type="ColumnDataType" use="required" />
				<xs:attribute name="size" type="xs:short">
					<xs:annotation>
						<xs:documentation>Bei Zeichenketten die Länge und bei Numeric die Precision Angabe (also Anzahl Ziffern).</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="precision" type="xs:short" use="optional">
					<xs:annotation>
						<xs:documentation>Bei Numeric: die scale - Angabe (also Anzahl Ziffern hinter dem Komma).</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="notNull" type="xs:boolean" use="optional" default="false">
					<xs:annotation>
						<xs:documentation>Optional, Standard ist false: ist diese Spalte NOT NULL -&gt; true bedeutet, sie ist NOT NULL.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
		Constraint
	 -->
	<xs:complexType name="ForeignKeyConstraint">
		<xs:complexContent>
			<xs:extension base="_DatabaseTableContraintBase">
				<xs:attribute name="sourceColumnNames" type="xs:string" use="required">
					<xs:annotation>
						<xs:documentation>Name der Spalte(n) in der Tabelle, auf die der FK angelegt wird. Mehrere sind mit Komma zu trennen.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="targetTableName" type="xs:string" use="required">
					<xs:annotation>
						<xs:documentation>Name der Tabelle, die referenziert wird.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="targetColumnNames" type="xs:string" use="required">
					<xs:annotation>
						<xs:documentation>Spalte(n) der referenzierten Tabelle, die verknüpft werden sollen (muss von Reihenfolge und Anzahl zu den sourceColumnNames passen!).</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="behavior" use="optional" default="Default">
					<xs:annotation>
						<xs:documentation>Einstellungen zum Verhalten des FKs (Löschweitergabe, etc.).</xs:documentation>
					</xs:annotation>
					<xs:simpleType>
						<xs:list itemType="ForeignKeyConstraintBehavior">
						</xs:list>
					</xs:simpleType>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="PrimaryKeyConstraint">
		<xs:complexContent>
			<xs:extension base="_DatabaseTableContraintBase">
				<xs:attribute name="columnNames" type="xs:string" use="required" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="CheckConstraint">
		<xs:complexContent>
			<xs:extension base="_DatabaseTableContraintBase">
				<xs:sequence>
					<xs:element name="CheckExpression" minOccurs="1" maxOccurs="unbounded">
						<xs:complexType>
							<xs:simpleContent>
								<xs:extension base="xs:string">
									<xs:attribute name="targetDatabase" default="Independent">
										<xs:simpleType>
											<xs:list itemType="TargetDatabase">
											</xs:list>
										</xs:simpleType>
									</xs:attribute>
								</xs:extension>
							</xs:simpleContent>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
				<xs:attribute name="columnName" type="xs:string" use="required" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="CreateConstraintType">
		<xs:sequence>
			<xs:element name="PrimaryKey" type="PrimaryKeyConstraint" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="ForeignKey" type="ForeignKeyConstraint" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Check" type="CheckConstraint" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="CreateIndexType">
		<xs:sequence>
			<xs:element name="Index" type="DefineIndexType" minOccurs="0" maxOccurs="unbounded" />
			<xs:element name="GeomIndex" type="DefineGeomIndexType" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>


	<!--
		Defines
	 -->
	<xs:complexType name="DefineTableType">
		<xs:complexContent>
			<xs:extension base="_DbTypeDependendOperationBaseType">
				<xs:sequence>
					<xs:element name="Columns">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Column" type="DatabaseColumnDescription" maxOccurs="unbounded" minOccurs="1" nillable="false" />
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="Contraints" minOccurs="0" maxOccurs="1" type="CreateConstraintType">
						<xs:annotation>
							<xs:documentation>Die TableName der Constraints können hier weggelassen werden, es steht %CURRENT_TABLE_NAME% und %CURRENT_TABLE_SHORTNAME% (oder {tn} bzw. {ts}) als Platzhalter für Bezeichner zur Verfügung.</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="CreateIndex" minOccurs="0" maxOccurs="1" type="CreateIndexType">
						<xs:annotation>
							<xs:documentation>Die TableName der Indexe können hier weggelassen werden, es steht %CURRENT_TABLE_NAME% und %CURRENT_TABLE_SHORTNAME% (oder {tn} bzw. {ts}) als Platzhalter für Bezeichner zur Verfügung.</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
				<xs:attribute name="shortNameForInternalUse" type="xs:string" use="required" />
				<xs:attribute name="createTableTemplateUniqueId" use="optional">
					<xs:simpleType>
						<xs:list itemType="xs:IDREF"></xs:list>
					</xs:simpleType>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DefineTriggerType">
		<xs:complexContent>
			<xs:extension base="_DataBaseObjectCreationType">
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DefineFunctionType">
		<xs:complexContent>
			<xs:extension base="_DataBaseObjectCreationType">
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DefineTypeType">
		<xs:complexContent>
			<xs:extension base="_DataBaseObjectCreationType">
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DefineViewType">
		<xs:complexContent>
			<xs:extension base="_DataBaseObjectCreationType">
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DefineIndexType">
		<xs:complexContent>
			<xs:extension base="_DatabaseIndexBase">
				<xs:attribute name="unique" type="xs:boolean" default="false" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DefineGeomIndexType">
		<xs:complexContent>
			<xs:extension base="_DatabaseIndexBase">
				<xs:sequence>
					<xs:element name="BoundingBox" type="BoundingBoxType" minOccurs="0" maxOccurs="1" nillable="false">
					</xs:element>
					<xs:element name="ReferenceSystem" type="ReferenceSystemType" minOccurs="0" maxOccurs="1" nillable="false">
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
		Native Statements
	-->
	<xs:complexType name="AnySqlStatementType">
		<xs:sequence>
			<xs:element name="Statement" type="xs:string" minOccurs="1" maxOccurs="unbounded" nillable="false" />
		</xs:sequence>
		<xs:attribute name="targetDataBase" default="Independent">
			<xs:simpleType>
				<xs:list itemType="TargetDatabase">
				</xs:list>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="AnySql">
		<xs:complexContent>
			<xs:extension base="_DbTypeDependendOperationBaseType">
				<xs:sequence>
					<xs:element name="Body" type="AnySqlStatementType" maxOccurs="unbounded" minOccurs="1" nillable="false" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--
		Ein Update-Block
	 -->
	<xs:complexType name="BlockType">
		<xs:sequence>
			<xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1" nillable="false" />
			<xs:element name="Delete" minOccurs="0" maxOccurs="1">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Object" type="DeleteObjectType" minOccurs="1" maxOccurs="unbounded">
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="CreateTable" type="DefineTableType" minOccurs="0" maxOccurs="unbounded" />
			<xs:element name="AlterTable" type="AlterTableType" minOccurs="0" maxOccurs="unbounded" />
			<xs:element name="Contraints" minOccurs="0" maxOccurs="1" type="CreateConstraintType"/>
			<xs:element name="CreateIndex" minOccurs="0" maxOccurs="1" type="CreateIndexType"/>
			<xs:element name="CreateType" type="DefineTypeType" minOccurs="0" maxOccurs="unbounded" />
			<xs:element name="CreateTrigger" type="DefineTriggerType" minOccurs="0" maxOccurs="unbounded" />
			<xs:element name="CreateFunction" type="DefineFunctionType" minOccurs="0" maxOccurs="unbounded" />
			<xs:element name="CreateView" type="DefineViewType" minOccurs="0" maxOccurs="unbounded" />
			<xs:element name="Comments" type="AddCommentType" minOccurs="0" maxOccurs="unbounded" />
			<xs:element name="Raw" type="AnySql" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
		<xs:attribute name="targetDataBase" default="Independent">
			<xs:simpleType>
				<xs:list itemType="TargetDatabase">
				</xs:list>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="AlterTableType">
		<xs:complexContent>
			<xs:extension base="_DbTypeDependendOperationBaseType">
				<xs:sequence>
					<xs:element name="AlterColumn" type="TableColumnAlterType" minOccurs="0" maxOccurs="unbounded" />
					<xs:element name="DeleteColumn" type="TableColumnDeleteType" minOccurs="0" maxOccurs="unbounded" />
					<xs:element name="AddColumn" type="TableColumnAddType" minOccurs="0" maxOccurs="unbounded" />
				</xs:sequence>
				<xs:attribute name="shortNameForInternalUse" type="xs:string" use="optional" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="TableColumnAlterType">
		<xs:sequence>
			<xs:element name="NewColumn" type="DatabaseColumnDescription" />
		</xs:sequence>
		<xs:attribute name="columnName" type="xs:string" use="required" />
	</xs:complexType>
	<xs:complexType name="TableColumnAddType">
		<xs:sequence>
			<xs:element name="NewColumn" type="DatabaseColumnDescription" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="TableColumnDeleteType">
		<xs:attribute name="columnName" type="xs:string" use="required" />
	</xs:complexType>
	<xs:complexType name="DeleteObjectType">
		<xs:attribute name="objectName" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Name des zu löschenden Objekts.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="associatedTableName" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>Ggf. der Name der Tabelle, an der das Objekt hängt (nur bei bestimmten DB-Typen und Objekten notwendig).</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="type" type="ObjectDataType" use="required">
			<xs:annotation>
				<xs:documentation>Typ des zu löschenden Objekts.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="specification" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>Beim Löschen einer Funktion müssen für Postgres die Parameter(typen) mit übergeben werden (ohne Klammer).</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="targetDataBase" default="Independent">
			<xs:simpleType>
				<xs:list itemType="TargetDatabase">
				</xs:list>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="AddCommentType">
		<xs:sequence>
			<xs:element name="TableComment" type="TableCommentType" minOccurs="0" maxOccurs="unbounded" />
			<xs:element name="ColumnComment" type="ColumnCommentType" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="_CommentBase" abstract="true">
		<xs:sequence>
			<xs:element name="Comment" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false" />
		</xs:sequence>
		<xs:attribute name="targetDataBase" default="Independent">
			<xs:simpleType>
				<xs:list itemType="TargetDatabase">
				</xs:list>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="tableName" type="xs:string" use="required" />
	</xs:complexType>
	<xs:complexType name="TableCommentType">
		<xs:complexContent>
			<xs:extension base="_CommentBase" />
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ColumnCommentType">
		<xs:complexContent>
			<xs:extension base="_CommentBase">
				<xs:attribute name="columnName" type="xs:string" use="required" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="UpdateType">
		<xs:sequence>
			<xs:element name="Condition" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Eine Vorbedingung, die geprüft wird, ob dieser Block ausgeführt werden soll. Sind mehrere angegeben, müssen alle zutreffen.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="_DbTypeDependendOperationBaseType">
							<xs:choice minOccurs="1" maxOccurs="1">
								<xs:element name="ExecuteIfStatementFailed" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false">
									<xs:annotation>
										<xs:documentation>Hier wird ein SQL Statement erwartet, wenn dieses fehlschlägt gilt die Bedingung als erfüllt.</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element name="ExecuteIfStatementSucceds" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false">
									<xs:annotation>
										<xs:documentation>Hier wird ein SQL Statement erwartet, wenn dieses *nicht* fehlschlägt gilt die Bedingung als erfüllt.</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element name="ExecuteIfScalarResultNotNull" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false">
									<xs:annotation>
										<xs:documentation>Das Ergebnis dieser Abfrage muss != null sein.</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element name="ExecuteIfScalarResultIsNull" type="xs:string" minOccurs="1" maxOccurs="1" nillable="false">
									<xs:annotation>
										<xs:documentation>Das Ergebnis dieser Abfrage muss NULL sein.</xs:documentation>
									</xs:annotation>
								</xs:element>
							</xs:choice>
						</xs:extension>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1" />
			<xs:element name="Block" type="BlockType" minOccurs="1" maxOccurs="unbounded" />
		</xs:sequence>
		<xs:attribute name="version" type="xs:int" use="required">
			<xs:annotation>
				<xs:documentation>Die Versionsnummer des Updates. Diese muss eindeutig und fortlaufend sein!!!</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="executeInTransaction" type="xs:boolean" default="true">
			<xs:annotation>
				<xs:documentation>Normalerweise werden alle Aktionen in einer Transaktion ausgeführt, Transaktionen können für dieses Update hier deaktiviert werden.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="targetDataBase" default="Independent">
			<xs:simpleType>
				<xs:list itemType="TargetDatabase">
				</xs:list>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="BoundingBoxType">
		<xs:attribute name="xMin" type="xs:double" use="required">
		</xs:attribute>
		<xs:attribute name="yMin" type="xs:double" use="required">
		</xs:attribute>
		<xs:attribute name="xMax" type="xs:double" use="required">
		</xs:attribute>
		<xs:attribute name="yMax" type="xs:double" use="required">
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ReferenceSystemType">
		<xs:attribute name="epsg" type="xs:int" use="required">
			<xs:annotation>
				<xs:documentation>Nicht optional: Die EPSG-Nummer der Geometrie.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="srid" type="xs:int" use="optional">
			<xs:annotation>
				<xs:documentation>Optional: nur für die Verwendung von Oracle: die Oracle SRID der Geometrie, wenn nicht null.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:simpleType name="CreateAppendHintType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Begin"/>
			<xs:enumeration value="End"/>
		</xs:restriction>
	</xs:simpleType>
	<!--
		Hauptelement
	 -->
	<xs:complexType name="TemplatesType">
		<xs:sequence>
			<xs:element name="CreateTableTemplate" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Vorlagenelemente, die bei einem CreateTable angegeben werden können.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Column" type="DatabaseColumnDescription" maxOccurs="unbounded" minOccurs="1" nillable="false" />
						<xs:element name="Contraints" minOccurs="0" maxOccurs="1" type="CreateConstraintType">
							<xs:annotation>
								<xs:documentation>
									<xs:documentation>Die TableName der Constraints können hier weggelassen werden, es steht %CURRENT_TABLE_NAME% und %CURRENT_TABLE_SHORTNAME% (oder {tn} bzw. {ts}) als Platzhalter für Bezeichner zur Verfügung.</xs:documentation>
								</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="CreateIndex" minOccurs="0" maxOccurs="1" type="CreateIndexType">
							<xs:annotation>
								<xs:documentation>
									<xs:documentation>Die TableName der Constraints können hier weggelassen werden, es steht %CURRENT_TABLE_NAME% und %CURRENT_TABLE_SHORTNAME% (oder {tn} bzw. {ts}) als Platzhalter für Bezeichner zur Verfügung.</xs:documentation>
								</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
					<xs:attribute name="uniqueId" type="xs:ID"></xs:attribute>
					<xs:attribute name="columnAddOrder" type="CreateAppendHintType" default="End"/>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="Updates">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Templates" type="TemplatesType" minOccurs="0" maxOccurs="1"/>
				<xs:element name="Update" type="UpdateType" minOccurs="0" maxOccurs="unbounded" />
			</xs:sequence>
		</xs:complexType>
		<xs:key name="UniqueVersion">
			<xs:selector xpath="mstns:Update" />
			<xs:field xpath="@version" />
		</xs:key>
	</xs:element>
</xs:schema>