Allowable to associate more than one IfcTypeObject with an IfcObject (IfcRelDefinesByType)?

My gut feeling says no, but is there a formal rule associated with this?

IsTypedBy set’s cardinality is 1 at most for IfcObject.

ENTITY IfcObject
 ABSTRACT SUPERTYPE OF (ONEOF
	(IfcActor
	,IfcControl
	,IfcGroup
	,IfcProcess
	,IfcProduct
	,IfcResource))
 SUBTYPE OF (IfcObjectDefinition);
	ObjectType : OPTIONAL IfcLabel;
 INVERSE
	IsDeclaredBy : SET [0:1] OF IfcRelDefinesByObject FOR RelatedObjects;
	Declares : SET [0:?] OF IfcRelDefinesByObject FOR RelatingObject;
	IsTypedBy : SET [0:1] OF IfcRelDefinesByType FOR RelatedObjects;
	IsDefinedBy : SET [0:?] OF IfcRelDefinesByProperties FOR RelatedObjects;
 WHERE
	UniquePropertySetNames : ((SIZEOF(IsDefinedBy) = 0) OR IfcUniqueDefinitionNames(IsDefinedBy));
END_ENTITY;

standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifcobject.htm

Super. Thanks!

For completeness, in Ifc2x3, the rule is in a more verbose form:

IfcObject : WR1 : Only maximum of one relationship to an underlying type (by an IfcRelDefinesByType relationship) should be given for an object instance.

For completeness, in Ifc2x3, the rule is in a more verbose form

Just fyi, that’s because in IFC2X3 the IsDefinedBy attribute combined both IfcRelDefinesByProperties as well as ByType. So there needed to be a formal imperative rule to check that within that set of relationships at most one established a type. In IFC4 that inverse attribute was split out into a designated one for type with an bound of 1 so an explicit rule was no longer needed.

1 Like