<?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="databaseObjectNameStringType">
		<xs:annotation>
			<xs:documentation>
				Definition für Namen (Spaltennamen, Tabellennamen etc.)
				Die Länge ist auf 255 Zeichen begrenzt. Allerdings kann z.B. Oracle nur 30 Zeichen
			</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:whiteSpace value="collapse"/>
			<xs:minLength value="1"/>
			<xs:maxLength value="255"/>
			<!--
			<xs:pattern value="^[a-zA-Z]\S*"/>
			FehlerDas 'targetTableName'-Attribut ist ungültig - Der Wert '%GLOBAL_SCHEMA_PREFIX%SEC_MT_USER_OBJECTS' ist gemäß seinem Datentyp 'http://schemas.webs.idu.de/db/sqlUpdate:databaseObjectNameStringType' ungültig - Pattern-Einschränkung ist fehlgeschlagen.., Das 'targetTableName'-Attribut ist ungültig - Der Wert '%GLOBAL_SCHEMA_PREFIX%SEC_MT_USER_OBJECTS' ist gemäß seinem Datentyp 'http://schemas.webs.idu.de/db/sqlUpdate:databaseObjectNameStringType' ungültig - Pattern-Einschränkung ist fehlgeschlagen.., Das 'targetTableName'-Attribut ist ungültig - Der Wert '%GLOBAL_SCHEMA_PREFIX%SEC_MT_USER_OBJECTS' ist gemäß seinem Datentyp 'http://schemas.webs.idu.de/db/sqlUpdate:databaseObjectNameStringType' ungültig - Pattern-Einschränkung ist fehlgeschlagen.., Das 'targetTableName'-Attribut ist ungültig - Der Wert '%GLOBAL_SCHEMA_PREFIX%SEC_MT_USER_OBJECTS' ist gemäß seinem Datentyp 'http://schemas.webs.idu.de/db/sqlUpdate:databaseObjectNameStringType' ungültig - Pattern-Einschränkung ist fehlgeschlagen.. im Store FisNatur
			{ts}
			{tn}
			-->
			<xs:pattern value="^((\%?[a-zA-Z\.])|{ts}|{tn}|%GLOBAL_SCHEMA_PREFIX%)({ts}|{tn}|%GLOBAL_SCHEMA_PREFIX%|[0-9_a-zA-Z\.])*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ColumnDataType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Varchar" />
			<xs:enumeration value="NVarchar" />
			<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="Time">
				<xs:annotation>
					<xs:documentation>
						Z.Z. nicht in Create usw. verwenden, nur Intern
					</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="CLob" />
			<xs:enumeration value="NCLob" />
			<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:enumeration value="JSON">
				<xs:annotation>
					<xs:documentation>JSON der Datenbank</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="UUID">
				<xs:annotation>
					<xs:documentation>Guid/UUID. Beachte, das nur für PostgreSQL und MSSql Server verfügbar</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. Wichtig: die Tabelle *muss* über eine Spalte ID verfügen.</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="OnDeleteSetNullMSSQLByTrigger">
				<xs:annotation>
					<xs:documentation>Setzt beim Löschen des referenzierten Datensatzes den Wert in der SouceColumn auf NULL - im SQLServer per Trigger und ohne richtigen FK gelöst.</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="databaseObjectNameStringType" use="required"/>
		<xs:attribute name="dropPriorCreate" default="false" type="xs:boolean">
			<xs:annotation>
				<xs:documentation>Definiert, ob ein bereits existierendes Objekt gleichen Namens vor dem Erstellen gelöscht werden soll. Diese Funktion ist derzeit nur für Fremdschlüssel (foreign key) implementiert.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</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="databaseObjectNameStringType" 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="databaseObjectNameStringType" 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="databaseObjectNameStringType" 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="optional">
					<xs:annotation>
						<xs:documentation>
							Wird vom code nicht ausgewertet.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</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:annotation>
						<xs:documentation>
							Kurzname der Tabelle, da Oracle nur Namen bis max. 30 Zeichen akzeptiert. Diesen Kurznamen für alle weiteren Objekte der Tabelle verwenden (PK,FK,Index,Constraint,...).
							Kurznamen am besten aus den Anfangsbuchstaben der Tabellennamensteile bilden, z.B. CDO_CSW_BATCH_HISTORY - CCBH und dann z.B. bei einem ForeignKey so verwenden: FK_CCBH_01
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="createTableTemplateUniqueId" use="optional">
					<xs:simpleType>
						<xs:list itemType="xs:IDREF"></xs:list>
					</xs:simpleType>
				</xs:attribute>
				<xs:attribute name="nologging" type="xs:boolean" default="false">
					<xs:annotation>
						<xs:documentation>
							Die Tabelle mit der Option "NoLogging" anlegen.
						</xs:documentation>
					</xs:annotation>
				</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>


	<xs:complexType name="ExecuteCodeType">
		<xs:sequence>
			<xs:element name="Call" minOccurs="1" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element type="xs:string" name="Arg" minOccurs="0"  maxOccurs="1">
							<xs:annotation>
								<xs:documentation>
									Ein optionales String-Argument, welcher der Methode übergeben wird.
								</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
					<xs:attribute name="netTypeName">
						<xs:annotation>
							<xs:documentation>Der Name eines .Net Typs, der von ISqlUpdateCallable ableitet und einen parameterlosen Ctor hat. "Meine.Klasse, MeinAsm"</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</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:element name="ExecuteISqlUpdateCallable" type="ExecuteCodeType" minOccurs="0" maxOccurs="1"/>


		</xs:sequence>
		<xs:attribute name="targetDataBase" default="Independent">
			<xs:annotation>
				<xs:documentation>Definiert die Datenbank, für die dieser Block gilt. Damit können datenbankspezifische Anweisungen erstellt werden, die nur auf der definierten Datenbank ausgeführt werden.</xs:documentation>
			</xs:annotation>
			<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:annotation>
						<xs:documentation>
							Kurzname der Tabelle, da Oracle nur Namen bis max. 30 Zeichen akzeptiert. Diesen Kurznamen für alle weiteren Objekte der Tabelle verwenden (PK,FK,Index,Constraint,...).
							Kurznamen am besten aus den Anfangsbuchstaben der Tabellennamensteile bilden, z.B. CDO_CSW_BATCH_HISTORY - CCBH und dann z.B. bei einem ForeignKey so verwenden: FK_CCBH_01
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</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="databaseObjectNameStringType" 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="databaseObjectNameStringType" use="required" />
	</xs:complexType>
	<xs:complexType name="DeleteObjectType">
		<xs:attribute name="objectName" type="databaseObjectNameStringType" use="required">
			<xs:annotation>
				<xs:documentation>Name des zu löschenden Objekts.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="associatedTableName" type="databaseObjectNameStringType" 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="databaseObjectNameStringType" 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="databaseObjectNameStringType" 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>