<!-- This file was created using the HTML documentation generator. -->
<!-- Creation date: Sun Nov 01 10:48:58 GMT 2020-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
      	<title>Metamodel Documentation (platform:/resource/org.eclipse.efbt.cocamo.smcubes.model.input_data/model/base_column_structured_data.ecore)</title>
    	<script type="text/javascript">
//<![CDATA[				    	
// TOC script based on code taken from http://www.quirksmode.org/dom/toc.html
function makeTOC() {
	
	var toc = document.createElement('div')				
	toc.id = "toc";
	toc.innerHTML = "Table of Contents"				
	document.body.appendChild(toc);
				
	var innertocDiv = createTOC()				
	toc.appendChild(innertocDiv);
}


function createTOC() {
	var y = document.createElement('div');
	y.id = 'innertoc';
	//var a = y.appendChild(document.createElement('span'));
	//a.onclick = showhideTOC;
	//a.id = 'contentheader';
	//a.innerHTML = 'Show Table of Contents';
	var z = y.appendChild(document.createElement('div'));
	//z.onclick = showhideTOC;
	var toBeTOCced = getElementsByTagNames('h1,h2,h3');
	if (toBeTOCced.length < 2) return false;
	var hCount = 0;
	var hhCount = 0;
	var hhhCount = 0;
	for (var i=0;i<toBeTOCced.length;i++) {
	var tmp = document.createElement('a');
	tmp.className = 'page';
	var text;
	var textPre;
	if (toBeTOCced[i].nodeName == 'h2'){
		tmp.className += ' indent';
		textPre = hCount + "."+ ++hhCount + ". "; 
	}
	else if (toBeTOCced[i].nodeName == 'h3'){
		tmp.className += ' extraindent';
		textPre = hCount + "."+ hhCount + "."+ ++hhhCount +". "; 
	}
	else {
		textPre = ++hCount + ". "; 
		hhCount = 0;
		hhhCount = 0;
	}
	text = textPre + toBeTOCced[i].textContent;
	toBeTOCced[i].innerHTML = textPre + toBeTOCced[i].innerHTML;
	
	tmp.innerHTML = text; 
	z.appendChild(tmp);
	var headerId = toBeTOCced[i].id || 'link' + i;
	tmp.href = '#' + headerId;
	toBeTOCced[i].id = headerId;
	}
	return y;
}

function getElementsByTagNames(list,obj) {
	if (!obj) var obj = document;
	var tagNames = list.split(',');
	var resultArray = new Array();
	for (var i=0;i<tagNames.length;i++) {
		var tags = obj.getElementsByTagName(tagNames[i]);
		for (var j=0;j<tags.length;j++) {
			resultArray.push(tags[j]);
		}
	}
	var testNode = resultArray[0];
	if (!testNode) return [];
	if (testNode.sourceIndex) {
		resultArray.sort(function (a,b) {
				return a.sourceIndex - b.sourceIndex;
		});
	}
	else if (testNode.compareDocumentPosition) {
		resultArray.sort(function (a,b) {
				return 3 - (a.compareDocumentPosition(b) & 6);
		});
	}
	return resultArray;
}
	    	
//]]>				    	
	    	</script>
	    	<link rel="stylesheet" type="text/css" href="https://raw.github.com/necolas/normalize.css/master/normalize.css" /> 
	    	<style>
#toc {
	position: fixed;
	  right: 0;
	  top: 0;
	  background-color:#eee;
	  overflow: scroll;
	  border: 1px dashed;
}

#toc #innertoc { 
	display: none;
	height: 500px;
} /* Hide the full TOC by default */

#toc:hover #innertoc{
	display: block; /* Show it on hover */
}
	td {
	border: 1px solid;
	}
	.page{
	display:table-row;
	}
	.indent {
	text-indent:12pt;
	}
	.extraindent {
	text-indent:14pt;
	}

	    	</style>
	    	<link rel="stylesheet" type="text/css" href="style.css" />
	</head>
	<body onload="makeTOC();">
<h1 id="basecolumnstructureddata"><a href="#basecolumnstructureddata"><span class="packageName">base_column_structured_data</span> package</a></h1>

<p>This package describes the storage of base cube data (as opposed to derived cube data) </p>
<div class="">EPackage properties:</div>
<div class="keyValue"><span class="label">Namespace Prefix: </span><span class="teletype">base_column_structured_data</span></div>
<div class="keyValue"><span class="label">Namespace URI: </span><span class="teletype">http://www.eclipse.org/efbt/base_column_structured_data</span></div>
<h2 id="basecolumnstructureddataBaseCell"><a href="#basecolumnstructureddataBaseCell"><a href="#basecolumnstructureddataBaseCell">BaseCell</a></a></h2>

<p>Cell data of Rows of BaseCubes</p>
<div class="eclassProps">EClass properties:<div class="eclassPropList"><span class="label">Abstract</span></div></div><h4><b>Supertype:</b><a href="#columnstructureddataCell">Cell</a></h4><h2 id="basecolumnstructureddataBaseCellWithEnumeratedValue"><a href="#basecolumnstructureddataBaseCellWithEnumeratedValue"><a href="#basecolumnstructureddataBaseCellWithEnumeratedValue">BaseCellWithEnumeratedValue</a></a></h2>

<p>Base Cell data which contains one member of a list of enumerated values (e.g. a currency)</p>
<h4><b>Supertype:</b><a href="#basecolumnstructureddataBaseCell">BaseCell</a></h4><table>
<tr>
	<th colspan="3"><div class="tableHeader">References</div></th>
</tr>
<tr>
	<th><div class="columnHeader">Name</div></th>
	<th><div class="columnHeader">Properties</div></th>
	<th><div class="columnHeader">Documentation</div></th>
</tr>
<tr>	<td><div id="basecolumnstructureddataBaseCellWithEnumeratedValue.value" class="teletype">value</div>
	</td>
	<td><div class="keyValue"><span class="label">T: </span><span class="teletype"><a href="#coreMEMBER">MEMBER</a></span></div>
<div class="label">Cardinality: [0..1]</div>
</td> 
<td> <p>The member</p>
</td>
		</tr></table>
<a href="#base_column_structured_data.BaseCellWithEnumeratedValue.ref"></a>
<h2 id="basecolumnstructureddataBaseCellWithValue"><a href="#basecolumnstructureddataBaseCellWithValue"><a href="#basecolumnstructureddataBaseCellWithValue">BaseCellWithValue</a></a></h2>

<p>Base Cell data which contains a value (e.g. price)</p>
<h4><b>Supertype:</b><a href="#basecolumnstructureddataBaseCell">BaseCell</a></h4><table>
<tr>
	<th colspan="3"><div class="tableHeader">Attributes</div></th>
</tr>
<tr>
	<th><div class="columnHeader">Name</div></th>
	<th><div class="columnHeader">Properties</div></th>
	<th><div class="columnHeader">Documentation</div></th>
</tr>
<tr>	<td><div id="basecolumnstructureddataBaseCellWithValue.value" class="teletype">value</div>
	</td>
	<td><div class="keyValue"><span class="label">T: </span><span class="teletype">EString</span></div>
<div class="label">Cardinality: [0..1]</div>
 </td> <td><p>The value of the cell represented as a String</p>
</td>
		</tr></table>
<a href="#base_column_structured_data.BaseCellWithValue.attr"></a>
<h2 id="basecolumnstructureddataBaseColumnStructuredData"><a href="#basecolumnstructureddataBaseColumnStructuredData"><a href="#basecolumnstructureddataBaseColumnStructuredData">BaseColumnStructuredData</a></a></h2>

<p>Data For BaseCubes as a set of RowData</p>
<h4><b>Supertype:</b><a href="#columnstructureddataColumnStructuredData">ColumnStructuredData</a></h4><table>
<tr>
	<th colspan="3"><div class="tableHeader">References</div></th>
</tr>
<tr>
	<th><div class="columnHeader">Name</div></th>
	<th><div class="columnHeader">Properties</div></th>
	<th><div class="columnHeader">Documentation</div></th>
</tr>
<tr>	<td><div id="basecolumnstructureddataBaseColumnStructuredData.cube" class="teletype">cube</div>
	</td>
	<td><div class="keyValue"><span class="label">T: </span><span class="teletype"><a href="#datadefinitionCUBE">CUBE</a></span></div>
<div class="label">Cardinality: [0..1]</div>
</td> 
<td> <p>The cube with which the data is associated</p>
</td>
		</tr><tr>	<td><div id="basecolumnstructureddataBaseColumnStructuredData.rows" class="teletype">rows</div>
	</td>
	<td><div class="keyValue"><span class="label">T: </span><span class="teletype"><a href="#basecolumnstructureddataBaseRowData">BaseRowData</a></span></div>
<div class="label">Cardinality: [0..*]</div>
<div class="label">Containment</div>
</td> 
<td> <p>The rows which make up the table data</p>
</td>
		</tr></table>
<a href="#base_column_structured_data.BaseColumnStructuredData.ref"></a>
<h2 id="basecolumnstructureddataBaseRowData"><a href="#basecolumnstructureddataBaseRowData"><a href="#basecolumnstructureddataBaseRowData">BaseRowData</a></a></h2>

<p>Data For Rows of BaseCubes</p>
<h4><b>Supertype:</b><a href="#columnstructureddataRowData">RowData</a></h4><table>
<tr>
	<th colspan="3"><div class="tableHeader">References</div></th>
</tr>
<tr>
	<th><div class="columnHeader">Name</div></th>
	<th><div class="columnHeader">Properties</div></th>
	<th><div class="columnHeader">Documentation</div></th>
</tr>
<tr>	<td><div id="basecolumnstructureddataBaseRowData.cells" class="teletype">cells</div>
	</td>
	<td><div class="keyValue"><span class="label">T: </span><span class="teletype"><a href="#basecolumnstructureddataBaseCell">BaseCell</a></span></div>
<div class="label">Cardinality: [0..*]</div>
<div class="label">Containment</div>
</td> 
<td> <p>The cells containing the data associated with the BaseRows</p>
</td>
		</tr></table>
<a href="#base_column_structured_data.BaseRowData.ref"></a>
<h2 id="basecolumnstructureddataInputData"><a href="#basecolumnstructureddataInputData"><a href="#basecolumnstructureddataInputData">InputData</a></a></h2>

<table>
<tr>
	<th colspan="3"><div class="tableHeader">Attributes</div></th>
</tr>
<tr>
	<th><div class="columnHeader">Name</div></th>
	<th><div class="columnHeader">Properties</div></th>
	<th><div class="columnHeader">Documentation</div></th>
</tr>
<tr>	<td><div id="basecolumnstructureddataInputData.name" class="teletype">name</div>
	</td>
	<td><div class="keyValue"><span class="label">T: </span><span class="teletype">EString</span></div>
<div class="label">Cardinality: [0..1]</div>
 </td> <td><p>The name associated with the input data.</p>
</td>
		</tr></table>
<a href="#base_column_structured_data.InputData.attr"></a>
<table>
<tr>
	<th colspan="3"><div class="tableHeader">References</div></th>
</tr>
<tr>
	<th><div class="columnHeader">Name</div></th>
	<th><div class="columnHeader">Properties</div></th>
	<th><div class="columnHeader">Documentation</div></th>
</tr>
<tr>	<td><div id="basecolumnstructureddataInputData.sourceTableData" class="teletype">sourceTableData</div>
	</td>
	<td><div class="keyValue"><span class="label">T: </span><span class="teletype"><a href="#basecolumnstructureddataBaseColumnStructuredData">BaseColumnStructuredData</a></span></div>
<div class="label">Cardinality: [0..*]</div>
<div class="label">Unordered</div>
<div class="label">Containment</div>
</td> 
<td> <p>The set of pupulated BaseCubes that represent the input data.</p>
</td>
		</tr></table>
<a href="#base_column_structured_data.InputData.ref"></a>
<h2 id="basecolumnstructureddataInputDataModule"><a href="#basecolumnstructureddataInputDataModule"><a href="#basecolumnstructureddataInputDataModule">InputDataModule</a></a></h2>

<p>A module containeing a set of input data</p>
<h4><b>Supertype:</b><a href="#modulemanagementModule">Module</a></h4><table>
<tr>
	<th colspan="3"><div class="tableHeader">References</div></th>
</tr>
<tr>
	<th><div class="columnHeader">Name</div></th>
	<th><div class="columnHeader">Properties</div></th>
	<th><div class="columnHeader">Documentation</div></th>
</tr>
<tr>	<td><div id="basecolumnstructureddataInputDataModule.inputData" class="teletype">inputData</div>
	</td>
	<td><div class="keyValue"><span class="label">T: </span><span class="teletype"><a href="#basecolumnstructureddataInputData">InputData</a></span></div>
<div class="label">Cardinality: [0..*]</div>
<div class="label">Containment</div>
</td> 
<td> <p>The input data that makes up the module</p>
</td>
		</tr></table>
<a href="#base_column_structured_data.InputDataModule.ref"></a>
</body>
</html>
