What is the correct term for the ID of items in an IFC-STEP file? e.g. "#3415".

An IFC STEP Physical File (IFC-SPF) has a unique ID number for items in its DATA section, e.g. “#336345”. What is the correct term for this ID?

I understand that ISO 10303-21 Clear Text Encoding of the Exchange Structure calls this number “Instance Name”. But referring to the number as “Instance Name” will certainly cause confusion in the context of working with IFC models.

Does this number have an official or at least commonly used name in the IFC/BIM community?
If not, would “STEP Instance ID”, “IFC-STEP Instance ID” or “IFC Instance ID” make sense to you?

1 Like

I believe they are called STEP-IDs.
IFC instances have GUIDs as IDs.

Good question! I often call them “SPF-IDs” or “local IDs”, but “instance name” is more correct. Since these numbers are to be unique within one exchange structure - mostly one file - you could see them as “local IDs” as opposed to “global IDs” (GUIDs) which are only allocated to instances of selected entity types (IfcRoot and subtypes) because other entities do not have global identity. When it comes to local identity this is not straight-forward. These numbers are unique, hence there are no two entities in one file with the same number. But the number does not constitute semantic identity - there could be two entities with different numbers, but denoting the same geometric object, for example a point. Syntactically these are (local) identifiers, but semantically not and that’s why I think “name” is the more correct term. In other words the same semantic object (e.g. point) can go by different “names” in one file. You would usually not allow this for identifiers or IDs. In practice though “name” and “ID” are often used as synonymous terms and in my view “instance name” or “SPF-ID” or “local ID” or similar are just as fine. As @berlotti pointed out, don’t call them anything “IFC” because they are not defined in IFC (globally unique IDs are). I even believe they do not necessarily exist consistently in every STEP encoding (e.g. in XML only where necessary for references).

Agreed

The standard (or at least the grammar) refers to them as “entity instance name”, see excerpt from grammar:

REAL              = [ SIGN ] DIGIT { DIGIT } "." { DIGIT }
                    [ "E" [ SIGN ] DIGIT { DIGIT } ] .

STRING            = "'" { SPECIAL | DIGIT | SPACE | LOWER | UPPER | 
                    HIGH_CODEPOINT |
                    APOSTROPHE APOSTROPHE | 
                    REVERSE_SOLIDUS REVERSE_SOLIDUS | 
                    CONTROL_DIRECTIVE } "'" .

ENTITY_INSTANCE_NAME      = "#" ( DIGIT ) { DIGIT } .

But “STEP-ID” or as @taucher pointed out “SPF-ID” (technically more precise, because p21 is just one possible serialization) will be probably be best understood in the community.

1 Like