<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
	Trigger können an Aktionen
	gebunden werden
-->

<!ELEMENT Trigger (onBeforeTrigger?, onAfterTrigger?, onErrorTrigger?, onSuccessTrigger?)>
	<!ELEMENT onBeforeTrigger  ANY>
	<!ELEMENT onSuccessTrigger ANY>
	<!ELEMENT onErrorTrigger   ANY>
	<!ELEMENT onAfterTrigger   ANY> <!-- vorwiegend zum Aufräumen von irgendwelchen Sachen, sonst besser onSuccess benuzten -->
									<!-- onAfterTrigger wird nach onSuccess oder onError aufgerufen -->
		<!-- weiter Aktionen zu verwenden in Trigger -->
		<!ELEMENT ExecPredefined (#PCDATA)>
		<!ELEMENT ExecFunction (Argument*)>
			<!ATTLIST ExecFunction 
				name CDATA #REQUIRED
			>
			<!ELEMENT Argument (#PCDATA)>
			<!ATTLIST Argument 
				name  CDATA #REQUIRED
				value CDATA #REQUIRED
			>	
<!--
	Ths - das Root-Element								
-->
<!ELEMENT Ths (Trigger?,SenderInformation?, Theme)>
<!--
	useRecursion 		= Rekursiv an alle weiteren ASP Server leiten 			
	returnUnexecuted  	= gibt den *nicht* ausgeführten Teil des XML zurück 	
	logLevel 			= ... 												
	getXslt  			= fuegt eine XSLT in den Code mit ein 
	uriRef   			= relativ zu radmin.asp Seite, oder der absolute Pfad
-->
<!ATTLIST Ths
	xml:space (preserve | default) "preserve"
	version CDATA #FIXED "0.2"
	logLevel (ALL | SUCCESS | WARNINGS | ERRORS) "WARNINGS"
	returnUnexecuted (true | false) "false"
	useRecursion (true | false) "false"
	getXslt (true | false) "false"
	uriRef (relative | absolute) "relative"
>
<!--
	SenderInformation
-->
<!ELEMENT SenderInformation (Title, Description,PackageData?)>
<!ATTLIST SenderInformation
	version CDATA #REQUIRED
	progId CDATA #REQUIRED
>
	<!--
		Ein Packet fasst zusammengehörende Information 
		zusammen. Die Daten werden unter dem Schlüssel
		progId,userName,packageId zusammengefasst.
		Jedes Paket besteht aus n Aktionen, diese
		werden auch wieder durch einen eindeutigen Schlüssel
		definiert.		
	-->
	<!ELEMENT PackageData EMPTY>
	<!ATTLIST PackageData
			  packageId	   CDATA #REQUIRED
			  actionId	   CDATA #REQUIRED
			  actionTitle  CDATA #REQUIRED
	>
<!--
	Theme gibt's genau eines. Alle weitern Aktionen
	beziehen sich auf dieses Thema. Es wird vorher geprueft
	ob der Benutzer Berechtigung für dieses Thema hat
-->
<!ELEMENT Theme (ThemeProperties?, ThemeLayers?, ThemeTables?, ThemeData?)>
<!ATTLIST Theme
	internalId ID #REQUIRED
>
<!--

	ThemeTables zum löschen und anlegen von Tabellen

-->
<!ELEMENT ThemeTables (Table+)>
<!ELEMENT Table (Trigger?,(TableCreate | TableDrop | TableTruncate))>
<!ATTLIST Table
	name CDATA #REQUIRED
>
<!ELEMENT TableCreate (cField+)>
<!ELEMENT cField (#PCDATA)>
<!ATTLIST cField
	name CDATA #REQUIRED
	dataType (INTEGER | DOUBLE | STRING | BIGSTRING | BOOLEAN | BLOB | DATE | DATETIME | TIME | TIMESTAMP) #REQUIRED
	isPrimary (true | false) "false"
	indexed (true | false) "false"
	default CDATA #IMPLIED
	notNull (true | false) "false"
>
<!ELEMENT TableDrop EMPTY>
<!ELEMENT TableTruncate EMPTY>
<!--

	ThemeData ist zum austauschen der Themendaten gedacht

-->
<!ELEMENT ThemeData (Schema*, File*)>
<!--
	Schema beschreibt die Tabelleneigenschaften
-->
<!ELEMENT Schema (Trigger?, Fields, Data)>
<!ATTLIST Schema
	name CDATA #REQUIRED
>
<!--
	Fields als Array von Feldern
-->
<!ELEMENT Fields (Field+)>
<!--
	und im Singular die Eigenschaften
-->
<!ELEMENT Field (#PCDATA)>
<!ATTLIST Field
	name CDATA #REQUIRED
	dataType (INTEGER | DOUBLE | STRING | BIGSTRING | BOOLEAN | BINARY.HEX | BINARY.BASE64 | DATE | DATETIME | TIME) #REQUIRED
	isPrimary (true | false) #IMPLIED
	indexed (true | false) #IMPLIED
>
<!--
	Data die Daten organisiert in Rows
-->
<!ELEMENT Data (Section+)>
<!--
	Section als Container fuer Zeilen
-->
<!ELEMENT Section (RowData+)>
<!ATTLIST Section
	event (UPDATE | INSERT | DELETE | REPLACE) #REQUIRED
>
<!ELEMENT RowData (f+)>
<!ELEMENT f (#PCDATA)>
<!ATTLIST f
	name CDATA #REQUIRED
	value CDATA #REQUIRED
>
<!--

	File sind zu transportierende Dateien

-->
<!ELEMENT File (Trigger?,FileData)>
<!ELEMENT FileData (#PCDATA)>
<!--
	type ist klar soweit
	name ist der Name der Datei auf dem Zielsystem
	wobei der Vollständige Pfad immer über die Extension
	inter ermittelt wird.
	Die Uebermittlung von ZIP Dateien ist möglich, es muss
	die Dateien im ZIP werden dann extrahiert und wieder nach
	ext. zugeordnet. 
-->
<!ATTLIST File
	type (ASCII | BINARY.HEX | BINARY.BASE64 | ZIP.HEX | ZIP.BASE64) #REQUIRED
	name CDATA #REQUIRED
>
<!-- Gemeinsam genutzte Elemente -->
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Description (#PCDATA)>
<!--
	ThemeLayers  ist zum austauschen der Themen Ebenen
	bei Event UNLOAD|RELOAD werden alle weiteren
	Angaben ignoriert!!
-->
<!ELEMENT ThemeLayers (ThemeLayer+)>
<!ELEMENT ThemeLayer (Trigger?, (SortClassList | SortClassFree)?, Title?, Description?, LayerName?, Source?, Visible?)>
<!ATTLIST ThemeLayer
	internalId CDATA #REQUIRED
	event (MODIFY | CREATE | AUTO | UNLOAD | RELOAD) #REQUIRED
>
<!-- oder .. ein Standartwert (siehe Notes)-->
<!ELEMENT SortClassList (#PCDATA)>
<!ATTLIST SortClassList
	value (B2 | B5 | B8 | D2 | D5 | D8 | G2 | G5 | G8 | H2 | H5 | H9 | J2 | J5 | J8 | K2 | K8 | L5) #REQUIRED
>
<!-- oder .. ein anderer Wert -->
<!ELEMENT SortClassFree (#PCDATA)>
<!ELEMENT Source (#PCDATA)>
<!ELEMENT LayerName (#PCDATA)>
<!ELEMENT Visible EMPTY>
<!ATTLIST Visible
	value (true | false) #REQUIRED
>
<!--
	ThemeProperties ist zum austauschen der Themeneig. gedacht
-->
<!ELEMENT ThemeProperties (Trigger?, Title?, Description?, SelectableLayers?, PreviewOnly?, SpecialApplicationUrl?, Selection?, MapTip?, SelFeatureHint?, Legend?, Copyright?, Usagehint?, DetailPrefix?, ThemeGroup?, PrimaryBaseMap?, BaseMaps?)>
<!ATTLIST ThemeProperties
	event (MODIFY | CREATE | AUTO) #REQUIRED
>
<!--														-->
<!ELEMENT SelectableLayers (#PCDATA)>
<!ELEMENT PreviewOnly (#PCDATA)>
<!ATTLIST PreviewOnly
	value (true | false) #REQUIRED
>
<!ELEMENT SpecialApplicationUrl (#PCDATA)>
<!ELEMENT Selection (#PCDATA)>
<!ELEMENT MapTip (#PCDATA)>
<!ELEMENT SelFeatureHint (#PCDATA)>
<!ELEMENT Legend (#PCDATA)>
<!ELEMENT Copyright (#PCDATA)>
<!ELEMENT Usagehint (#PCDATA)>
<!ELEMENT DetailPrefix (#PCDATA)>
<!ELEMENT ThemeGroup (#PCDATA)>
<!ELEMENT PrimaryBaseMap (#PCDATA)>
<!ELEMENT BaseMaps (BaseMap+)>
<!ATTLIST BaseMaps
	event (ADD | REPLACE | DROP) #REQUIRED
>
<!ELEMENT BaseMap (#PCDATA)>
<!--													
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
							NOTES Sortorder für Layer
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	B2 ->grossen Flaechen - unterhalb der Linien der Grundkarte
	B5 ->mittlere Flaechen - unterhalb der Linien der Grundkarte
	B8 ->kleine Flaechen - unterhalb der Linien der Grundkarte
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	D2 ->starke Linien - unterhalb der Punkte der Grundkarte
	D5 ->mittlere Linien - unterhalb der Punkte der Grundkarte
	D8 ->dünne Linien - unterhalb der Punkte der Grundkarte
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	G2 ->große Flaechen
	G5 ->mittlere Flaechen
	G8 ->kleine Flaechen
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	H2 ->starke Linien
	H5 ->mittlere Linien
	H9 ->dünne Linien
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	J2 ->große Punkte
	J5 ->mittlere Punkte
	J8 ->kleine Punkte
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	K2 ->große Texte
	K5 ->mittlere Texte
	K8 ->kleine Texte
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	L5 ->immer oben (nur in Ausnahmefällen einsetzen)
-->

