<!--
# Author: Peter Koeker
# Version: 1.1
# Date: 8.8.2011
-->
<!ENTITY % DatabaseType "(JDBC_ODBC | MYSQL | FIREBIRD | SQL_SERVER | MCKOI | MAXDB
| SYBASE | ORACLE | CACHE | DB2 | HSQLDB | POSTGRES)" >
<!ENTITY % join "(true|INNER|LEFT|RIGHT)">
<!ENTITY % isolationLevel "(TRANSACTION_NONE | TRANSACTION_READ_UNCOMMITTED | TRANSACTION_READ_COMMITTED |
TRANSACTION_REPEATABLE_READ | TRANSACTION_SERIALIZABLE)" >

<!ELEMENT Server (LayerName?, DatasetDefinitionFile?, Database+, Dataset?, Format?, 
Options?, (View | Statement | Batch)*)>

<!ELEMENT LayerName (#PCDATA)>
<!ELEMENT DatasetDefinitionFile (#PCDATA)>

<!ELEMENT Database (JDBC-Driver, URL, Catalog?, Schema?, 
Username?, Password?, MetadataTableTypes?,
MaxActiveConnections?, MaxIdleConnections?, MinIdleConnections?,
ConnectionTimeOut?, TestOnBorrow?, TestOnReturn?, ValidationQuery?, ValidationInterval?, PoolPreparedStatements?, InitializationScript?,
TransactionIsolationLevel?, Sequence*, PingStatement?,  
ReadMetaDataReferences?, 
OptimisticLockingField?, CreateUserField?, UpdateUserField? 
)
>
<!ATTLIST Database
name	NMTOKEN	#REQUIRED
enabled (true|false) #IMPLIED
>

<!ELEMENT JDBC-Driver (#PCDATA)>
<!ELEMENT URL (#PCDATA)>
<!ELEMENT Catalog (#PCDATA)>
<!ELEMENT Schema (#PCDATA)>
<!ELEMENT Username (#PCDATA)>
<!ELEMENT Password (#PCDATA)>
<!-- "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM" -->
<!ELEMENT MetadataTableTypes (#PCDATA)>

<!ELEMENT TestOnBorrow EMPTY>
<!ATTLIST TestOnBorrow
value (true|false) #REQUIRED
>

<!ELEMENT TestOnReturn EMPTY>
<!ATTLIST TestOnReturn
value (true|false) #REQUIRED
>

<!-- SELECT 1 FROM DUAL; Muss angegeben werden, wenn TestOnBorrow oder -Return auf true stehen --> 
<!ELEMENT ValidationQuery (#PCDATA)>

<!-- Default ist 30000 (30Sec) -->
<!ELEMENT ValidationInterval EMPTY>
<!ATTLIST ValidationInterval
value CDATA #REQUIRED
>

<!-- Deprecated; galt fuer DBCP -->
<!ELEMENT PoolPreparedStatements EMPTY>
<!ATTLIST PoolPreparedStatements
value (true|false) #REQUIRED
>

<!ELEMENT Sequence (get, set?)>
<!ATTLIST Sequence
name NMTOKEN #IMPLIED
databaseType %DatabaseType; #IMPLIED
>

<!ELEMENT get (#PCDATA)>
<!ELEMENT set (#PCDATA)>

<!ELEMENT PingStatement (#PCDATA)>
<!ELEMENT InitializationScript (#PCDATA)>

<!ELEMENT TransactionIsolationLevel EMPTY>
<!ATTLIST TransactionIsolationLevel 
value %isolationLevel; #REQUIRED>

<!ELEMENT Dataset (Encoding?, ElementName?)>
<!ELEMENT Encoding EMPTY>
<!ATTLIST Encoding
value CDATA #REQUIRED>

<!ELEMENT ElementName EMPTY>
<!ATTLIST ElementName
value CDATA #REQUIRED>

<!ELEMENT Format (DateFormat?, TimeFormat?, TimestampFormat?, DecimalFormat?)>
<!ELEMENT DateFormat EMPTY>
<!ATTLIST DateFormat
value CDATA #REQUIRED>

<!ELEMENT TimeFormat EMPTY>
<!ATTLIST TimeFormat
value CDATA #REQUIRED>

<!ELEMENT TimestampFormat EMPTY>
<!ATTLIST TimestampFormat
value CDATA #REQUIRED>

<!ELEMENT DecimalFormat EMPTY>
<!ATTLIST DecimalFormat
value CDATA #REQUIRED>

<!ELEMENT Options (Debug?, Profiler?, JMX?, UpdateJournalDirectory?, SlowQueryLogger?, BlockingQueueCapacity?)>
<!ELEMENT Debug EMPTY>
<!ATTLIST Debug
value (true|false) #REQUIRED>

<!ELEMENT Profiler EMPTY>
<!ATTLIST Profiler
value (true|false) #REQUIRED>

<!ELEMENT JMX EMPTY>
<!ATTLIST JMX
value (true|false) #REQUIRED>

<!ELEMENT SlowQueryLogger (#PCDATA)>
<!ATTLIST SlowQueryLogger
loggerName CDATA #REQUIRED
defaultMaxExecutionTime CDATA #IMPLIED
>

<!ELEMENT BlockingQueueCapacity EMPTY>
<!ATTLIST BlockingQueueCapacity
value CDATA #REQUIRED>

<!ELEMENT ReadMetaDataReferences EMPTY>
<!ATTLIST ReadMetaDataReferences
value (true|false) #REQUIRED>

<!ELEMENT OptimisticLockingField EMPTY>
<!ATTLIST OptimisticLockingField
value CDATA #REQUIRED>

<!ELEMENT CreateUserField EMPTY>
<!ATTLIST CreateUserField
value CDATA #REQUIRED>

<!ELEMENT UpdateUserField EMPTY>
<!ATTLIST UpdateUserField
value CDATA #REQUIRED>

<!ELEMENT TransactionWaitTimeout EMPTY>
<!ATTLIST TransactionWaitTimeout
value CDATA #REQUIRED>

<!ELEMENT MaxActiveConnections EMPTY>
<!ATTLIST MaxActiveConnections
value CDATA #REQUIRED>

<!ELEMENT MaxIdleConnections EMPTY>
<!ATTLIST MaxIdleConnections
value CDATA #REQUIRED>

<!ELEMENT MinIdleConnections EMPTY>
<!ATTLIST MinIdleConnections
value CDATA #REQUIRED>

<!ELEMENT ConnectionTimeOut EMPTY>
<!ATTLIST ConnectionTimeOut
value CDATA #REQUIRED>

<!ELEMENT View (Cache?, RootTable)>
<!ATTLIST View
name CDATA #REQUIRED
readonly (true|false) #IMPLIED
transient (true|false) #IMPLIED
database CDATA #IMPLIED
databaseType %DatabaseType; #IMPLIED
maxExecutionTime CDATA #IMPLIED
isolationLevel %isolationLevel; #IMPLIED
>

<!ELEMENT RootTable ((Column | Child | Parent)*)>
<!ATTLIST RootTable
tablename NMTOKEN #REQUIRED
viewname	CDATA	#IMPLIED
database CDATA #IMPLIED
distinct (true|false) #IMPLIED
pk CDATA #REQUIRED
alias CDATA #IMPLIED
where CDATA #IMPLIED
orderby CDATA #IMPLIED
groupby CDATA #IMPLIED
readonly (true|false) #IMPLIED
transient (true|false) #IMPLIED
fetchSize	CDATA	#IMPLIED
maxFieldSize	CDATA	#IMPLIED
maxRows	CDATA	#IMPLIED
databaseType %DatabaseType; #IMPLIED
queryTimeout	CDATA	#IMPLIED
maxExecutionTime CDATA #IMPLIED
changeProtocol CDATA #IMPLIED
>

<!ELEMENT Column EMPTY>
<!ATTLIST Column
name CDATA #REQUIRED
alias CDATA #IMPLIED
type (BIGINT|INTEGER|BOOLEAN|
CHAR|VARCHAR|
DECIMAL|NUMERIC|DOUBLE|
DATE|TIME|TIMESTAMP) #IMPLIED
notnull (true|false) #IMPLIED
size CDATA #IMPLIED
decimalDigits CDATA #IMPLIED
defaultValue CDATA #IMPLIED
readonly (true|false) #IMPLIED
transient (true|false) #IMPLIED
>

<!ELEMENT Child ((Column | Child | Parent | Union)*)>
<!ATTLIST Child
tablename NMTOKEN #REQUIRED
refname CDATA #IMPLIED
viewname	CDATA	#IMPLIED
database CDATA #IMPLIED
distinct (true|false) #IMPLIED
pk CDATA #IMPLIED
fk CDATA #REQUIRED
alias CDATA #IMPLIED
join %join; #IMPLIED
selfReference (true|false) #IMPLIED
where CDATA #IMPLIED
orderby CDATA #IMPLIED
groupby CDATA #IMPLIED
readonly (true|false) #IMPLIED
transient (true|false) #IMPLIED
virtual NMTOKEN #IMPLIED
fetchSize	CDATA	#IMPLIED
maxFieldSize	CDATA	#IMPLIED
maxRows	CDATA	#IMPLIED
queryTimeout	CDATA	#IMPLIED
OnDelete (Cascade|SetNull|Restrict|NoAction|SetDefault) #IMPLIED
OnUpdate (Cascade|SetNull|Restrict|NoAction|SetDefault) #IMPLIED
databaseType %DatabaseType; #IMPLIED
maxExecutionTime CDATA #IMPLIED
changeProtocol CDATA #IMPLIED
seq CDATA #IMPLIED
>

<!ELEMENT Parent ((Column | Parent)*)>
<!ATTLIST Parent
tablename NMTOKEN #REQUIRED
viewname	CDATA	#IMPLIED
refname CDATA #IMPLIED
database CDATA #IMPLIED
pk CDATA #REQUIRED
fk CDATA #REQUIRED
alias CDATA #IMPLIED
join %join; #IMPLIED
transient (true|false) #IMPLIED
fetchSize	CDATA	#IMPLIED
maxFieldSize	CDATA	#IMPLIED
maxRows	CDATA	#IMPLIED
databaseType %DatabaseType; #IMPLIED
queryTimeout	CDATA	#IMPLIED
maxExecutionTime CDATA #IMPLIED
seq CDATA #IMPLIED
>

<!ELEMENT Union (#PCDATA)>

<!ELEMENT Cache (#PCDATA)>
<!ATTLIST Cache
enabled (true|false) #IMPLIED
maxElementsInMemory CDATA #IMPLIED
maxElementsOnDisk CDATA #IMPLIED
eternal (true|false) #IMPLIED
overflowToDisk (true|false) #IMPLIED
timeToIdleSeconds CDATA #IMPLIED
timeToLiveSeconds CDATA #IMPLIED
maxDatasetRows CDATA #IMPLIED
tables CDATA #IMPLIED
>

<!ELEMENT Statement (Cache?)>
<!ATTLIST Statement
name NMTOKEN #REQUIRED
datasetname NMTOKEN #IMPLIED
tablename NMTOKEN #IMPLIED
maxRows CDATA #IMPLIED
databaseType %DatabaseType; #IMPLIED
queryTimeout  CDATA #IMPLIED
maxExecutionTime CDATA #IMPLIED
isolationLevel %isolationLevel; #IMPLIED
>

<!ELEMENT Batch (Statement*)>
<!ATTLIST Batch
name NMTOKEN #REQUIRED
>

<!ELEMENT UpdateJournalDirectory (#PCDATA)>


