Associate Constraint (FP)
Overview
This functional part provides a detailed description of the approaches that may be used in the association of a constraint to one or more objects where a constraint is defined as a limiting value or boundary condition that may be applied to an object or to the value of a property.
Concept: Specify a constraint
A constraint may be specified as qualitative, quantitative or qualitative and quantitative.
In IFC, a qualitative constraint is termed an 'objective' which defines the purpose of the constraint. This may be something like a design intent (an objective that design is intended to achieve), a health and safety constraint (setting out an objective for design, construction or operational safety), specification (minimum value to achieve), trigger condition (an operating value beyond which some action is required) etc. Typically, an objective is used in conjunction with a value that quantifies the objective as a qualitative and quantitative constraint.
In IFC, a quantitative constraint is termed a 'metric' which defines a benchmark value at which the constraint applies and which may also record a result for comparison with the benchmark (and which can therefore be used in comparison operations). Metrics may be specified as cost values, dates and times, measure values, tables, time series, and text values.
Each constraint used may have a name and a description that enable identification of its purpose.
A grade must be also be set for the constraint that establishes whether it is a hard constraint (must be satisfied), a soft constraint (should be satisfied) or simply advisory. A user defined grade may be set if a predefined grade is not suitable.
A source from within which a constraint is taken may be specified. Additionally, a creating actor and creation date may be assigned
Concept: Aggregating constraints
Constraints may be aggregated together to allows complex constraints to be developed based on their logical relationship.
Aggregation of constraints is logically defined using logical AND and/or logical OR. In this way, where an object or property has multiple constraints assigned, the linkage between them can be specified. Thus linked constraints might show as > X AND < Y) which is useful for an allowed range or bounded value or as (A OR B OR C) which is valuable for an enumerated property where a selection is constrained to be one of A, B or C.
Very complex constraints can be specified using progressive aggregation of logical AND and logical OR links as illustrated below.

Concept: Associate constraint with an object
In IFC a constraint may be associated with one or more objects or property definitions that are subtypes of IfcRoot. Constraints may not be associated with relationships. That is, the same constraint may be used for multiple objects. These objects do not all have to belong to the same class; there is no rule in IFC to enforce such a requirement. However, in practical terms, a given constraint will usually be associated with objects from the same class and this may be enforced by an external rule applied to an exchange requirement that uses the fp_associate_constraint or on a local derivation of fp_associate_constraint.
Concept: Constrain a property
In IFC a constraint may be related with one or more properties that are contained within property sets. That is, the same constraint may be used for multiple properties. These properties do not all have to be of the same type; there is no rule in IFC to enforce such a requirement. However, in practical terms, a given constraint will usually be associated with the same type of property and this may be enforced by an external rule applied to an exchange requirement that uses the fp_associate_constraint or on a local derivation of fp_associate_constraint.
Properties to which a constraint is related also do not have to be from within a single property set. A distinction needs to be made here between a set of properties as identified within the schema (which may be an arbitrary set) and a property set which is an entity in IFC that specifies a non-arbitrary collection of properties.
** Refer to the functional part fp_associate_classification for further information on classifying constraints.
Results
- One or more constraints are specified
- The aggregation of simple constraints into a complex constraint is identified
- The association of a constraint with an object or set of objects is defined.
- The association of a constraint with a property or set of individual properties (which may be in multiple property sets) is defined.
| Description | Entity/Pset/Functional Part | MAN | REC | OPT |
|---|---|---|---|---|
| Concept: Specify a constraint | ||||
| Specify a qualitative objective | ||||
| A name must be asserted for the objective. | IfcObjective.Name -> IfcLabel | |
||
| A description may be given for the objective to provide further information about its purpose. | IfcObjective.Description -> IfcText | |
||
| The grade of the objective must be asserted. The grade value is selected from a predefined range depending whether it must be, should be or is advised to be followed. A user defined grade may be set in which case the UserDefinedGrade must be asserted. |
IfcObjective.ConstraintGrade -> IfcConstraintEnum | |
||
| If the value of the grade is set to user defined, then a user defined grade value must be asserted. If the grade is set to a predefined value, then this attribute should not be asserted. |
IfcObjective.UserDefinedGrade -> IfcLabel | |
||
| The person or organization responsible for creation of the objective may be asserted. This is the person or organization having overall responsibility for the document and who carries out maintenance and revision. |
IfcObjective.CreatingActor -> fp_select_actor | |
||
| The creation time of the objective may be given. Note that the creation time may be specified by date (year only or more explicitly by year and/or month and/or day) or time or both. |
IfcObjective.CreationTime -> fp_select_date_and_time | |
||
| The source from which an objective is derived may be asserted. | IfcObjective.ConstraintSource -> IfcLabel | |
||
| A qualifying purpose of the objective must be asserted. The qualifier value is selected from a predefined range that identifies a number of typical purposes. A user defined qualifier may be set in which case the UserDefinedQualifier must be asserted. |
IfcObjective.ObjectiveQualifier -> IfcObjectiveEnum | |
||
| If the value of the qualifier is set to user defined, then a user defined qualifier value must be asserted. If the qualifier is set to a predefined value, then this attribute should not be asserted. |
IfcObjective.UserDefinedQualifier -> IfcLabel | |
||
| An associated benchmark value for an objective may be asserted that defines the limit defined by the constraint. If the constraint is to be both qualitative and quantitative then this attribute must be asserted. Since it is anticipated that this will normally be the case, then this attribute is identified as recommended within this functional part. |
IfcObjective.BenchmarkValues -> IfcMetric | |
||
| An associated result value for an objective may be asserted that captures the actual value achieved. | IfcObjective.ResultValues -> IfcMetric | |
||
| Specify a quantitative metric | ||||
| A name must be asserted for the metric. | IfcMetric.Name -> IfcLabel | |
||
| A description may be given for the metric to provide further information about its purpose. | IfcMetric.Description -> IfcText | |
||
| The grade of the metric must be asserted. The grade value is selected from a predefined range depending whether it must be, should be or is advised to be followed. A user defined grade may be set in which case the UserDefinedGrade must be asserted. |
IfcMetric.ConstraintGrade -> IfcConstraintEnum | |
||
| If the value of the grade is set to user defined, then a user defined grade value must be asserted. If the grade is set to a predefined value, then this attribute should not be asserted. |
IfcMetric.UserDefinedGrade -> IfcLabel | |
||
| The person or organization responsible for creation of the metric may be asserted. This is the person or organization having overall responsibility for the document and who carries out maintenance and revision. |
IfcMetric.CreatingActor -> fp_select_actor | |
||
| The creation time of the metric may be given. Note that the creation time may be specified by date (year only or more explicitly by year and/or month and/or day) or time or both. |
IfcMetric.CreationTime -> fp_select_date_and_time | |
||
| The source from which a metric is derived may be asserted. | IfcMetric.ConstraintSource -> IfcLabel | |
||
| The comparator for the benchmark metric must be asserted. The metric benchmark comparator establishes whether a result must be greater than, less than or equal to the benchmark value. The benchmark value is selected from a predefined range. Note that there is no user defined value specification available within this range |
IfcMetric.Benchmark -> IfcBenchmarkEnum | |
||
| The type of metric value being used must be asserted. Value types are selected from a range including specific measures with units, costs, dates/times, time series, tables or simply text values. |
IfcMetric.DataValue -> IfcMetricValueSelect Select from:
|
|
||
| A source from which metric values are obtained may be asserted. Note that this value may differ from or be the same as the source of the metric. However, since it is unlikely that the value source will be different to the metric source and therefore may (normally) be ignored. |
IfcMetric.ValueSource -> IfcLabel | |
||
| Concept: Aggregating constraints | ||||
| In the description below, IfcConstraint is used as the abstract supertype of both IfcObjective and IfcMetric. Reference to IfcConstraint should therefore be interpreted as a reference to either IfcObjective or IfcMetric depending on whether a qualitative or quantitative constraint is being specified. | ||||
| Define the parent constraint in the aggregation relationship | IfcConstraintAggregationRelationship.RelatingConstraint -> IfcConstraint | |
||
| Define the child constraints in the aggregation relationship | IfcConstraintAggregationRelationship.RelatedConstraints -> IfcConstraint | |
||
| The logical operator to be applied to the aggregation relationship must be asserted. The logical aggregator is selected from a predefined range that includes AND and OR. |
IfcConstraintAggregationRelationship.LogicalAggregator -> IfcLogicalOperatorEnum | |
||
| A name may be asserted for the relationship. | IfcConstraintAggregationRelationship.Name -> IfcLabel | |
||
| A description may be given for the relationship to provide further information about its purpose. | IfcConstraintAggregationRelationship.Description -> IfcText | |
||
| Concept: Associate a constraint with an object | ||||
| In the description below, IfcConstraint is used as the abstract supertype of both IfcObjective and IfcMetric. Reference to IfcConstraint should therefore be interpreted as a reference to either IfcObjective or IfcMetric depending on whether a qualitative or quantitative constraint is being associated. | ||||
| Set the relationship for the constraint that is to be associated. | IfcRelAssociatesConstraint.RelatingConstraint -> IfcConstraint | |
||
| Set the relationship for the object(s) that are to be constrained. A constraint may be associated with any subtype of IfcRoot including objects and property definitions but not relationships. |
IfcRelAssociatesConstraint.RelatedObjects -> IfcRoot <subtypes> | |
||
| The intent of the relationship must be asserted. Typical values can be e.g. RATIONALE or EXPECTED PERFORMANCE |
IfcRelAssociatesConstraint.Intent -> IfcLabel | |||
| Assert general attributes for the relationship | ||||
| Assert the globally unique identifier for the relationship | IfcRelAssociatesConstraint.GlobalId -> IfcGloballyUniqueId | |
||
| Assert the owner history of the relationship | IfcRelAssociatesConstraint.OwnerHistory -> fp_apply_owner_history | |
||
| Set a name to the relationship | IfcRelAssociatesConstraint.Name -> IfcLabel | |
||
| Provide a description of the relationship | IfcRelAssociatesConstraint.Description -> IfcText | |
||
| Concept: Constrain a property | ||||
| In the description below, IfcConstraint is used as the abstract supertype of both IfcObjective and IfcMetric. Reference to IfcConstraint should therefore be interpreted as a reference to either IfcObjective or IfcMetric depending on whether a qualitative or quantitative constraint is being associated. | ||||
| Set the relationship for the constraint that is to be associated. | IfcPropertyConstraintRelationship.RelatingConstraint -> IfcConstraint | |
||
| Set the relationship for the property or properties that are to be constrained. A constraint may be associated with any subtype of IfcRoot including objects and property definitions but not relationships. |
IfcPropertyConstraintRelationship.RelatedProperties -> fp_property | |
||
| Set a name to the relationship | IfcPropertyConstraintRelationship.Name -> IfcLabel | |
||
| Provide a description of the relationship | IfcPropertyConstraintRelationship.Description -> IfcText | |
||
- IFC Entities Required
- IfcConstraint
- IfcConstraintAggregationRelationship
- IfcConstraintClassificationRelationship
- IfcConstraintRelationship
- IfcCostValue
- IfcMeasureWithUnit
- IfcMetric
- IfcObjective
- IfcPropertyConstraintRelationship
- IfcRelationship
- IfcRelAssociates
- IfcRelAssociatesConstraint
- IfcRoot
- IfcTable
- IfcTimeSeries
** IfcCostValue, IfcMeasureWithUnit, IfcTable and IfcTimeSeries are not fully defined within this functional part
- IFC Datatypes Required
- IfcBenchmarkEnum
- IfcConstraintEnum
- IfcGloballyUniqueId
- IfcLabel
- IfcLogicalOperatorEnum
- IfcMetricValueSelect
- IfcObjectiveEnum
- IfcText
- IFC Functions Required
- -
- IDM Functional Parts Required
- fp_apply_owner_history
- fp_property
- fp_select_actor
- fp_select_date_and_time
EXPRESS-G Schema

EXPRESS Schema
SCHEMA FP_ASSOCIATE_CONSTRAINT;
TYPE IfcGloballyUniqueId = STRING (22) FIXED;
END_TYPE;
TYPE IfcLabel = STRING;
END_TYPE;
TYPE IfcText = STRING;
END_TYPE;
TYPE IfcBenchmarkEnum = ENUMERATION OF
(GREATERTHAN,
GREATERTHANOREQUALTO,
LESSTHAN,
LESSTHANOREQUALTO,
EQUALTO,
NOTEQUALTO);
END_TYPE;
TYPE IfcConstraintEnum = ENUMERATION OF
(HARD,
SOFT,
ADVISORY,
USERDEFINED,
NOTDEFINED);
END_TYPE;
TYPE IfcLogicalOperatorEnum = ENUMERATION OF
(LOGICALAND,
LOGICALOR);
END_TYPE;
TYPE IfcObjectiveEnum = ENUMERATION OF
(CODECOMPLIANCE,
DESIGNINTENT,
HEALTHANDSAFETY,
REQUIREMENT,
SPECIFICATION,
TRIGGERCONDITION,
USERDEFINED,
NOTDEFINED);
END_TYPE;
TYPE IfcMetricValueSelect = SELECT
(IfcText,
fp_select_date_time,
IfcMeasureWithUnit,
IfcTable,
IfcCostValue,
IfcTimeSeries);
END_TYPE;
ENTITY IfcMeasureWithUnit;
END_ENTITY;
ENTITY IfcTable;
END_ENTITY;
ENTITY IfcCostValue;
END_ENTITY;
ENTITY IfcTimeSeries;
END_ENTITY;
ENTITY IfcRoot
ABSTRACT SUPERTYPE;
GlobalId : IfcGloballyUniqueId;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
OwnerHistory : fp_apply_owner_history;
UNIQUE
UR1 : GlobalId;
END_ENTITY;
ENTITY IfcRelationship
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcRoot);
END_ENTITY;
ENTITY IfcRelAssociates
SUBTYPE OF(IfcRelationship);
RelatedObjects : SET [1:?] OF IfcRoot;
WHERE
WR1 : SIZEOF(QUERY(temp <\* RelatedObjects \|
NOT(('IFC2X2_FINAL.IFCOBJECT' IN TYPEOF(temp))
OR ('IFC2X2_FINAL.IFCPROPERTYDEFINITION' IN TYPEOF(temp)))
)) = 0;
END_ENTITY;
ENTITY IfcRelAssociatesConstraint
SUBTYPE OF(IfcRelAssociates);
Intent : IfcLabel;
RelatingConstraint : IfcConstraint;
END_ENTITY;
ENTITY IfcConstraint
ABSTRACT SUPERTYPE OF (ONEOF(IfcMetric, IfcObjective));
Name : IfcLabel;
Description : OPTIONAL IfcText;
ConstraintGrade : IfcConstraintEnum;
ConstraintSource : OPTIONAL IfcLabel;
UserDefinedGrade : OPTIONAL IfcLabel;
CreationTime : OPTIONAL fp_select_date_time;
CreatingActor : OPTIONAL fp_select_actor;
INVERSE
ClassifiedAs : SET OF IfcConstraintClassificationRelationship FOR ClassifiedConstraint;
RelatesConstraints : SET OF IfcConstraintRelationship FOR RelatingConstraint;
IsRelatedWith : SET OF IfcConstraintRelationship FOR RelatedConstraints;
PropertiesForConstraint : SET OF IfcPropertyConstraintRelationship FOR RelatingConstraint;
Aggregates : SET OF IfcConstraintAggregationRelationship FOR RelatingConstraint;
IsAggregatedIn : SET OF IfcConstraintAggregationRelationship FOR RelatedConstraints;
WHERE
WR11 : (ConstraintGrade <> IfcConstraintEnum.USERDEFINED) OR
((ConstraintGrade = IfcConstraintEnum.USERDEFINED) AND EXISTS(SELF\IfcConstraint.UserDefinedGrade));
END_ENTITY;
ENTITY IfcMetric
SUBTYPE OF(IfcConstraint);
Benchmark : IfcBenchmarkEnum;
ValueSource : OPTIONAL IfcLabel;
DataValue : IfcMetricValueSelect;
END_ENTITY;
ENTITY IfcObjective
SUBTYPE OF(IfcConstraint);
BenchmarkValues : OPTIONAL IfcMetric;
ResultValues : OPTIONAL IfcMetric;
ObjectiveQualifier : IfcObjectiveEnum;
UserDefinedQualifier : OPTIONAL IfcLabel;
WHERE
WR21 : (ObjectiveQualifier <> IfcObjectiveEnum.USERDEFINED) OR
((ObjectiveQualifier = IfcObjectiveEnum.USERDEFINED) AND EXISTS(SELF\IfcObjective.UserDefinedQualifier));
END_ENTITY;
ENTITY IfcConstraintClassificationRelationship;
ClassifiedConstraint : IfcConstraint;
END_ENTITY;
ENTITY IfcConstraintRelationship;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
RelatingConstraint : IfcConstraint;
RelatedConstraints : SET [1:?] OF IfcConstraint;
WHERE
WR11 : SIZEOF(QUERY(temp <\* RelatedConstraints \| temp :=: RelatingConstraint )) = 0;
END_ENTITY;
ENTITY IfcPropertyConstraintRelationship;
RelatingConstraint : IfcConstraint;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
RelatedProperties : fp_property;
END_ENTITY;
ENTITY IfcConstraintAggregationRelationship;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
RelatingConstraint : IfcConstraint;
RelatedConstraints : LIST [1:?] OF IfcConstraint;
LogicalAggregator : IfcLogicalOperatorEnum;
WHERE
WR11 : SIZEOF(QUERY(temp <\* RelatedConstraints \|
temp :=: RelatingConstraint
)) = 0;
END_ENTITY;
ENTITY fp_apply_owner_history;
END_ENTITY;
ENTITY fp_property;
END_ENTITY;
ENTITY fp_select_actor;
END_ENTITY;
ENTITY fp_select_date_time;
END_ENTITY;
END_SCHEMA;
Examples of Associating Constraints
Example 1: Specifying a constraint for an office move
A constraint is to be applied to moving the contents of an office such that the move process must be complete by 30th June 2003. The name to be applied to the constraint is 'Move End Constraint' and the description to be applied is 'Move must be completed by set date'. The creating actor is an organization (unspecified in the example) and the creation time is 1st April 2003. The constraint grade is specified as 'Hard' meaning that compliance is required (for reasons that may be specified elsewhere). The objective qualifier for the constraint is 'MOVECONSTRAINT' which is a user defined qualifier since it is not contained within the predefined qualifiers in IfcObjectiveEnum. The value source for the constraint is the Lessor of the office space into which the move is to take place.
Note that in the example, both the objective and the metric could inherit the same data from the abstract constraint supertype. However, for present purposes, any data already specified in the objective that may be optionally asserted is omitted from the metric.

/* specification of the objective */
#3000=IFCOBJECTIVE('Move End Constraint','Move must be completed by set date',.HARD.,$,#11051,#12051,$,#4000,$,.USERDEFINED.,'MOVECONSTRAINT');
/* specification of the metric */
#4000=IFCMETRIC('Move End Constraint',$,.HARD.,$,$,$,$,.LESSTHANOREQUALTO.,'Lessor',#12061);
/* creating actor */
#11051=IFCORGANIZATION(... ...);
/* creation time and constraint date*/
#12051=IFCCALENDARDATE(1,4,2006);
#12061= IFCCALENDARDATE(30,6,2006);
Example 2: Associate a constraint with an office move
This example is based on an office move as above except that, in this case, several similar moves with the same constraints are considered. In this case, rather than specifying the constraints for the move, the constraints are actually associated with the move. The intent of the constraints is specified as 'Required Move Date'.

/* ownership information*/
#2=IFCOWNERHISTORY(...);
/* specification of the objective */
#3000=IFCOBJECTIVE('Move End Constraint','Move must be completed by set date',.HARD.,$,#11051,#12051,$,#4000,$,.USERDEFINED.,'MOVECONSTRAINT');
/* specification of the metric */
#4000=IFCMETRIC('Move End Constraint',$,.HARD.,$,$,$,$,.LESSTHANOREQUALTO.,'Lessor',#12061);
/* creating actor */
#11051=IFCORGANIZATION(... ...);
/* creation time and constraint date*/
#12051=IFCCALENDARDATE(1,4,2006);
#12061= IFCCALENDARDATE(30,6,2006);
/* the move to be constrained*
#13001=IFCMOVE('abcdefghijklmnopqrst13001',#2, ...);
#13002=IFCMOVE('abcdefghijklmnopqrst13002',#2, ...);
#13003=IFCMOVE('abcdefghijklmnopqrst13003',#2, ...);
#13004=IFCMOVE('abcdefghijklmnopqrst13004',#2, ...);
#13005=IFCMOVE('abcdefghijklmnopqrst13005',#2, ...);
/* associating the constraints */
#13101=IFCRELASSOCIATESCONSTRAINT('abcdefghijklmnopqrst13101',#2,$,$,(#13001,#13002,#13003,#13004,#13005), 'Required Move Date',#3000 );
#13102=IFCRELASSOCIATESCONSTRAINT('abcdefghijklmnopqrst13102',#2,$,$,(#13001,#13002,#13003,#13004,#13005), 'Required Move Date',#4000 );
Example 3: Aggregating constraints
Complex constraints can be created by aggregating together sets of simple constraints and describing whether they should operate together (logical AND) or be alternatives (logical OR).
In this example, two metrics are created to define an upper and a lower weight constraint. They are then aggregated with an objective. The objective is then associated as a weight constraint with the move objects and its intent is defined as 'Maximum and minimum weights'

/* ownership information*/
#2=IFCOWNERHISTORY(...);
/* specification of the objective */
#3010=IFCOBJECTIVE('Weight Constraint','Aggregation of upper and lower limits',.HARD.,$,#11051,#12051,$,$,$,.SPECIFICATION.,$);
/* specification of the metrics */
#4010=IFCMETRIC('Weight Constraint',$,.HARD.,$,$,$,$,.GREATERTHANOREQUALTO.,$,#12071);
#4011=IFCMETRIC('Weight Constraint',$,.HARD.,$,$,$,$,.LESSTHANOREQUALTO.,$,#12072);
/* aggregating the constraints */
#5001=IFCCONSTRAINTAGGREGATIONRELATIONSHIP($,$,#3010,(#4010,#4011),.LOGICALAND.);
/* creating actor and time */
#11051=IFCORGANIZATION(... ...);
#12051=IFCCALENDARDATE(1,4,2006);
/* constraint data values */
#12071= IFCMEASUREWITHUNIT(19.0,#12081);
#12072= IFCMEASUREWITHUNIT(21.0,#12081);
#12081=IFCSIUNIT(.MASSUNIT.,.KILO.,.GRAM.,#12082);
#12082=IFCDIMENSIONALEXPONENTS(0,1,0,0,0,0,0);
/* the move to be constrained*
#13001=IFCMOVE('abcdefghijklmnopqrst13001',#2, ...);
#13002=IFCMOVE('abcdefghijklmnopqrst13002',#2, ...);
#13003=IFCMOVE('abcdefghijklmnopqrst13003',#2, ...);
#13004=IFCMOVE('abcdefghijklmnopqrst13004',#2, ...);
#13005=IFCMOVE('abcdefghijklmnopqrst13005',#2, ...);
/* associating the constraints */
#13111=IFCRELASSOCIATESCONSTRAINT('abcdefghijklmnopqrst13111',#2,$,$,(#13001,#13002,#13003,#13004,#13005), 'Maximum and minimum weights',#3010 );
Example 4: Associate a constraint with a property
The illustration below shows an example of how a property constraint relationship would be applied to a property for the weight of a 'thing' within a property set to define the weight specification. The constraint is defined as an objective that aggregates two metrics so that there is an upper limit and a lower limit value.
The metrics and their aggregation into an objective as defined in example 3 above are reused except that, in this case, they are used to constrain a property rather than being associated with a move.

In the example, the property set is not fully detailed (refer to the functional part fp_define_property_set for further information on defining property sets). It is used in this case only as a container for a property to which the constraint is related.
/* ownership information*/
#2=IFCOWNERHISTORY(...);
/* the property set containing one constrained property */
#1001=IFCPROPERTYSET('abcdefghijklmnopqrst1001',#2,'Pset_WeightConstraint',$,(#1011));
/* the property to be constrained */
#1011=IFCPROPERTYSINGLEVALUE('ThingWeight',$,19.5,#12081);
/* relationship between the property and the constraint */
#1021=IFCPROPERTYCONSTRAINTRELATIONSHIP(#3010,(#1011),$,$);
/* specification of the objective */
#3010=IFCOBJECTIVE('Weight Constraint','Aggregation of upper and lower limits',.HARD.,$,#11051,#12051,$,$,$,.SPECIFICATION.,$);
/* specification of the metric */
#4010=IFCMETRIC('Weight Constraint',$,.HARD.,$,$,$,$,.GREATERTHANOREQUALTO.,$,#12071);
#4011=IFCMETRIC('Weight Constraint',$,.HARD.,$,$,$,$,.LESSTHANOREQUALTO.,$,#12072);
/* aggregating the constraints */
#5001=IFCCONSTRAINTAGGREGATIONRELATIONSHIP($,$,#3010,(#4010,#4011),.LOGICALAND.);
/* creating actor and time */
#11051=IFCORGANIZATION(... ...);
#12051=IFCCALENDARDATE(1,4,2006);
/* constraint data values */
#12071= IFCMEASUREWITHUNIT(19.0,#12081);
#12072= IFCMEASUREWITHUNIT(21.0,#12081);
#12081=IFCSIUNIT(.MASSUNIT.,.KILO.,.GRAM.,#12082);
#12082=IFCDIMENSIONALEXPONENTS(0,1,0,0,0,0,0);