IFC 4.3.x development

8.21.3.3 IfcTable

Change log

IFC4

additions attributes Columns
deletions where_rules WR2
modificationsattributes Name definition Changed from string to IfcLabel
modificationsattributes Name is_optionalChanged from False to True
modificationsattributes Rows is_optionalChanged from False to True
modificationswhere_rules WR3 name Changed from WR3 to WR2

8.21.3.3.1 Semantic definitions at the entity

An IfcTable is a data structure for the provision of information in the form of rows and columns. Each instance may have IfcTableColumn instances that define the name, description and units for each column. The rows of information are stored as a list of IfcTableRow objects.

Limitation: For backwards compatibility, the rows of an IfcTable object are constrained to have the same number of cells. The first row of the table provides the number of cells. All other rows are forced to include the same number of cells. This is enforced by the WR2.

Figure 1 illustrates table use.

"Table use"

Figure 2 depicts how tables were structured prior to IFC4.

"Table use alternative"

HISTORY  New entity in IFC1.5.

IFC4 CHANGE  Columns attribute added.

8.21.3.3.1 Attributes

# Attribute Type Description
IfcTable
1 Name OPTIONAL IfcLabel
2 Rows OPTIONAL LIST [1:?] OF IfcTableRow Reference to information content of rows.
3 Columns OPTIONAL LIST [1:?] OF IfcTableColumnThe column information associated with this table.
NumberOfCellsInRowINVALID The number of cells in each row, this complies to the number of columns in a table. See WR2 that ensures that each row has the same number of cells. The actual value is derived from the first member of the Rows list.
NumberOfHeadings INVALID The number of headings in a table. This is restricted by WR3 to max. one.
NumberOfDataRows INVALID The number of rows in a table that contains data, i.e. total number of rows minus number of heading rows in table.

8.21.3.3.2 Entity inheritance

dot_inheritance IfcTable IfcTable

8.21.3.3.3 Formal representations

ENTITY IfcTable;
	Name : OPTIONAL IfcLabel;
	Rows : OPTIONAL LIST [1:?] OF IfcTableRow;
	Columns : OPTIONAL LIST [1:?] OF IfcTableColumn;
 DERIVE
	NumberOfCellsInRow : IfcInteger := HIINDEX(Rows[1].RowCells);
	NumberOfHeadings : IfcInteger := SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading));
	NumberOfDataRows : IfcInteger := SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading)));
 WHERE
	WR1 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;
	WR2 : { 0 <= NumberOfHeadings <= 1 };
END_ENTITY;