IfcTable

Natural language names
Tabelle
Table
Table
Change log
ItemSPFXMLChangeDescription
IFC2x3 to IFC4 4.0.0.0
    IfcTable
      NameXXMODIFIEDType changed from STRING to IfcLabel.
Instantiation changed to OPTIONAL.
      RowsMODIFIEDInstantiation changed to OPTIONAL.
      ColumnsADDED
IFC2x3 to IFC4 4.0.0.0
    IfcTable
      NameXXMODIFIEDType changed from STRING to IfcLabel.
Instantiation changed to OPTIONAL.
      RowsMODIFIEDInstantiation changed to OPTIONAL.
      ColumnsADDED
Semantic definitions at the entity
Entity 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 435 illustrates table use.

"Table use"

Figure 435 — Table use

Figure 436 depicts how tables were structured prior to IFC4.

"Table use alternative"

Figure 436 — Table use alternative

HISTORY  New entity in IFC1.5.

IFC4 CHANGE  Columns attribute added.

Attribute definitions
#AttributeTypeCardinalityDescription G
1NameIfcLabel? X
2RowsIfcTableRow? L[1:?] Reference to information content of rows. X
3ColumnsIfcTableColumn? L[1:?] The column information associated with this table. X
NumberOfCellsInRow
:=HIINDEX(Rows[1].RowCells)
IfcIntegerThe 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. X
NumberOfHeadings
:=SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading))
IfcIntegerThe number of headings in a table. This is restricted by WR3 to max. one. X
NumberOfDataRows
:=SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading)))
IfcIntegerThe number of rows in a table that contains data, i.e. total number of rows minus number of heading rows in table. X
Formal Propositions
RuleDescription
WR1Ensures 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.
WR2The rule restricts the allowed number of heading rows to no more than one.
Inherited definitions from supertypes
Entity inheritance
Attribute inheritance
#AttributeTypeCardinalityDescriptionG
IfcTable
1NameIfcLabel? X
2RowsIfcTableRow? L[1:?] Reference to information content of rows. X
3ColumnsIfcTableColumn? L[1:?] The column information associated with this table. X
NumberOfCellsInRow
:=HIINDEX(Rows[1].RowCells)
IfcIntegerThe 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. X
NumberOfHeadings
:=SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading))
IfcIntegerThe number of headings in a table. This is restricted by WR3 to max. one. X
NumberOfDataRows
:=SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading)))
IfcIntegerThe number of rows in a table that contains data, i.e. total number of rows minus number of heading rows in table. X
Formal representations
XML Specification
 <xs:element name="IfcTable" type="ifc:IfcTable" substitutionGroup="ifc:Entity" nillable="true"/>
 <xs:complexType name="IfcTable">
  <xs:complexContent>
   <xs:extension base="ifc:Entity">
    <xs:sequence>
     <xs:element name="Rows" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcTableRow" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcTableRow"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="Columns" nillable="true" minOccurs="0">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcTableColumn" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcTableColumn"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
EXPRESS Specification
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;

Link to EXPRESS-G diagram EXPRESS-G diagram

References  References: IfcMetricValueSelect IfcObjectReferenceSelect

Link to this page  Link to this page