Lesson 3: Vulcan XML File structure
As you’ve seen in HelloWorld.xml of Lesson 1, the Vulcan XML file has a clear structure which enables the file itself easy to read and modify. You may have understood the basic grammar by just looking at HelloWorld.xml. Here’s the detailed explanation:
<Vulcan xmlns="https://tempuri.org/vulcan2.xsd">
</Vulcan>
All the table definitions, ETLs should only exist in <Vulcan> element.
<Connections>
</Connections>
The list of all the connections used in the tables, ETLs. Each connection is represented by <Connection> element as below.
<Connection Name="TestDataWarehouse" Type="OLEDB" ConnectionString="Data Source=localhost\sql2008;Initial Catalog=TestDataWarehouse;Provider=SQLNCLI10.1;Integrated Security=SSPI;" />
The connection defined by Name, Type and ConnectionString. The Name attribute will be used in table definitions and ETLs.
<Table Name="HelloWorld" ConnectionName="TestDataWarehouse">
</Table>
This is a table definition framework. You need to give it a name to be referenced in other places. The ConnectionName attribute specifies the connection to be used by this table.
<Columns>
</Columns>
This is the list of columns in a table. Each column is defined by <Column> element as below.
<Column Name="HelloID" Type="INT64" />
Column is usually defined by Name, Type and other attributes depending on the column’s type. Such as Length, Precision, Scale, IsNullable, Computed.
<Keys>
</Keys>
This is the list of keys defined in a table. Each key is defined by a key element as below. You can choose from Identity, PrimaryKey, and UniqueKey.
<PrimaryKey Name="PK_HelloPrimary" Clustered="true">
<Column ColumnName="HelloID" />
</PrimaryKey>
These 3 lines define a primary key by its Name, Clustered attributes and its underlying column. There are other attributes you can apply to a key and the underlying column. For example, SortOrder can be used to specify if the sorting order is ascending or descending.
<Sources>
<StaticSource>
<Row>0, 'Hello, World!'</Row>
<Row>1000, 'Hello, World 1000 times!'</Row>
</StaticSource>
</Sources>
The above lines just put initial values into the table and should be straightforward.