<?xml version='1.0' encoding='utf-8' ?>
<!-- Document Type Definition for KOMET's XML conversation: KometML -->
<!ELEMENT komet (request | response)>
<!ELEMENT response (dataTree | editTree | error | resultTree | solverTree | success | valueList)>
<!ELEMENT request (dataTree | editTree | register | resultTree | solverTree | unRegister | valueList | writeEditTree)>
<!-- For Error handling the Server can create an error message embedded -->
<!-- in KometML -->
<!ELEMENT error EMPTY>
<!ATTLIST error id CDATA #REQUIRED
name CDATA #REQUIRED>
<!-- Successful requests can cause the server to create a success -->
<!-- message in KometML -->
<!ELEMENT success EMPTY>
<!ATTLIST success id CDATA #REQUIRED
name CDATA #REQUIRED>
<!-- The ResultTree Request consists of an empty resultTree tag, -->
<!-- whereas the Response is populated with the tags: -->
<!-- solver, subSolver, resultSet and result -->
<!ELEMENT resultTree (solver*)>
<!ATTLIST resultTree id CDATA #IMPLIED
name CDATA #IMPLIED>
<!ELEMENT solver (subSolver | resultSet)+>
<!ATTLIST solver id CDATA #REQUIRED
name CDATA #REQUIRED
active CDATA #IMPLIED>
<!ELEMENT subSolver (subSolver | resultSet)+>
<!ATTLIST subSolver id CDATA #REQUIRED
name CDATA #REQUIRED>
<!ELEMENT resultSet (result)+>
<!ATTLIST resultSet id CDATA #REQUIRED
name CDATA #REQUIRED>
<!ELEMENT result EMPTY>
<!ATTLIST result id CDATA #REQUIRED
name CDATA #REQUIRED
dbName CDATA #IMPLIED
key CDATA #IMPLIED
class CDATA #IMPLIED
ioTtype CDATA #IMPLIED
dataType CDATA #IMPLIED
scope CDATA #IMPLIED
unit CDATA #IMPLIED
belongsTo CDATA #IMPLIED
value CDATA #IMPLIED>
<!-- The dataTree Request contains several item tags, -->
<!-- the Response contains table tags, which contain the tags: -->
<!-- column and keyColumn -->
<!ELEMENT dataTree (item | table)+>
<!ELEMENT table (keyColumn+, column+)>
<!ATTLIST table id CDATA #REQUIRED
name CDATA #REQUIRED
dbName CDATA #REQUIRED>
<!ELEMENT column EMPTY>
<!ATTLIST column id CDATA #REQUIRED
name CDATA #REQUIRED
dbName CDATA #REQUIRED
class CDATA #IMPLIED
belongsTo CDATA #IMPLIED
scope CDATA #IMPLIED
unit CDATA #IMPLIED>
<!ELEMENT keyColumn EMPTY>
<!ATTLIST keyColumn id CDATA #REQUIRED
name CDATA #REQUIRED
dbName CDATA #REQUIRED
key CDATA #IMPLIED>
<!ELEMENT item EMPTY>
<!ATTLIST item class CDATA #REQUIRED
belongsTo CDATA #REQUIRED
scope CDATA #IMPLIED
unit CDATA #IMPLIED>
<!-- The valueList Request contains a values tag which holds the query -->
<!-- statement and the number of columns that are columns selected -->
<!-- The Response filles the values tag with the rows and columns -->
<!-- returned by the the query: row and valueItem -->
<!ELEMENT valueList (values)>
<!ATTLIST valueList id CDATA #IMPLIED
name CDATA #IMPLIED>
<!ELEMENT values (row)+>
<!ATTLIST values id CDATA #IMPLIED
name CDATA #IMPLIED
num CDATA #REQUIRED
statement CDATA #REQUIRED>
<!ELEMENT row (valueItem)+>
<!ATTLIST row id CDATA #IMPLIED
name CDATA #IMPLIED>
<!ELEMENT valueItem EMPTY>
<!ATTLIST valueItem id CDATA #IMPLIED
name CDATA #IMPLIED
value CDATA #REQUIRED>
<!-- The SolverTree Request consists of an empty solverTree tag, -->
<!-- whereas the Response is populated with the tags: -->
<!-- solverSet and solverPgm -->
<!ELEMENT solverTree (solverSet*)>
<!ATTLIST solverTree id CDATA #IMPLIED
name CDATA #IMPLIED>
<!ELEMENT solverSet (solverPgm | solverSet)+>
<!ATTLIST solverSet id CDATA #IMPLIED
name CDATA #IMPLIED>
<!ELEMENT solverPgm EMPTY>
<!ATTLIST solverPgm id CDATA #REQUIRED
name CDATA #REQUIRED
prgName CDATA #IMPLIED>
<!-- The writeSolverData Request is used to write back te edited -->
<!-- Solver infomation to the database. This is only the information -->
<!-- whether or not the solver should be started. Like the solverTree, -->
<!-- it is populated with the tags: -->
<!-- solverSet and solverPgm -->
<!ELEMENT writeSolverData (solverSet*)>
<!ATTLIST writeSolverData id CDATA #IMPLIED
name CDATA #IMPLIED>
<!-- The editTree Request consists of an empty editTree tag, whereas -->
<!-- the Response is populated with the tags: -->
<!-- editSolver, editSubSolver editTable and editItem -->
<!ELEMENT editTree (editSolver*)>
<!ATTLIST editTree id CDATA #IMPLIED
name CDATA #IMPLIED>
<!ELEMENT editSolver (editSubSolver | editTable)+>
<!ATTLIST editSolver id CDATA #REQUIRED
name CDATA #REQUIRED>
<!ELEMENT editSubSolver (editSubSolver | editTable)+>
<!ATTLIST editSubSolver id CDATA #REQUIRED
name CDATA #REQUIRED>
<!ELEMENT editTable (editItem)+>
<!ATTLIST editTable id CDATA #REQUIRED
name CDATA #REQUIRED
dbName CDATA #REQUIRED>
<!ELEMENT editItem EMPTY>
<!ATTLIST editItem id CDATA #REQUIRED
name CDATA #REQUIRED
dbName CDATA #REQUIRED
class CDATA #REQUIRED
value CDATA #REQUIRED>
<!-- The writeEditTree Request is used to write the edited values back -->
<!-- to the database. Like the editTree, it is populated with the tags: -->
<!-- editSolver, editSubSolver editTable and editItem -->
<!ELEMENT writeEditTree (editSolver*)>
<!ATTLIST eriteEditTree id CDATA #IMPLIED
name CDATA #IMPLIED>
<!-- These Tags implement the data structure needed for registering -->
<!-- solvers, subsolvers resultsets and results -->
<!-- Moreover, both solver dependencies and relations between tables -->
<!-- (which are here defined as resultsets) can be modelled -->
<!-- Each result encapsulates exactly one Ontology-Tag that describes -->
<!-- the Ontology-Attributes stored in the [solver].owl file at the -->
<!-- server side -->
<!ELEMENT register (regSolver+)>
<!ATTLIST register id CDATA #IMPLIED
name CDATA #IMPLIED>
<!ELEMENT regSolver ((regSubSolver | regResultSet)+, regRequiredResult*, regRelation*)>
<!ATTLIST regSolver id CDATA #REQUIRED
name CDATA #REQUIRED
namespace CDATA #REQUIRED
visible CDATA #REQUIRED>
<!ELEMENT regSubSolver (regSubSolver | regResultSet)+>
<!ATTLIST regSubSolver id CDATA #REQUIRED
name CDATA #REQUIRED
visible CDATA #REQUIRED>
<!ELEMENT regResultSet (regResult)+>
<!ATTLIST regResultSet id CDATA #REQUIRED
name CDATA #REQUIRED
dbName CDATA #REQUIRED
visible CDATA #REQUIRED
editable CDATA #IMPLIED>
<!ELEMENT regResult (regOntology)+>
<!ATTLIST regResult id CDATA #REQUIRED
name CDATA #REQUIRED
dbName CDATA #REQUIRED
key CDATA #REQUIRED
visible CDATA #REQUIRED>
<!ELEMENT regOntology EMPTY>
<!ATTLIST regOntology class CDATA #REQUIRED
ioType CDATA #REQUIRED
dataType CDATA #REQUIRED
scope CDATA #REQUIRED
unit CDATA #REQUIRED
belongsTo CDATA #REQUIRED
accuracy CDATA #IMPLIED>
<!ELEMENT regRelation (regForeignKey)+>
<!ATTLIST regRelation id CDATA #REQUIRED
sourceResultSetID CDATA #REQUIRED
destinationResultSetID CDATA #REQUIRED>
<!ELEMENT regForeignKey EMPTY>
<!ATTLIST regForeignKey id CDATA #REQUIRED>
<!ELEMENT regRequiredResult EMPTY>
<!ATTLIST regRequiredResult class CDATA #REQUIRED
belongsTo CDATA #REQUIRED
scope CDATA #IMPLIED
unit CDATA #IMPLIED
accuracy CDATA #IMPLIED>
<!-- The unRegister Request ist just empty tag pointing to the solver -->
<!-- to be unregisterd with its id attribute -->
<!ELEMENT unRegister EMPTY>
<!ATTLIST unRegister id CDATA #REQUIRED>