# Basic Concept

## Simple Guide

同步計畫以 XML 進行設計，XML 包括四個子集：

* jobSpace
* taskSpace
* tableSpace
* databaseSpace

### jobSpace

定義待執行的工作 (job)，內容包括：

* 資料搜尋策略
* 工作項 (item) 及對應任務 (task)
* 資料來源 (source)
* 轉移目的 (target)

### taskSpace

定義可被工作項 (item) 調用的任務，內容包括：

* 來源資料表 (source) 與目的資料表 (target)
* 子任務群 (next, plan, task)

### tableSpace

補充資料表的主鍵。

### databaseSpace

定義工作 (job) 中資料來源 (source) 與轉移目的 (target) 參考到的資料庫。配合整合測試，可配置特殊的 IDLE 資料庫，用於模擬資料的轉移。

```markup
<databaseSpace>
  <database>
    <id>IDLE</id>
    <host>0.0.0.0</host>
    <port>0</port>
    <dbName></dbName>
    <user></user>
    <password></password>
    <driverClass>uia.tmd.IdleAccess</driverClass>
  </database>
</databaseSpace>
```

## Samples

```markup
<?xml version="1.0" encoding="UTF-8"?>
<tmd xmlns="http://tmd.uia/model/xml">
	<jobSpace>
		<job name="MVSDB_ALL_IDLE" source="IVP1" target="IDLE">
			<item taskName="hspt" />
			<item taskName="ivp" />		
			<item taskName="ivp_agent" />		
			<item taskName="ivp_event_def" />		
			<item taskName="ivp_raw" />		
			<item taskName="ivp_raw_event" />		
			<item taskName="ivp_run" driverName="uia.tmd.impl.MyItemRunner">
				<args>
					<arg>created_time</arg>
				</args>
			</item>
			<item taskName="ivp_run_memo" />		
		</job>
		<job name="MVSDB_ALL_IVP2" source="IVP1" target="IVP2">
			<item taskName="hspt" />
			<item taskName="ivp" />		
			<item taskName="ivp_agent" />		
			<item taskName="ivp_event_def" />		
			<item taskName="ivp_raw" />		
			<item taskName="ivp_raw_event" />		 
			<item taskName="ivp_run" driverName="uia.tmd.impl.MyItemRunner">
				<args>
					<arg>created_time</arg>
				</args>
			</item>
			<item taskName="ivp_run_memo" />		
		</job>
	</jobSpace>
	<taskSpace>
		<task name="hspt">
			<sourceSelect table="hspt" />
			<targetUpdate />
		</task>
		<task name="ivp">
			<sourceSelect table="ivp" />
			<targetUpdate />
		</task>
		<task name="ivp_agent">
			<sourceSelect table="ivp_agent" />
			<targetUpdate />
		</task>
		<task name="ivp_event_def">
			<sourceSelect table="ivp_event_def" />
			<targetUpdate />
		</task>
		<task name="ivp_raw">
			<sourceSelect table="ivp_raw" />
			<targetUpdate />
		</task>
		<task name="ivp_raw_event">
			<sourceSelect table="ivp_raw_event" />
			<targetUpdate />
		</task>
		<task name="ivp_run">
			<sourceSelect table="ivp_run" />
			<targetUpdate />
		</task>
		<task name="ivp_run_memo">
			<sourceSelect table="ivp_run_memo" />
			<targetUpdate />
		</task>
	</taskSpace>
	<tableSpace />
	<databaseSpace>
		<database>
			<id>IDLE</id>
			<host>0.0.0.0</host>
			<port>0</port>
			<dbName></dbName>
			<user></user>
			<password></password>
			<driverClass>uia.tmd.IdleAccess</driverClass>
		</database>
		<database>
			<id>IVP1</id>
			<host>localhost</host>
			<port>5432</port>
			<dbName>mvsdb</dbName>
			<user>huede</user>
			<password>huede</password>
			<driverClass>uia.tmd.access.PGSQLAccess</driverClass>
		</database>
		<database>
			<id>IVP2</id>
			<host>localhost</host>
			<port>5432</port>
			<dbName>mvsdb2</dbName>
			<user>huede</user>
			<password>huede</password>
			<driverClass>uia.tmd.access.PGSQLAccess</driverClass>
		</database>
	</databaseSpace>
</tmd>
```
