Tabular data in XML input

Tabular data in XML input

Tabular input data format #

ADH can support the generation of a suitable Input Pattern for handling tabular data in an XML input file/document, but only if the input format is as described here.

Assume the original document contains a table like this:

  Q1 Q2 Q3 Q4
Premium 100 100 110 120
Commission   20   25

To be processed as a table in ADH, it must be represented in the XML input file as a <table> element with “number”, “numRows” and “numCols” attributes, and having the following three groups of child elements:

  • A list of <cell> elements. Each <cell> must have “rowNumber” and"columnNumber" attributes, and a <value> child element containing the cell value. Only cells with a value need to be present. No specific cell ordering is required. Empty cells can be left out, thus making this a ‘sparse’ table.
  • A list of <row> elements. Each <row> must have a “number” attribute containing the row number, and a list of <cell> elements belonging to this row.
  • A list of <column> elements. Each must have a “number” attribute containing the column number, and a list of <cell> elements belonging to this column.

Row and column numbering starts at 1. As a consequence of this requirement, the same data appear three times under the <table> tag in cell(direct children of <table>), row/cell and column/cell. There are three Leaf Repeating Groups, table/cell, table/row/cell and table/column/cell. Normally, one would make mapping connections to only of these three LRG, and the transformation mapping can be set up to create one output pattern for each connected Leaf Repeating Group occurrence (unless one or more occurrences are blocked by a Gate (Master) block).

Using the table displayed above, the XML data looks like:

<table number="1" numRows="3" numCols="5">
<cell rowNumber="2" columnNumber="1">
<value>Premium</value>
</cell>
<cell rowNumber="3" columnNumber="1">
<value>Commission</value>
</cell>
<cell rowNumber="1" columnNumber="2">
<value>Q1</value>
</cell>
<cell rowNumber="2" columnNumber="2">
<value>100</value>
</cell>
<cell rowNumber="1" columnNumber="3">
<value>Q2</value>
</cell>
<cell rowNumber="2" columnNumber="3">
<value>100</value>
</cell>
<cell rowNumber="3" columnNumber="3">
<value>20</value>
</cell>
<cell rowNumber="1" columnNumber="4">
<value>Q3</value>
</cell>
<cell rowNumber="2" columnNumber="4">
<value>110</value>
</cell>
<cell rowNumber="1" columnNumber="5">
<value>Q4</value>
</cell>
<cell rowNumber="2" columnNumber="5">
<value>120</value>
</cell>
<cell rowNumber="3" columnNumber="5">
<value>25</value>
</cell>
<column number="1">
<cell rowNumber="2" columnNumber="1">
<value>Premium</value>
</cell>
<cell rowNumber="3" columnNumber="1">
<value>Commission</value>
</cell>
</column>
<column number="2">
<cell rowNumber="1" columnNumber="2">
<value>Q1</value>
</cell>
<cell rowNumber="2" columnNumber="2">
<value>100</value>
</cell>
</column>
<column number="3">
<cell rowNumber="1" columnNumber="3">
<value>Q2</value>
</cell>
<cell rowNumber="2" columnNumber="3">
<value>100</value>
</cell>
<cell rowNumber="3" columnNumber="3">
<value>20</value>
</cell>
</column>
<column number="4">
<cell rowNumber="1" columnNumber="4">
<value>Q3</value>
</cell>
<cell rowNumber="2" columnNumber="4">
<value>110</value>
</cell>
</column>
<column number="5">
<cell rowNumber="1" columnNumber="5">
<value>Q4</value>
</cell>
<cell rowNumber="2" columnNumber="5">
<value>120</value>
</cell>
<cell rowNumber="3" columnNumber="5">
<value>25</value>
</cell>
</column>
<row number="1">
<cell rowNumber="1" columnNumber="2">
<value>Q1</value>
</cell>
<cell rowNumber="1" columnNumber="3">
<value>Q2</value>
</cell>
<cell rowNumber="1" columnNumber="4">
<value>Q3</value>
</cell>
<cell rowNumber="1" columnNumber="5">
<value>Q4</value>
</cell>
</row>
<row number="2">
<cell rowNumber="2" columnNumber="1">
<value>Premium</value>
</cell>
<cell rowNumber="2" columnNumber="2">
<value>100</value>
</cell>
<cell rowNumber="2" columnNumber="3">
<value>100</value>
</cell>
<cell rowNumber="2" columnNumber="4">
<value>110</value>
</cell>
<cell rowNumber="2" columnNumber="5">
<value>120</value>
</cell>
</row>
<row number="3">
<cell rowNumber="3" columnNumber="1">
<value>Commission</value>
</cell>
<cell rowNumber="3" columnNumber="3">
<value>20</value>
</cell>
<cell rowNumber="3" columnNumber="5">
<value>25</value>
</cell>
</row>
</table>

When using the ‘Entity-Value’ Input Pattern Generator (see the Processing Options document), the generator will look for the exact element and attribute names mentioned above. If found, the generator will generate 3 repeating Input Pattern groups, for cells, columns and rows, respectively. It will also generate auxiliary Input Pattern fields for row and column names (headings).

A typical Input Pattern generated in this way will look like so (showing only the tabular structure):

image081.png

Figure 50 Input pattern - table structure