IFC 4.3.2.20241204 (IFC4X3_ADD2) under development

8.21.3.3 IfcTable

8.21.3.3.1 Semantic definition

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 8.21.3.3.A illustrates table use.

Table use
Figure 8.21.3.3.A — Table use

Figure 8.21.3.3.B depicts how tables were structured prior to IFC4.

Table use alternative
Figure 8.21.3.3.B — Table use alternative

8.21.3.3.2 Entity inheritance

8.21.3.3.3 Attributes

# Attribute Type Description
IfcTable (6)
1 Name OPTIONAL IfcLabel

No description available.

2 Rows OPTIONAL LIST [1:?] OF IfcTableRow

Reference to information content of rows.

3 Columns OPTIONAL LIST [1:?] OF IfcTableColumn

The column information associated with this table.

* NumberOfCellsInRow IfcInteger

This attribute is formally derived.

HIINDEX(Rows[1].RowCells)

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 IfcInteger

This attribute is formally derived.

SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading))

The number of headings in a table. This is restricted by WR3 to max. one.

* NumberOfDataRows IfcInteger

This attribute is formally derived.

SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading)))

The number of rows in a table that contains data, i.e. total number of rows minus number of heading rows in table.

Table 8.21.3.3.C

8.21.3.3.4 Formal propositions

Name Description
WR1

Ensures that each row defines the same number of cells. The rule compares whether all other rows of the IfcTable have the same number of cells as the first row.

SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0
WR2

The rule restricts the allowed number of heading rows to no more than one.

{ 0 <= NumberOfHeadings <= 1 }
Table 8.21.3.3.D

8.21.3.3.5 Formal representation

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;

8.21.3.3.6 References

Edit on Github


Is this page difficult to understand? Let us know!

8.21.3.3.7 Changelog

8.21.3.3.7.1 IFC4

  • attribute, Columns
  • where rule, WR3
  • attribute Name optional, Changed from "False" to "True"
  • attribute Name type, Changed from "string" to "IfcLabel"
  • attribute Rows optional, Changed from "False" to "True"
  • where rule WR2 definition, Changed from "sizeof(query(Temp <* Rows | hiindex(Temp.RowCells) <> hiindex(Rows[1].RowCells))) = 0" to "{0<=NumberOfHeadings<=1}"